C# Restful URL。视图模型特定
我已经经历了这一切,我理解了他所说的,特别是关于层次结构(沿着路径往回走) 所以 删除C# Restful URL。视图模型特定,c#,.net,rest,asp.net-web-api,restful-url,C#,.net,Rest,Asp.net Web Api,Restful Url,我已经经历了这一切,我理解了他所说的,特别是关于层次结构(沿着路径往回走) 所以 删除property应为您提供id为1的对象,删除id应为您提供所有对象。很好,逻辑性很强 但我总是通过视图模型公开数据,所以 /objects/list/1将为我提供id为1的对象的对象列表视图模型。或者/objects/detail/1将为id为1的对象提供对象详细视图模型 使用这种方法,我得到了一个很长的结构,只是为了得到一个特定的视图模型!即对象/可视化/分析/线程。这是不是很安静?我似乎(下意识地!)正在
property
应为您提供id为1的对象,删除id应为您提供所有对象。很好,逻辑性很强
但我总是通过视图模型公开数据,所以
/objects/list/1
将为我提供id为1的对象的对象列表视图模型。或者/objects/detail/1
将为id为1的对象提供对象详细视图模型
使用这种方法,我得到了一个很长的结构,只是为了得到一个特定的视图模型!即对象/可视化/分析/线程
。这是不是很安静?我似乎(下意识地!)正在构造我的restful API,以匹配这个特定视图模型所在的名称空间或模块(因此在.NET中它将是名称空间:app.models.object.visualization.analysis)
如何最好地构造这样一个restful端点?有这样的东西更好吗
对象列表/1
和对象详细信息/1
谢谢
例子:
对不起,我应该说得更清楚些。我将给出一个.NET示例。假设我有一个cart类
public class Cart
{
public int CardId { get; set; }
public string CartName { get; set; }
public DateTime Created { get; set; }
public DateTime LastUpdated { get; set; }
public IEnumerable<CartItem> Items { get; set; }
}
及
对于某个视图(如简单表),我可能只需要id和名称。因此,我公开了一个restful端点,它将返回以下结构
{
id: 1,
name: 'Cart 1',
lastUpdated: '26-Sep-2014 16:51:23',
items: [
// an array of objects
]
}
{
id: 1,
name: 'Cart 1'
}
其他一切都是多余的。对于购物车编辑页面,我可能需要更多的数据,而不仅仅是id和名称。问题是,如何构造restful端点以公开同一对象的这些不同表示形式?请尽量保持URL的简单性。这意味着,如果您的API是一所房子,并且您想要一个名叫玛丽的人的所有衣服,那么您的URL将是:
API/persons/Marie/clothes
而不是:
API/house/persons/Marie/clothes/all
对不起,这些不好的例子。Rest很难解释。URI是稳定的
资源由URI标识。获取ID为1的对象时,执行以下操作:
GET /objects/1
要获得所有对象的列表,只需
GET /objects
使用内容协商
服务器返回的对象1的表示形式由内容协商决定。这是使用HTTP头完成的,而不是URL路径段或查询参数。这样做:
GET /objects/1
Accept: appliction/vnd.com.example.object.detail+json
通过这种方式,客户机可以请求您称之为“详细视图模型”的内容
如果客户端想要得到“列表视图模型”,您可以这样做
GET /objects/1
Accept: appliction/vnd.com.example.object.list+json
注意
- 两个请求的URL相同
标题具有不同的值Accept
:这将从对象1请求名为GET/objects/1/list
的子资源list
:这将请求另一个子资源GET/objects/1/list
或GET/objects/1?model=detail
:这些是识别不同资源的不同URIGET/objects/1?model=list
.NET
经验的任何人都能理解它们?@Umair您描述的是同一资源的不同表示。资源是相同的,必须由相同的URL标识。可以使用内容协商来选择表示。@Tichodroma,因此参考我在上面给出的示例,我是否可以执行/cart/1/list
来获得列表视图模型?这不是我想要的!我不想透露衣服的每一个细节。例如,我只想在一种情况下给设计师标签,在另一种情况下,我可能想给设计师标签,购买物品的日期,尺寸等。
GET /objects
GET /objects/1
Accept: appliction/vnd.com.example.object.detail+json
GET /objects/1
Accept: appliction/vnd.com.example.object.list+json