编程语言
首页 > 编程语言> > C#-静态网址.查看特定模型

C#-静态网址.查看特定模型

作者:互联网

我已经经历了blog,我理解他在说什么,特别是关于层次结构(沿着路径返回).

所以

/objects/1/property

删除属性应为您提供ID为1的对象,而删除ID应为您提供所有对象.优秀且合乎逻辑.

但是我总是通过视图模型公开我的数据,因此,

/ objects / list / 1将为我提供ID为1的对象的对象列表视图模型.或者/ objects / detail / 1将为我提供ID为1的对象的对象详细视图模型.

使用这种方法,我得到了一个很长的结构,只是为了获得一个特定的视图模型!即对象/可视化/分析/线程.这还算安心吗?我似乎正在(潜意识地)在构造我的宁静的api,以匹配该特定视图模型所在的名称空间或模块(因此在.NET中将是名称空间:app.models.object.visualization.analysis).

如何最好地构造一个这样的宁静端点?有这样的东西更好吗

objects-list / 1和objects-detail / 1?

谢谢.

例:

抱歉,我应该更加清楚.我将举一个.NET示例.假设我有一个购物车课程

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; }
}

通过轻松的设计,我可以将购物车显示为/ carts,/ carts / 1,/ carts / 1 / items等.但是我总是公开视图模型,而不是实际的数据层对象.即

public class CartListModel
{
    public int CartId { get; set; }
    public string CartName { get; set; }
}

public class CartViewModel
{
    public int CartId { get; set; }
    public string CartName { get; set; }
    public DateTime LastUpdated { get; set; }
    public IEnumerable<CartItemViewModel> Items { get; set; }
}

因此,这种方式仅公开特定目的所需的数据.现在,我将这些视图模型公开为/ carts / list或/ carts / list / 1.也是/ carts / view和/ carts / view / 1.那么最初的问题是这样吗?实际上每个视图模型都需要一个单独的端点吗?因此,/ carts-list和/ carts-view,carts-view / 1等.

非.NET示例

真的不知道在这里放什么!视图模型是对象的表示,仅公开绑定到视图所需的某些属性.

因此,假设我的对象具有以下json结构

{
    id: 1,
    name: 'Cart 1',
    lastUpdated: '26-Sep-2014 16:51:23',
    items: [
       // an array of objects
    ]
}

对于某个视图,例如一个简单的表,我可能只需要id和名称.因此,我公开了一个宁静的端点,使我回到了以下结构

{
    id: 1,
    name: 'Cart 1'
}

其他一切都是不必要的.对于购物车编辑页面,我可能需要的不仅是ID和名称,还需要更多的数据.问题是,如何构造一个宁静的端点以暴露同一对象的这些不同表示形式?

解决方法:

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标头具有不同的值.

不要使用其他URI

不要执行以下任何操作:

> GET / objects / 1 / list:这将从对象1请求称为list的子资源.
> GET / objects / 1 / list:这将请求另一个子资源.
> GET / objects / 1?model = detail或GET / objects / 1?model = list:这些是标识不同资源的不同URI.

标签:restful-url,rest,asp-net-web-api,c,net
来源: https://codeday.me/bug/20191121/2050110.html