为什么如果已经知道通过REST API URI传递资源ID?

时间:2016-12-28 08:46:40

标签: web-services rest api restful-architecture spring-rest

我研究过各种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设计;一旦设计而不会改变。

1 个答案:

答案 0 :(得分:2)

你应该在URI中包含id,因为你最后给出的理由是 - 你的API将非常很难,也许是不可能的,一旦它被使用就会改变。另一方面,您的实现随时间而变化。您的身份验证/授权机制可能会更改您的企业可能希望转移到以这种方式传递ID的模型,他们当然不希望发现他们必须重新设计每个依赖于旧的行为。

在一天结束时,在URI的URI中包含足够的信息以识别与其相关的资源是ReST的关键部分。 URI应该是 all ,您需要识别资源,不依赖于带外信息或实现细节来进一步识别您正在寻址的资源。

相关问题