RESTful API的大多数示例都假设您正在处理事物集合,例如
POST /books/
- 创建一本书
GET /books/
- 获取图书清单
GET /books/1/
- 获取一本特定的书
但是,在某些情况下,您可能希望创建单例资源。例如,新用户可能希望创建与他们自己相关的配置文件,即经过身份验证的用户。
POST /profile
PUT /profile
是否有关于如何创建此类单例资源的约定?即使用POST
vs PUT
。在是否使用POST
或PUT
方面,如果可以在创建后修改资源,它会有所作为吗? PUT
的幂等性要求是否必须能够在首次创建资源后更新资源?
答案 0 :(得分:0)
请记住,在REST中,“单一”资源并不意味着系统中仅存在该资源的一个实例,而只是意味着检索单个对象而不是对象列表。
资源可以是单例或集合。例如,“客户”是集合资源,“客户”是单例资源(在银行域中)。我们可以使用URN“ / customers”来识别“ customers”集合资源。我们可以使用URN“ / customers / {customerId}”来识别单个“客户”资源。
(Thoughtworks,Rest API Design: Resource Modeling)
标准做法是让客户端从POST
到/profiles
/,在文件的/profiles/<id>
标头中接收新创建的配置文件的URL(可能是Location:
)。响应。
或者,客户端可以PUT
至/profiles/<some client-specified-ID>
接收403 Forbidden
(如果该ID已被另一个用户使用)。 (如果其他用户的个人资料可以GET
,则可能为405 Method Not Allowed
。)
在阅读方面,在RESTful API中为具有未知ID的“我的个人资料”概念建模并不常见。如果您确实需要它,那么也许RESTful要做的是使用自定义链接关系在根资源中的链接中公布(标识的)URL。