REST - 修改部分资源 - PUT 或 POST

2024-02-17

我看到很多关于如何使用 REST 只更新部分资源(例如状态指示器)的问题。

选项似乎是:

  1. 抱怨 HTTP 没有 PATCH 或 MODIFY 命令。然而,接受的答案REST 的 HTTP MODIFY 动词? https://stackoverflow.com/questions/1672025/http-modify-verb-for-rest很好地说明了为什么这不像看起来那么好。

  2. 使用带有参数的 POST 并标识一个方法(例如名为“action”的参数)。一些建议是指定具有自定义方法名称的 X-HTTP-Method-Override 标头。这似乎会导致根据您想要做的事情在实现中进行切换的丑陋,并且会接受批评,因为它不是一种特别 RESTful 的 POST 使用方式。事实上,采用这种方法开始感觉像是 RPC 类型的接口。

  3. 使用 PUT 覆盖资源的子资源,该子资源表示要更新的特定属性。事实上,这实际上是对子资源的覆盖,这似乎符合 PUT 的精神。

在这一点上,我认为#3是最合理的选择。

这是最佳实践还是反模式?还有其他选择吗?


有两种方法可以查看状态更新。

  1. 更新一个东西。这是一个 PUT。选项3

  2. 将额外的日志条目添加到事物的历史记录中。此日志条目序列中的列表项是当前状态。那是一个帖子。选项 2。

如果您是数据仓库或函数式编程类型,您往往不信任状态更改,并且喜欢将新的历史事实发布到静态的、不可变的事物中。这确实需要将事物与事物的历史区分开来。导致两张表。

否则,您不介意通过“更新”来改变事物的状态,并且您对 PUT 感到满意。这不会区分事物及其历史,并将所有内容保留在一张表中。

就我个人而言,我发现我对可变对象和 PUT 越来越不信任(“错误纠正”除外)。 (即便如此,我认为旧的东西可以保留在原处,而新的东西可以参考其先前版本来添加。)

如果状态发生变化,我认为应该有一个状态日志或历史记录,并且应该有一个 POST 来向该历史记录添加新条目。可能有一些优化来反映适用于此的对象的“当前”状态,但这只是幕后优化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

REST - 修改部分资源 - PUT 或 POST 的相关文章

  • 将 REST 服务与 Android 应用程序同步

    我使用一个 REST 服务来填充数据库中的信息 稍后由我的应用程序使用 我已经阅读了有关此事的多个主题 现在必须决定如何在 REST 服务和数据库之间实现同步 想象一个应用程序 它从谷歌金融 API 获取有关股票的信息并将其存储在数据库中
  • django-rest-swagger 与模型序列化器不能很好地配合吗?

    我已经离开了 django rest swagger 的文档github页面 https github com marcgibbons django rest swagger 更具体地说 是 它是如何工作的 部分 它表明您可以为其余 api
  • REST api 可以通过两个 HTTP 方法公开吗?

    问题是我们有一个复杂的搜索 api 查询字符串 并且希望让用户可以方便地使用 body 所以我们希望同时允许 GET 和 POST 或 PUT 我知道 对于搜索是否为只读操作存在争论 并且根据 REST 标准 它应该只能是 GET 据我了解
  • Node.js:在检索 http 请求正文之前断开 http 请求连接

    我正在用 Node js 编写一个 http 服务器 我有一个客户端通过 HTTP POST 多部分 数据 将大文件上传到该服务器 我想接受唯一使用有效文件名上传文件的连接 我有一些条件 在服务器检索数据之前应断开无效文件名连接 我不知道如
  • Rest 和 Http 中“无状态”的含义

    当我阅读有关 REST 是什么的文档时 他们总是说 REST api 应该是无状态的 在这里 我感觉有点尴尬 因为普通的 HTTP 也是无状态的 既然REST可以说是一种使用HTTP协议的特殊架构 那么说REST应该是无状态的似乎是多余的
  • 如何找出数据包的HTTP头长度?

    我知道如何手动执行此操作 通过查看十六进制转储 我怎样才能自动获得相同的信息 我必须使用 API 吗 我有wireshark 和Microsoft 网络监视器 这可以通过简单地实现Lua解析器 http wiki wireshark org
  • Spring boot - 嵌入式 Tomcat - 连接器定制器 - 无法添加 parseBodyMethods 属性

    最初的问题是当我使用 DELETE 方法发送http请求时 正文部分无法发送到服务器 经过谷歌搜索后 我发现本文 https stackoverflow com questions 41205062 requestbody not acce
  • 为什么http使用CRLF作为行分隔符?

    据我所知 使用LF因为行分隔符非常流行 但我想知道为什么许多文本协议 如 HTTP FTP 使用CRLF作为它的行分隔符 我不认为这些协议是为旧打字机发明的 那么这有什么历史原因吗 我尝试通过谷歌 stackoverflow 和维基百科搜索
  • 在 JSF 自定义验证器中区分 ajax 请求和完整请求

    我的验证器需要知道它是完整请求还是 ajax 请求 在我当前的解决方案中 我检查 http 请求标头X Requested With元素 public void validate FacesContext context UICompone
  • Django Rest Framework 完整性错误捕获

    在 Django Rest Framework 中 我使用了序列化器 视图集和路由器方法 每当我在 django Rest 框架的 API 视图中发布故意错误时 它都会抛出完整性错误 有没有办法尝试捕获错误 例如如果数据中没有错误 则继续保
  • 有 Objective-C Web 框架吗?

    有 Objective C Web 框架吗 我发现的唯一框架是 frothkit 我主要寻找一种在 Objective C 中编写 RESTful json Web 服务的方法 GNUStepWeb http wiki gnustep or
  • 如何让 Swagger UI 的参数成为下拉菜单而不是文本输入

    我正在使用 swagger 来显示我的 RESTApi API 的一个参数将字符串作为输入并将其转换为枚举值 有没有办法在 Swagger UI 上显示下拉菜单而不是文本输入字段 以便用户只能选择枚举值中的字符串值 您可以使用以下 swag
  • WebAPI 和 Angular JS Excel 文件下载 - 文件损坏

    我正在 WebAPI 中生成 Excel 文件 我将其 存储 在内存流中 然后放入响应 如下所示 var result new HttpResponseMessage HttpStatusCode OK Content new Stream
  • 适用于移动应用程序的 REST API 上的 OAuth

    我正在开发移动应用程序的后端 使用 ASP NET MVC 4 Web Api 构建 RESTful API 该应用程序将在 iOS 和 Android 上运行 我的用户将只能使用他们的 Facebook 帐户登录 并且只有登录后 他们才能
  • 如何解决 302 重定向上的 POST 更改为 GET 的问题?

    我网站的某些部分只能通过 HTTPS 访问 不是整个网站 安全与性能妥协 并且如果通过纯 HTTP 发送请求 则 HTTPS 是通过对安全部分的请求进行 302 重定向来强制执行的 问题是对于所有主流浏览器来说 如果您在 POST 上执行
  • 禁用或限制 /o/applications(django rest 框架、oauth2)

    我目前正在使用 Django Rest 框架编写 REST API 并使用 oauth2 进行身份验证 使用 django oauth toolkit 我对他们俩都很满意 他们做的正是我想要的 然而 我有一个担忧 我正在将我的应用程序传递到
  • RESTful 资源 - 接受对象列表

    我正在构建一个 RESTful 资源集合 其工作方式如下 我将使用 人 作为示例 GET people key returns a person object JSON GET people first name Bob returns a
  • WCF 4.0 REST 上传 MS-Excel 文件

    我正在尝试通过 WCF REST 服务上传 MS Excel 文件 我使用了下面帖子中给出的解决方案 RESTful WCF服务图片上传问题 https stackoverflow com questions 664712 restful
  • 如何用 C 语言通过 HTTP 协议发送图像?

    我是一名正在做网络服务器练习的学生 我需要一些帮助 我的网络服务器在文本页面上运行良好 但是每当浏览器发送一个 GET img jpg HTTP 1 1请求 我不知道如何处理 我听说 HTTP 协议是基于文本的 那么如何在 HTTP 响应中
  • 开发者环境-如何调用/消费其他微服务

    背景 我的环境 Java Play2 MySql 我在 Play2 gt S1 S2 S3 上编写了 3 个无状态 Restful 微服务 S1 消耗来自 S2 和 S3 的数据 因此 当用户点击 S1 时 该服务会异步调用 S2 S3 合

随机推荐

  • BERT 分词器和模型下载

    我是初学者 我正在和伯特一起工作 但出于公司网络的安全考虑 下面的代码并没有直接接收bert模型 tokenizer BertTokenizer from pretrained bert base multilingual cased do
  • 如何用递归的方式思考?

    为了理解贪婪方法和动态规划等高级算法概念 首先需要精通递归 我对递归比较陌生 每当提出问题时 首先想到的就是使用迭代的解决方案 尽管我知道递归方法的含义及其工作原理 但以递归方式思考还是非常困难 请帮助回答以下问题 1 任何迭代方法都可以用
  • 如何在 eclipse luna 中配置 lombok

    我使用 Maven 在 eclipse Luna 中配置 lombok 注解已正确添加 但未生成 getter 和 setter eclipse ini vm E Program Files Java jdk1 7 0 60 bin vma
  • 如何拆分长 GraphQL 模式

    我正在尝试创建一个架构 但是会变得太长且令人困惑 分割不同查询 突变和输入的最佳实践是什么 这样我就可以只需要它们并组织它们以使其易于阅读 我试图在网上查找信息 但没有任何明确的信息 我试图不使用阿波罗 const buildSchema
  • 对可变长度序列进行训练和预测

    传感器 同类型的 分散在我的网站上 不定期地手动向我的后端报告 在报告之间 传感器聚合事件并批量报告它们 以下数据集是批量收集的序列事件数据的集合 例如传感器 1 报告了 2 次 在第一批 2 个事件和第二批 3 个事件中 传感器 2 报告
  • 修复 file_get_contents 权限被拒绝的错误

    我有一个关于 JSON 和 PHP 的问题 因此 如果您访问此网站 作为返回 您会得到 HTML 但如果您转到响应 则响应是纯 JSON 因此我尝试获取 JSON 数据 但失败了 也许我做错了什么 但我不知道是什么 我尝试过file get
  • 使用 jmxagent 将 Spark Worker/Executor 指标导出到 Prometheus

    我已按照说明进行操作here https argus sec com monitoring spark prometheus 启用指标导出到 Prometheus for Spark 为了不仅可以从作业中导出指标 还可以从主控器和工作器中导
  • React Dev Tools 不显示组件名称或状态变量名称

    这是 Google Chrome 中新的 React 开发工具的屏幕截图 仅顶级组件名称AdminArea显示 该组件位于我的脚本的入口文件中 index jsx 还应该有 AddNewCoupon 和 ViewCoupons 组件 没有启
  • 这个 Ruby 类方法是如何被调用的?

    在屏幕投射中从 Rails 应用程序导出 CSV http railscasts com episodes 362 exporting csv and excel Ryan Bates 给出了以下简单的代码 我试图弄清楚类方法 Produc
  • Sublime Text 3 中包的语法高亮 (.tmLanguage)

    我正在研究这个plugin https github com andriyko sublime robot framework assistant 使用包控制安装插件时 语法突出显示不适用于 Sublime Text 3 Error loa
  • WPF 的自定义复选框样式

    我想将 wpf 默认复选框设置为自定义的外观 由于开始一个全新的控件并没有真正的意义 因此我想覆盖复选框的 Bulletchrome 子组件的 Windows Chrome 模板绑定 但是 我不能像使用复选框那样做到这一点 尝试使用类似的东
  • 如何使用 Android 的 ListView 在 React Native 中实现上拉加载更多内容?

    这就像下拉刷新的相反操作 Android 上的 ListView 不支持弹跳 实现无限滚动ListView您可以使用onEndReached and renderFooter from ListView成分 它可能看起来像这样 你只需ren
  • 立即绘制和 Matplotlib

    我目前正在开展一个项目 该项目涉及获取模拟读数并将其实时映射到图表上 因此 为了完成此任务 我通过 Arduino 模拟端口运行光敏电阻 并通过 python 3 4 3 读取该数据 在Python方面 我安装了maplotlib和draw
  • 使用 sendKeys() 在 Selenium 中上传文件不起作用

    我无法使用上传文件sendKeys 这是我的代码 driver findElement By xpath Locators browseFlagIconBtn sendKeys D Images icons png 我有一个用于文件上传的文
  • Spring 和 Hibernate 的正确版本以及所需的依赖项...由于依赖项而出现异常

    三天以来 我一直在尝试运行我的 Spring Hibernate 程序 由于 hibernate2 和 hibernate3 之间的版本差异 我很难找到所涉及的依赖项 最后我能够运行具有以下依赖项的程序 cglib nodep 2 1 3
  • Jupyter Notebook 中的感叹号和问号是什么意思?

    下列词语的含义是什么 尤其是 and 在以下示例中 与查询 Pandas DataFrame 中的数据相关 感叹号 cat olympics csv 问号 df fillna import pandas as pd pd Series co
  • 使用 Google Analytics Export API 获取网站趋势

    我正在开发一个使用 Google Analytics Export API 的应用程序 我正在尝试获取 Google 针对您的每个网站帐户显示的 趋势 结果 百分比 即上涨 35 04 或下跌 16 02 他们如何 在哪里获得这个数字以及它
  • 使用 SecItemImport 导入 PKCS12

    Apple s 文档 https developer apple com library mac documentation security Reference keychainservices Reference reference h
  • Plotly-Dash:如何确定客户端回调中的触发输入

    Dash 的文档描述了在服务器端回调的情况下如何确定哪个输入触发了回调 高级回调 https dash plotly com advanced callbacks 有没有办法确定哪个输入触发了客户端打回来 看起来这个功能是在1 13 0版本
  • REST - 修改部分资源 - PUT 或 POST

    我看到很多关于如何使用 REST 只更新部分资源 例如状态指示器 的问题 选项似乎是 抱怨 HTTP 没有 PATCH 或 MODIFY 命令 然而 接受的答案REST 的 HTTP MODIFY 动词 https stackoverflo