我正在研究 REST API,但找不到管理资源 URI 的最佳方法。当我查询我的 API 时,我想要这样的东西:
{
'name':'foo',
'id':100,
'uri':'/path/to/the/resource/100'
}
我应该将资源 URI 存储在我的数据库中,还是应该在处理请求时在代码中生成?
谢谢
在 API 设计中,您不应该将 URI 作为 HTTP API 响应中数据的一部分返回。如果您的资源可从多个 URI 获得,则有一个标头字段,并且您的应用程序的域逻辑以及您对 URI 的良好命名应该允许猜测资源位置。
例如,如果{'name':'foo', 'id':100}
是 a Foo
,您(和用户)通常会期望它的 URI 是/foos/100
,那么为什么需要在响应数据中返回 URI?
现在更务实的是,由于支持那些花哨的 HTTP 标头可能会使您的客户更难采用您的 API,我相信如果您希望您的资源更改 URI 很多(我希望他们没有),因此您可能更容易支持301 Moved Permanently
旧的重定向。除此之外,我看不出不即时生成它们的原因,因为假设您使用的是 MVC 结构,您将不得不对手动响应旧 URI 的旧控制器操作实现重定向。
据我了解,您不存储 Uri,而是使用 URI 模板属性在服务方法上指定 uri 模式。例如,使用您的链接,您将拥有:
[WebGet(UriTemplate = /path/to/the/resource/{number})]
public SomeMethod(String number)
{
Int16.Parse(number);
//User user = UserList(number)
}