10

REST api 的复数形式更自然,也更常用,例如/api/usersor api/users/123.

但是对于某些资源是不自然的,例如:

  • /api/login- 登录确切的一个用户
  • /api/profile- 获取登录用户的个人资料

这些资源永远不会用于我的应用程序中的一个对象/模型。

另一方面,我读到在资源名称中混合复数和单数形式不是好的做法(http://pages.apigee.com/web-api-design-ebook.html)。

所以我考虑怎么做:

  1. 对所有人使用单数
  2. 对所有人使用复数(有一些愚蠢的形式,如/api/logins
  3. 不一致并为几乎所有资源使用复数期望一些特殊资源,例如/api/login/api/profile始终与一个对象/模型一起使用。

更好的方法是什么?

4

4 回答 4

8

定义 RESTful API 没有严格的指导方针,但我读得最多的是常识应该占上风。

因此,选项 3:

不一致并为几乎所有资源使用复数期望一些特殊资源,如 /api/login 或 /api/profile 始终与一个对象/模型一起使用。

是最合乎逻辑的。当你认为“我需要资源 X,这个 URL 会是什么样子”时,你应该总是能够猜到 URL?

于 2013-05-03T11:22:31.300 回答
5

我并不是说我更喜欢复数,但如果你使用复数,你可以通过这种方式来协调你的特殊单数:

GET /api/forms/login是 HTML 登录表单。使用此透视图,login是表单集合中的一个表单的 ID。

POST /api/forms/login是提交登录表单的地方。

GET /api/users/{id}/profile 检索指定用户的个人资料。这适用于很多情况,但不适用于匿名网站,即使在查看他们的个人资料时,用户的身份也应该保持隐藏,这可能会遗漏他们的用户 ID 和真实姓名。

GET /api/profiles/{id}将配置文件实体与用户 ID 分离,并适用于匿名站点。

或者,您可以在帖子中写入GET /api/users/current/profileGET /api/sessions/current/profile省略特定 ID,因为服务器将回复与当前用户相关的内容。

于 2013-07-26T19:25:19.930 回答
3

我在这些年从事的一些项目中看到的是,对于大多数常见操作来说,单数看起来更友好,例如,您可以为用户资源提供以下端点:

GET /user  --> retrieves all users
GET /user/{id} --> retrieves a user with the given id
POST /user --> inserts a new user (the user object will come in the request body)
PUT /user/{id} --> updates a user with the given id (the user object will come in the request body)
DELETE /user/{id} --> deletes the user with the given id

这些是常见操作,当您有批量插入/更新/删除操作时,最好使用复数

POST /users  (the user objects will come in the request body)
PUT /users/{listOfIds}  (the user objects will come in the request body)
DELETE /users/{listOfIds}

GET /user 和 GET /users 将是同义词,这两个将接受查询参数以优化结果,例如

GET /users?status=active
于 2014-06-10T22:32:21.490 回答
2

REST(Representational state transfer) 基本上是针对单个实体并对其进行 CRUD。所以使用单数对我来说更有意义。但是,如果您需要获取列表,那么复数是有意义的。例如:

你想得到一个用户然后有 /api/user/{id}

但是,如果您想获取用户列表,请使用 /api/users

于 2013-05-04T07:32:26.230 回答