什么REST PUT/POST/DELETE调用应按约定返回?

tux*_*yer 150 rest post http http-delete

  1. 根据"REST意识形态",PUT/POST/DELETE请求的响应主体应该是什么?

  2. 返回代码怎么样?是否HTTP_OK足够?

  3. 如果有的话,这些公约的原因是什么?

我发现了一篇描述POST/PUT差异的好帖子:POST vs PUT 但它仍然没有回答我的问题.

Dar*_*ler 129

原谅轻浮,但如果您通过HTTP进行REST,则RFC7231准确描述了GET,PUT,POST和DELETE的预期行为.

  • 也许我只需要更多的睡眠,但我似乎无法找到OP在RFC中要求的确切信息.身体应该用于POST或DELETE响应? (12认同)
  • @tuxslayer我很高兴你不认为我只是想偷偷摸摸.许多人似乎认为REST在HTTP方法之上添加了额外的要求.但事实并非如此.还有其他约束,但它们并不真正影响HTTP方法的行为.RFC2616绝对是遵循的指南. (9认同)
  • 嗯,那就像泥巴一样清晰.也许答案中的一些更多信息会有所帮助.特别是,当那个链接死了. (9认同)
  • 我很欣赏这个链接.:)它让我停下来思考我正在使用的工具.阅读完你的帖子和RFC之后,我发现自己在晚上剩下的时间里都在谈论RFC.这有助于我将流程首先视为HTTP流程,然后将流程视为休息流程.非常感激. (4认同)
  • @PerryTew现在您可以访问http://tools.ietf.org/wg/httpbis/并查看当前正在修订的HTTP规范版本.请享用! (4认同)

Don*_*ows 25

总的来说,这些惯例"就像你只是在提供网页一样".

对于PUT,如果您之后立即执行GET,我将返回相同的视图; 这将导致200(好吧,假设渲染成功当然).对于POST,我会重定向到创建的资源(假设您正在进行创建操作;如果没有,只返回结果); 成功创建的代码是201,这实际上是不在300范围内的重定向的唯一HTTP代码.

我从来没有对DELETE应该返回的内容感到高兴(我的代码当前生成了一个HTTP 204和一个空主体).

  • @Iain不是真的.问题是,如果以后有其他东西更新了记录,你就不希望让它发送另一个'PUT`请求,导致数据被还原.例如,如果两个人引用相同的页面,一个进行更新,然后另一个进行更新,如果第一个人刷新以查看结果,它最终会导致事情在第二个人制作之前恢复到他们的变化. (3认同)