我研究过各种URI设计最佳实践资源。几乎每个作者或博客都说RESTFul API URI必须看起来像这样。
/* List all users in account 2 where user id is 1 */
`/users/1/accounts/2/users` [GET]
上面的api调用者必须在每个请求中传递两个以上的id。
但我的情况完全不同。
在我的API服务器之前有一个资源管理器(RM),因此每个请求都必须通过RM进行身份验证,并使用有效的token
来访问上面的示例API。 注意:[令牌通过标题发送]
一旦请求被授权,RM就会通过拦截器向我的API服务器提供用户信息,即(user_id,account_id等)。
问题是我的API服务器已经知道user_id
和他的account_id
,然后仍然需要在API URI中获取这些信息。
我尝试过以下设计:
1. /users/accounts/users
2. /accounts/users
3. /users
此方案最适合的设计是什么?我花了两个星期但无法决定因为这些是企业API设计;一旦设计而不会改变。
答案 0 :(得分:2)
你应该在URI中包含id,因为你最后给出的理由是 - 你的API将非常很难,也许是不可能的,一旦它被使用就会改变。另一方面,您的实现将随时间而变化。您的身份验证/授权机制可能会更改您的企业可能希望转移到不以这种方式传递ID的模型,他们当然不希望发现他们必须重新设计每个依赖于旧的行为。
在一天结束时,在URI的URI中包含足够的信息以识别与其相关的资源是ReST的关键部分。 URI应该是 all ,您需要识别资源,不依赖于带外信息或实现细节来进一步识别您正在寻址的资源。