一个restful api可以从一个端点中删除两个相关资源吗?
Posted
技术标签:
【中文标题】一个restful api可以从一个端点中删除两个相关资源吗?【英文标题】:Can a restful api remove two related resources from a single endpoint? 【发布时间】:2021-07-30 12:49:00 【问题描述】:所以我的问题是我目前正在使用 lumen 开发一个宁静的 api,其想法是用户可以拥有许多列出的宠物供收养,任何登录的用户都可以将此宠物标记为保留供收养......当用户点击预约按钮,通知被发送给所有者(通过推送器和数据库通道),通知包含列出的宠物的 ID 和请求收养该宠物的用户 ID,所以所有者将看到是带有两个按钮的通知,用于批准或不批准收养请求,我的问题是从宁静的角度来看,当单击任何按钮(即批准或不批准)时,我应该一次性删除通知和预订吗?
示例:我向以下端点 /user/notifications/id 发送 DELETE 请求,首先我获取用户 id(谁想要采用)和列表 id,并删除预订,然后删除通知主人? DB Design
【问题讨论】:
我会使用数据库事务,这样您在删除多个模型时就不会遇到问题。我永远不会删除预订或通知之类的内容,我会将它们设置为例如看到、拒绝、接受任何内容并在您的正常查询中忽略它们。 首先感谢您的回复,但假设我想将预订设置为已完成,我调用的同一端点:/user/reservations/id 应该将预订状态更新为“已完成”并将通知也设置为“已看到”? 【参考方案1】:restful api 可以从单个端点删除两个相关资源吗?
是的;也就是说服务器可能会处理请求
DELETE /user/notifications/1
通过执行删除“/user/notifications/1”和“/reservations/2”和“/foo”和“/bar”和“/881b1e4a-f84f-47c7-886b-e818e13b6168”。
事情可能会变得棘手:DELETE 的语义仅作用于由目标 URI 标识的资源。也就是说,使用 HTTP 的通用组件不一定会理解正在更改的多个资源。
例如,服务器可以在 HTTP 响应的消息正文中包含已删除资源的列表,但我们没有标准化的方法将该列表编码到响应中标头 ,这是通用组件寻找元数据的地方。
因此,通用组件很可能会从其缓存中删除“/user/notifications/1”,但它不会对其本地缓存的其他响应表示做任何事情。
【讨论】:
所以基本上我可以一次删除多个东西,而且我不必喜欢点击 2 个不同的端点来删除 2 个相关的东西? 是的,你可以这样做。以上是关于一个restful api可以从一个端点中删除两个相关资源吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用操作挂钩创建自定义Wordpress REST API端点
如何使用flutter Dropdown小部件从Django REST API端点填充数据
根据条件限制/锁定所有 Post/Delete Rest API 端点 [关闭]