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 的相关文章

  • 如何为WCF服务添加跨域支持

    我试图允许从托管在 localhost 80 的 javascript 应用程序向托管在不同端口的 WCF RStful 服务发出 POST 请求 但不知何故它不起作用 我尝试将自定义属性添加到标头 以及以编程方式将其添加到我的服务中JSO
  • 在 Java Servlet 应用程序中设置 HTTP 201 响应的 Location 标头的正确方法是什么

    考虑以下代码向客户端发送 HTTP 201 已创建 响应 String url app things id 42 example response setStatus HttpServletResponse SC CREATED respo
  • Rails - map.resources 的冗余 RESTFUL 操作? (新建、创建)

    我想知道为什么当您使用 map resources 在 Rails 中创建静态路线时 它会生成以下操作 新建 创建 编辑 更新 只声明一项行动有什么问题吗 create and update并做这样的事情 def create unless
  • 如何使用独立的 Jetty 进行服务器推送

    我正在尝试使用独立的 Jetty 在静态网站上测试服务器推送功能 我的网站由一个index html 1个CSS 一堆图像组成 目录结构为 Album index html style css images image 1 png a se
  • 如何将 REST API 与 FireMonkey 结合使用?

    我需要在 FireMonkey 中实现 REST API 来获取一些信息 但我不确定如何做到这一点 REST API使用OAuth2 我可以访问两个代码 Consumer Key和Consumer Secret 之后 我需要获得一个临时的
  • Azure API Manager 将所有内容公开,摆脱 Ocp-Apim-Subscription-Key

    我有一些通过 Azure API 管理代理的 REST API 出于某种原因 我希望将其公开以应对所有请求 从开发人员的角度来看 我想摆脱在标头 或请求 中设置密钥 Ocp Apim Subscription Key XXXXXXXXXXX
  • 来自复杂对象的 spring RestTemplate POST 参数

    我正在尝试使用 postForObject 方法使用restTemplate 来测试我们的REST 服务 单元测试 Test public void testPostOrder String url BASE URL orders Orde
  • HttpRequest PUT内容到poco库中

    我想使用 HTTP PUT 请求将一些数据从 C 应用程序发送到服务器 我在用poco http pocoproject org我的应用程序中的网络库 我正在使用这个代码片段 HTTPClientSession session uri ge
  • Chrome 在传输一定量的数据后挂起 - 等待可用的套接字

    我有一个浏览器游戏 最近我开始向游戏添加音频 Chrome 无法加载整个页面并卡在 91 requests 8 1 MB transferred 并且不再加载任何内容 它甚至破坏了所有其他选项卡中的网站 说Waiting for avail
  • 使用 Post 以 REST 方式更新值

    我对 REST 很陌生 所以如果这是一个愚蠢的问题 请原谅我 这样 我就有了客户资源 一个客户有很多信用 所以 我想获取客户积分的 URL 是 客户 21 积分 其中 21 是客户 ID 现在 如果我没有全额积分 如何添加积分 例如 客户有
  • 由于浏览器设置的标头,Safari 拒绝重定向的 CORS 请求

    Summary Safari 拒绝一些涉及重定向的 CORS 请求 声称某些标头是不允许的 但该标头从来不是由脚本请求的 而是由浏览器添加的 所以我认为这应该不重要 Safari 的行为是一个错误吗 规格有问题吗 或者 事情变成这样是有原因
  • 以 RESTful 方式增加资源计数器:PUT 与 POST

    我有一个带有计数器的资源 为了举例 我们将该资源称为profile 计数器是数量views对于该配置文件 Per the 休息维基 http rest blueoxen net cgi bin wiki pl HttpMethods PUT
  • 使用 JWT 创建 PostMan GET 请求

    我是 PostMan 的新手 通常我使用curl 这是获得 JTW 的一个 curl X POST H X Requested With XMLHttpRequest H Content Type application json H Ca
  • REST Web 服务 WSDL? [复制]

    这个问题在这里已经有答案了 我正在实现一个 Web 服务 并且已经实现了 REST 和 SOAP 版本 看看哪个版本适合我的需求 我决定选择 REST 因为它很简单 而且我可能会开发一个 iPhone 应用程序来使用它 我的问题很简单 是否
  • Access-Control-Allow-Origin值跨站缓存

    我正在尝试编写一个 nginx 配置来处理 http 和 https 上的两个站点 只要客户端从不访问这两个站点 它似乎就可以工作 但如果它们这样做 就会出现缓存 跨站点问题 Allow cross origin location eot
  • 如何获取数组作为 GraphQL 解析器的输入

    我想得到一个字符串数组ids查询变量中的参数并在我的解析器中使用它 下面是我的代码 People resolver ts import Resolver Query Mutation Args from nestjs graphql imp
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • PHP 中标头的使用

    非常简单的问题 这两个 PHP 版本 5 标头调用中哪一个是 最好的 header Not Modified true 304 header HTTP 1 1 304 Not Modified 我很确定第一个是最多价的 但只是好奇如果在 H
  • 在 Postman 中连接 ECONNREFUSED

    我试图通过邮递员测试我的 REST API 但收到以下错误 这是我编写的第一个 REST API 我对邮差很陌生 所以不确定我做错了什么 下面是我尝试使用此 URL 在邮递员中调用的代码 我在 URL 中传递两个日期参数 https loc
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http

随机推荐

  • 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