REST上下文中的“删除”按钮使用哪种类型的请求?
我正在为订单屏幕创建一个RESTAPI。我有一些方法: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
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
{...}