假设我有一个端点为/api/users/
的REST API。将用户发布到该端点将创建新用户并将其添加到现有集合,为用户提供唯一ID以便您可以使用它。如果我创建一个GET /api/users/1
,这应该返回我创建的用户ID为:1。我的问题是应该是什么情况下POST到单个项目。对于POST到集合,如果资源已创建,则应返回201 Created
;如果资源已存在,则返回409 Conflict
。 POST到单个资源的最佳做法是什么?它是否应该返回405 Method Not Allowed
,因为您不应该允许POST到单个资源,或者它应该如here所述返回404 Not Found
?
答案 0 :(得分:0)
如果在收到请求时,资源(无论其代表的概念如何)不支持特定方法(POST),则返回的正确响应为405
405(Method Not Allowed)状态代码表示请求行中接收的方法由源服务器知道但目标资源不支持。原始服务器必须在405响应中生成一个Allow头字段,其中包含目标资源当前支持的方法列表。
HTTP规范包括一个方法(OPTIONS)和响应头(Allow),它们使客户端能够询问服务器以发现允许的方法。 Adoption might be lacking,虽然我认为CORS会改变这种情况。
注意:有一些用例,其中POST到单一资源是一个合理的选择(考虑如何在api中将协议定义为star a responsitory,其中HTML是您的超媒体格式)。在这种情况下,你应该选择合适的成功代码(200,201,204 ......),当然,假设事情进展顺利。
答案 1 :(得分:0)
如果有人尝试POST到应该调用PUT进行更新的特定项目。在我看来404应该是正确的返回状态代码,它告诉客户端他们正在查找的资源不可用,这意味着他们正在点击的URL不正确。
当客户端使用错误的方法类型命中正确的URL时,应该调用不允许的405方法。假设你有/ api / users / {id}和PUT,但客户端正在使用POST。