我正在开发REST API,但我找不到管理资源URI的最佳方法。当我查询我的API时,我想要这样的东西:
{
'name':'foo',
'id':100,
'uri':'/path/to/the/resource/100'
}
我应该将资源URI存储在我的数据库中,还是应该在处理请求时在代码中生成?
由于
答案 0 :(得分:1)
答案 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)
}