有趣的网址。查看特定模型

问题描述 投票:3回答:2

我一直在研究blog,我理解他在说什么,特别是关于层次结构(沿着路径返回)。

所以

/objects/1/property

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

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

[/objects/list/1将给我ID为1的对象的对象列表视图模型。或者/objects/detail/1将给我ID为1的对象的对象详细视图模型。

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

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

[objects-list/1objects-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-viewcarts-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和名称,还需要更多的数据。问题是,如何构造一个宁静的端点来暴露同一对象的这些不同表示形式?

我一直在浏览此博客,我理解他在说什么,特别是关于层次结构(沿着路径前进)。因此,/ objects / 1 / property删除属性应...

c# .net rest asp.net-web-api restful-url
2个回答
3
投票

URI稳定


0
投票

只需尝试使您的URL尽可能简单。这意味着,如果您的API是一所房子,并且您想要一个名叫Marie的人的所有衣服,则您的URL为:

© www.soinside.com 2019 - 2024. All rights reserved.