“的命名约定”;行动“;在RESTFULL API中

“的命名约定”;行动“;在RESTFULL API中,rest,naming-conventions,best-in-place,Rest,Naming Conventions,Best In Place,我知道REST并没有严格的规则,但有一些通用的做法来标准化它。 我对这件事有点生疏。我喜欢在集合上工作的想法,因此我使用了一种约定,在这种约定中,我将资源多元化,如: /Messages (POST/GET/) /Messages/1 (DELETE/PUT) 我也喜欢嵌套集合的想法,例如: /Messages/1/Attachments (Post/Get) 等等 但我有一个问题,当涉及到自定义操作,如发送消息 一种方法是: /Messages/1/Send (POST) 但我想的是:

我知道REST并没有严格的规则,但有一些通用的做法来标准化它。 我对这件事有点生疏。我喜欢在集合上工作的想法,因此我使用了一种约定,在这种约定中,我将资源多元化,如:

/Messages (POST/GET/)
/Messages/1 (DELETE/PUT)
我也喜欢嵌套集合的想法,例如:

/Messages/1/Attachments (Post/Get)
等等 但我有一个问题,当涉及到自定义操作,如发送消息 一种方法是:

/Messages/1/Send (POST)
但我想的是:

/Message/1/MessageSendRequest (POST)
或者这是个坏主意? 在本例中,它是合适的,但在某些情况下不合适。 如果RESt中有类似的内容,那么最佳实践是什么:)

事实上,在URL中使用“操作”并不是真正的RESTful。您应该在消息中使用状态字段

类似于结构:

{
  "id": "1",
  "title": "some content",
  "date": "...",
  "status": "draft",
  (...)
}
将状态从
draft
更新为
sending
将触发电子邮件的发送。您可以注意到,有两种方法可以在此地址上执行此更新
/messages/1

  • 使用方法
    与完整的有效负载放在一起。当电子邮件的内容很大时,这就不那么方便了
  • 使用包含要更新内容的有效负载的方法
    修补程序
    。这里没有真正的惯例。您可以只发送要更新的字段(
    {“status”:“sent”}
    ),或利用JSON修补程序格式(请参阅和),其内容如下:
    [{“op”:“replace”,“path”:“/status”,“value”:“sent”}]
如果请求中确实发送了电子邮件,则状态将更新为
sent

另一种方法也是可能的。您可以在电子邮件url
/messages/1
上使用方法
POST
。这将触发电子邮件的发送。不需要任何内容,如果电子邮件实际发送,将返回状态代码
200

希望这对你有帮助, 蒂埃里