我有以下状态机,我想要这个:
- 创建新订单
- 向其中添加项目(列表是可选的)
- 通过调用完成确认订单
- 付钱
- 发送
这个流程是通过 REST Web 服务控制的,我不确定哪种方法更好地遵循 REST 原则。
我想出了两种可能性(下面的数字与上面的数字相对应):
第一个 - 操作由路径指定
1.
POST /create HTTP/1.1
2.
POST /addItem HTTP/1.1
<data>
<itemId>123</itemId>
</data>
GET /listItems HTTP/1.1
3.
POST /finish HTTP/1.1
4.
POST /pay HTTP/1.1
<data>
<price>123</price>
</data>
5.
POST /send HTTP/1.1
第二个 - 操作在正文中指定
1.
POST / HTTP/1.1
<data>
<operation>create.new.order</operation>
</data>
- returns resId
2.
PUT /{resId} HTTP/1.1
<data>
<itemId>123</itemId>
</data>
GET /items HTTP/1.1
3.
PUT /{resId} HTTP/1.1
<data>
<operation>finish.order</operation>
</data>
4.
PUT /{resId} HTTP/1.1
<data>
<price>123</price>
<operation>pay.order</operation>
</data>
5.
PUT /{resId} HTTP/1.1
<data>
<operation>send.order</operation>
</data>
第二种解决方案似乎更好,但我不知道我是否可以在请求的正文中指定一个操作 - 可以吗?
另外我不确定是否应该在第二个解决方案中使用PUT
or POST
at 3
and 5
,因为我并没有真正更新资源,我只是更改状态机的状态。
如果这些都不正确,我该怎么做?