REST api的多种形式更自然,更常用,例如/api/users
或api/users/123
。
但是对于某些资源来说并不自然,例如:
/api/login
- 完全登录一个用户/api/profile
- 获取已登录用户的个人资料此资源永远不会用于我的应用中的一个对象/模型。
另一方面,我读到在资源名称中混合复数和单数形式不是一种好的做法(http://pages.apigee.com/web-api-design-ebook.html)。
所以我考虑该怎么做:
/api/logins
)等一些愚蠢的形式/api/login
或/api/profile
,它们总是与一个对象/模型一起使用。更好的方法是什么?
答案 0 :(得分:6)
没有严格的定义RESTful API的准则,但我最常阅读的是常识应占优势。
因此,选项3:
是不一致的,并且几乎所有资源都使用复数,期望一些特殊资源,如/ api / login或/ api / profile,它们总是与一个对象/模型一起使用。
是最合乎逻辑的。当你想到“我需要资源X,这个网址会是什么样子”时,你应该总能猜出网址?
答案 1 :(得分:4)
我不是说我更喜欢复数,但如果你要使用复数,你可以用这种方式调和你的特殊单曲:
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/profile
或GET /api/sessions/current/profile
,因为服务器将使用与当前用户相关的内容进行回复,因此会忽略您帖子中的特定ID。
答案 2 :(得分:2)
REST(Representational state transfer)基本上是针对单个实体并对其进行CRUD。所以使用单数对我来说更有意义。但是如果你需要获得列表,那么复数就有意义了。例如:
您希望获得用户/ api / user / {id}
但是如果你想获得用户列表,那么就有/ api / users
答案 3 :(得分:2)
我在这些年来一直在研究的一些项目中看到的是,对于大多数常见操作,单数看起来更友好,例如,您可以为用户资源提供以下端点:
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