Meh*_*uma 0 rest http http-patch
我正在使用Symfony2开发REST API。我有一个预订系统,当管理员确认其预订后,我想向客户发送电子邮件。
我有一个预留资源,我们可以使用以下url验证预留:
PATCH本地主机/:id / validate
我想知道使用PATCH方法在验证资源时将电子邮件内容放入请求正文是否正确。
如果没有,正确的方法是什么?
谢谢,Mehdi。
首先,关于资源和REST。
当您说时PATCH localhost/:id/validate,应将其读为“我正在更新现有的验证”。“验证”不是什么,甚至不是正确的英语。验证不是资源,而是一种操作。当您的URL中有操作(动词)时,您的API是RPC,而不是REST。也可以在这里查看我的较长答案。
因此,请考虑您的实际工作。以下之一:
第一个最有意义,也最简单。
PATCH /reservations/{id} status=valid
预订是否已经包含电子邮件地址?然后使用它。否则,请考虑发送电子邮件。
PATCH /reservations/{id} status=valid&email=foo@example.com。
读取为“使用以下值更新预订电子邮件和状态”。由于PATCH(和POST)可能会有副作用,因此发送邮件非常好。
当一个预订具有许多确认时,第二个是必需的。或者,当REST客户端需要与预订分开跟踪验证时(例如GET /reservations/{id}/validations/{id})。在那些情况下,拥有Validation资源是有意义的。
POST /reservations/{id}/validations。
如果预订没有电子邮件地址,请将其发送。
POST /reservations/{id}/validations email=foo@example.com。
内容为“在电子邮件foo@example.com上对此预订进行验证”。内容为“我对此预订进行了新的验证”。由于POST(和PATCH)可能会产生副作用,因此发送邮件非常好。
由于副作用,第三种情况很重要。如果您想提出一种可以确保客户没有副作用的方法,那么它就起作用了。
PUT /reservations/{id} room=12&date=1970-01-01&status=valid&email=foo@example.com
读为“用具有已验证状态的验证替换现有预订”。由于PUT永远都不会产生副作用,因此客户端可以确定重播此消息(例如由于网络错误,繁重的负载或其他原因)绝不会导致用户受到垃圾邮件的攻击。
| 归档时间: |
|
| 查看次数: |
3834 次 |
| 最近记录: |