rest - RESTFUL API 中 "Actions"的命名约定

标签 rest naming-conventions best-in-place

我知道 REST 没有严格的规则,但是有一些通用的做法可以对其进行标准化。
我对这件事有点新鲜。我喜欢处理集合的想法,所以我使用了一个约定,其中我将资源多元化,例如:

/Messages (POST/GET/)
/Messages/1 (DELETE/PUT)

我也喜欢嵌套集合的想法,所以我有例如:
/Messages/1/Attachments (Post/Get)

等等
但是在涉及发送消息等自定义操作时我遇到了问题
一种方式是:
/Messages/1/Send (POST)

但我也在考虑类似的事情:
/Message/1/MessageSendRequest (POST)

或者这可能是个坏主意?
在这个例子中它适合,但在某些情况下它不适合。
如果 REST 中有这样的东西,最佳实践是什么:)

最佳答案

事实上,在 URL 中使用“ Action ”并不是真正的 RESTful。您应该在消息中使用状态字段。
类似于这样的结构:

{
  "id": "1",
  "title": "some content",
  "date": "...",
  "status": "draft",
  (...)
}
draft 更新状态至 sending将触发电子邮件的发送。您可以注意到在此地址 /messages/1 上有两种方法可以进行此更新。 :
  • 使用方法PUT带有完整的有效载荷。当电子邮件的内容很大时,这可能不太方便。
  • 使用方法PATCH带有包含您要更新的内容的有效负载。这里没有真正的约定。您可以仅发送要更新的字段( { "status": "sent" } )或利用 JSON PATCH 格式(参见 http://jsonpatch.com/https://www.rfc-editor.org/rfc/rfc6902 ),内容如下:[ { "op": "replace", "path": "/status", "value": "sent" } ] .

  • 如果邮件实际上是根据请求发送的,状态将更新为 sent .
    另一种方法也是可能的。您可以使用方法POST在电子邮件网址 /messages/1 .这将触发电子邮件的发送。不需要任何内容​​,如果确实发送了电子邮件,状态代码 200 会被退回。
    希望这对你有帮助,
    蒂埃里

    关于rest - RESTFUL API 中 "Actions"的命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32651793/

    相关文章:

    ruby-on-rails - 单击标签名称时 Rails best_in_place gem

    iphone - 使用 IParameterInspector 验证 WCF 参数并在客户端处理FaultException

    database - 命名数据库中的中间表

    python - Python 中参数排序的约定是什么?

    c# - 重命名具有相同用途的多个参数的好方法是什么?

    ruby-on-rails-3 - best_in_place 日期选择器格式

    ruby-on-rails-3 - Rails 3 使用 devise 和 best_in_place gem,不会更新订阅者模型

    php - Backbone.js 和 REST api 与 Silex (PHP)

    rest - 为什么我的 Spring Boot 无状态过滤器会被调用两次?

    javascript - 通过使用 JavaScript 访问 Java Endpoint 添加到 mongoDB