2013-08-06 35 views
4

我正在使用REST API,但无法找到管理资源URI的最佳方式。当我询问我的API,我想这样的事情:在REST API中存储资源URI的位置

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

如果我的资源URI存储在我的数据库或者我应该在代码生成时,该请求被处理?

感谢

+0

uri - 比输入更像输入。所以为什么期望它在输出json中。当然,你可以添加一个密钥为uri并保存。但这可能不是响应的一部分 – forvaidya

+0

是的,在这种情况下可能不需要,但资源的URI在集合中使用。 – loics2

回答

1

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

资源的URI不是资源本身。另外,您不需要在回复中返回ID。客户不需要它。只需返回self的URL和任何链接资源的URL即可。

您可能还会喜欢this answer

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存储在与资源的关系中URI很多(我希望他们没有),所以对于旧的支持301 Moved Permanently支持重定向可能会更容易。除此之外,我不认为不能立即生成它们的原因,因为假设您使用的是MVC结构,您将不得不在旧的控制器操作上手动实现重定向,旧操作响应旧的URI。

0

从我的理解你不存储Uri的,但使用URI模板属性指定服务方法的URI模式。例如,使用您的链接,您将拥有:

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