Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
REST上下文中的“删除”按钮使用哪种类型的请求?_Rest_Http_Web_Http Delete - Fatal编程技术网

REST上下文中的“删除”按钮使用哪种类型的请求?

REST上下文中的“删除”按钮使用哪种类型的请求?,rest,http,web,http-delete,Rest,Http,Web,Http Delete,我正在为订单屏幕创建一个RESTAPI。我有一些方法: GET /api/orders GET /api/orders/{orderId} 我在订单页面上有一些按钮,并为此创建了几个端点: PATCH /api/order/buttons/mark-as-read PATCH /api/order/buttons/change-status 现在我需要添加删除按钮。但我不明白怎么做。我有两个选择: 删除/api/orders/{orderId}-但是我应该在这个请求中发送两个额外的参数 PA

我正在为订单屏幕创建一个RESTAPI。我有一些方法:

GET /api/orders
GET /api/orders/{orderId}
我在订单页面上有一些按钮,并为此创建了几个端点:

PATCH /api/order/buttons/mark-as-read
PATCH /api/order/buttons/change-status
现在我需要添加删除按钮。但我不明白怎么做。我有两个选择:

删除/api/orders/{orderId}-但是我应该在这个请求中发送两个额外的参数 PATCH/api/order/buttons/delete——我可以在体内发送我的DTO,但这不是REST方法。 我想了解在REST上下文中,删除按钮使用的是哪种类型的请求

PATCH /api/order/buttons/mark-as-read
PATCH /api/order/buttons/change-status
这些有点奇怪。PATCH是一种具有远程编写语义的方法;这意味着您正在更改由有效目标URI标识的资源

但这里的情况似乎并非如此;如果您希望将更改应用于/api/orders/{orderId}标识的文档,那么应该是目标URI,而不是其他资源

PATCH /api/orders/1
Content-Type: text/plain

Please mark this order as read.
当然,我们通常不使用文本/纯文本和需要人工解释的语句,而是使用补丁文档格式示例:可以教机器解释

我想了解在REST上下文中,删除按钮使用的是哪种类型的请求

PATCH /api/order/buttons/mark-as-read
PATCH /api/order/buttons/change-status
例如,如果delete的语义属于Orders域,如果它是一个表示希望取消订单的按钮,那么如果您通过传递资源的更新表示进行通信,或者如果您发送服务器将解释的指令,则应该使用PUT或PATCH

要考虑的启发性问题是:如何在普通HTML页面上实现这一点?您可能会有一个取消我的订单表单,带有输入控件以从用户收集信息,可能还有一些隐藏字段。当用户提交表单时,浏览器将使用表单数据和HTML的表单处理规则创建信息的应用程序/x-www-form-Url编码表示,然后将该信息发布到表单操作标识的资源

行动的形式可以是任何东西;您可以使用/api/orders/1/cancel,类似于您的标记为读取和更改状态设计;但是如果您可以使用订单的标识符,也就是说,您正在更改的资源,那么您可以免费获得标准化的优势

通常情况下,单个消息处理程序(在expost/api/orders/{orderId}中只有一个职责)在域中解释有效负载并选择多个处理程序中的一个更改状态、标记为已读、取消

您愿意在请求体中使用如下内容:PATCH/api/orders/{orderId}和OrderUpdatesDto作为JSON字符串

有点

这里有三个拨号:要使用哪个有效请求URI,要使用哪个有效负载,要使用哪个方法

因为我想利用缓存失效,所以我将寻找使用:/api/order/{orderId}作为有效请求URI的设计,因为这是我想要失效的响应的URI

可以使用OrderUpdate消息/command/DTO的JSON表示形式作为请求的有效负载。但这并不适合远程创作。所以

但您可以改为决定支持远程创作接口,这意味着客户端只需编辑其/api/order/1的本地副本,然后告诉您所做的更改

在这种情况下,放回整个文档和补丁回发一堆编辑都是有意义的。如果GET/api/orders/1返回一个JSON文档,那么我将研究是否可以支持一种通用JSON补丁文档格式;或者是类似的


当然,从对文档的更改到对非贫血领域有意义的消息,是很难做到的。我们可能会倾向于支持体验,但如果您也希望缓存以我上面描述的方式工作,那么发送以任务为中心的DTO并不适合PUT/PATCH。

这是否回答了您的问题?谢谢你的回答。如果我理解正确,您可以使用如下内容:PATCH/api/orders/{orderId}和OrderUpdatesDto作为请求体中的JSON字符串?在我前面的回答中展开-有帮助吗?
POST /api/orders/1 HTTP/1.1
Content-Type: application/prs.pavel-orderupdate+json

{...}