restful API的URI结构

ale*_*sel 9 authentication rest uri

我使用基本身份验证,因此URI看起来像http:// test:password@site.com/.

如果我想给所有用户,我创建一个像http:// test:password@site.com/users/的URI

但是,如果我想给特定用户,我应该使用什么地址?这应该是

http://test:password@site.com/users/test/ 
Run Code Online (Sandbox Code Playgroud)

要不就

http://test:password@site.com/test/
Run Code Online (Sandbox Code Playgroud)

或者我不知道.

我问这个问题的原因是这种类型的授权意味着URI已经包含用户名.

提前致谢.

xwo*_*ker 6

以分层方式创建资源URI具有以下优点:您不会发生任何ID冲突.http://test:password@site.com/test/如果添加具有id的其他资源类型(例如Role),则替代版本可能会出现问题test.您必须确保您的ID在所有资源类型上都是唯一的,而不仅仅是特定类型.此外:不再清楚,您的资源URI是指向用户还是角色.

虽然它并不是REST真正需要的,但它是让人们更容易思考REST API的命名之一:"用户资源可以在包含"用户"标签的URI中找到,看起来很正常.REST本身实际上是URI不可知的,所以它确实无关紧要.但如果你想使用有意义的(人类可读的)URI,我会说

GET http://test:password@site.com/users/
Run Code Online (Sandbox Code Playgroud)

将返回所有用户.

POST http://test:password@site.com/users/ 
Run Code Online (Sandbox Code Playgroud)

将创建一个新用户和一个带有URI的新资源.

PUT http://test:password@site.com/users/test
Run Code Online (Sandbox Code Playgroud)

将更改使用此URI标识的用户资源,并满足您应该能够获得此用户资源的合理期望

GET http://test:password@site.com/users/test
Run Code Online (Sandbox Code Playgroud)

最后要考虑的事情是:授权用户可能希望访问不同用户的用户资源(这种情况目前可能不太可能):

GET http://another:password@site.com/users/test
Run Code Online (Sandbox Code Playgroud)