将资源URI存储在REST API中的位置

时间:2013-08-06 10:54:54

标签: database rest uri

我正在开发REST API,但我找不到管理资源URI的最佳方法。当我查询我的API时,我想要这样的东西:

{
    'name':'foo',
    'id':100,
    'uri':'/path/to/the/resource/100'
}

我应该将资源URI存储在我的数据库中,还是应该在处理请求时在代码中生成?

由于

3 个答案:

答案 0 :(得分:1)

不要将URI存储在数据库中。

资源的URI不是资源本身。此外,您无需在响应中返回ID。客户不需要它。只需返回self的网址和所有链接资源的网址。

您可能也会感谢this answer

答案 1 :(得分:0)

在API设计中,您不应该将URI作为HTTP API响应中的数据的一部分返回。 There's a header field for that如果您的资源可以从多个URI获得,并且您的应用程序的域逻辑以及您的URI的良好命名应该是allow guessing资源位置。

例如,如果{'name':'foo', 'id':100}Foo,您(和用户)通常会期望其URI为/foos/100,那么为什么还需要在响应中返回URI数据?

现在更实用,因为支持那些花哨的HTTP标头可能会让您的客户更难以采用您的API,我相信如果您期望的话,您应该将URI与您的资源存储在 1:很多关系中你的资源很多都要改变URI(我希望他们不会这样做),所以你可能更容易支持使用301 Moved Permanently重定向旧版本的重定向。除此之外,我没有看到不动态生成它们的原因,因为你将不得不在旧的控制器动作上实现重定向,以便手动响应旧的URI,假设你正在使用MVC结构。 / p>

答案 2 :(得分:0)

根据我的理解,你不存储Uri,但是使用URI模板属性在服务方法上指定uri模式。例如,使用您的链接:

[WebGet(UriTemplate = /path/to/the/resource/{number})]
public SomeMethod(String number)
{
   Int16.Parse(number);
   //User user = UserList(number)
}