属于特定用户的资源的 REST URI 设计

geb*_*bel 5 rest

假设我想创建一个非常简单的 todolist RESTful API,其中每个用户都拥有一个 todos 列表。用户已通过 http BASIC 或 DIGEST 进行身份验证。

在这一点上,我不确定 URL 方案应该是什么样子。可不可能是:

http://servername/todos/
Run Code Online (Sandbox Code Playgroud)

我的服务器根据 http 标头给我的身份验证过滤适当的待办事项。

或者我应该在 URI 中包含用户名:

http://servername/users/username/todos/
Run Code Online (Sandbox Code Playgroud)

在一些网站上,我什至看到他们将用户名作为这样的参数传递:

http://servername/todos?username=babsi
Run Code Online (Sandbox Code Playgroud)

据我所知,所有三个选项都是无状态的,因为我总是收到用户名,但只是来自不同的来源。据我所知,为了确保正确的用户访问了 URI,我总是需要检查 http 标头。那么,您认为 REST 中最好的 URI 设计是哪一种,还是我应该以完全不同的方式来做?

ang*_*lar 3

您可以使用以下内容:

http://servername/todos/ GET list all todos
http://servername/users/ GET list all users
http://servername/users/{user_id}/ GET list an user
http://servername/users/{user_id}/todos/ GET list all todos for an user   
Run Code Online (Sandbox Code Playgroud)

我认为这里的重点是,如果待办事项只能存在于用户使用上述类似层次结构的方法的上下文中,那么您希望如何设计资源之间的关系。作为一般规则,我通常遵循以下规则:

使用路径变量来编码层次结构:/parent/child

将标点符号放在路径变量中以避免暗示不存在的层次结构:/parent/child1;child2

使用查询变量暗示算法的输入,例如:/search?q=jellyfish&start=20