具有大量输入数据的 REST 端点 (GET)

2024-04-16

我正在开发一个应用程序,我需要将对象列表传递到 REST 端点,该端点将执行一些计算并将结果返回给调用者。

问题更多的是一个哲学问题,即如何处理这种情况?

在 GET 请求中传递巨大的负载是一个坏主意。同时,它并不是真正的 POST/PUT 请求,因为它不会修改服务器上的任何状态。

以前有人遇到过这个吗?


问题更多的是一个哲学问题,即如何处理这种情况?

网络哲学的一部分是,您不需要知道端点是如何实现的:带有预先计算答案的文档与动态计算与重定向到其他人。

所以从纯粹的哲学角度来看,GET 是正确的答案。

GET 不支持内容主体;您唯一的选择是将这个特定计算的结果表示为资源——换句话说,将您的数据放入 URI 中。

实际上,您可能会遇到任意限制 https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers关于 URI 可以有多长。因此,根据客户端(浏览器/库),这可能是一个问题。

PUT 会很好;相对于 POST 的优点是 PUT 应该是幂等的,使用 PUT 通过统一接口传达您想要的丢失消息语义。

不幸的是,PUT 规范要求替代品具有消息负载的目标资源。这实际上与文件传输有关。也就是说,RFC-7231 https://www.rfc-editor.org/rfc/rfc7231#section-4.3.4确实给你一些回旋余地。

当 PUT 表示与目标资源不一致时,源服务器应该通过转换表示或更改资源配置来使它们一致,或者使用包含足够信息来解释表示为何不合适的适当错误消息进行响应。

因此,您可能会认为计算结果是表示的转换。

PUT 的这种用法与吉姆·韦伯 https://yow.eventer.com/yow-2011-1004/domain-driven-design-for-restful-systems-by-jim-webber-1047谈论.在里面休息币 https://www.infoq.com/articles/webber-rest-workflow演示中,您可以通过 PUT 方法在系统中创建订单来触发业务领域的副作用,这会创建一个用于跟踪该订单状态的资源。

在这种方法中,每个提交的计算都应该有一个唯一的标识符;您可以将输入放入该计算中,它将返回 201 - Created 以及结果。理论上,您可以支持资源上的 GET,以在不需要输入的情况下返回结果,或者支持资源上的 DELETE,作为客户端已收到计算结果并且在服务器上不需要它的一种确认。更长。

或者不是 - 您实际上并不需要它,并且您当然不需要支持每个资源上的所有 http 方法。

如果这种方法不可接受(例如,如果您使用 HTML 作为媒体类型),那么 POST 就是您神奇的包罗万象的方法。它实际上并不适合你想要的东西;但POST必须支持非幂等操作,这意味着统一接口不会识别你的计算是幂等的。在幸福的道路上,这并不是什么大不了的事。

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

具有大量输入数据的 REST 端点 (GET) 的相关文章

随机推荐

  • 在 Core i7 Mac 上禁用睿频加速?

    有没有什么方法可以在运行 Mac OS X 的 Core i7 mac 上以编程方式禁用 Turbo Boost 我需要能够在代码优化等过程中出于基准测试目的执行此操作 如果做不到这一点 任何可以禁用 启用 Turbo Boost 的实用程
  • Mac 终端上的基本命令行不起作用

    我在尝试安装 mongodb 时更改了 bash 配置文件 但我的命令行均无法在终端上运行 我在网上读到我需要修复 PATH 但当我的命令都不起作用时我什至无法访问它 Help 错误地 我也遇到了同样的问题 要解决这个问题 我必须将 PAT
  • 生成随机布尔概率

    我只知道如何生成随机布尔值 真 假 默认概率为 50 50 但我怎样才能以自己的概率生成真假值呢 假设它返回 true 的概率为 40 60 或 20 80 等 一种方法是检查返回值Random Next 100 小于您期望的概率 但我无法
  • 在 Javascript 中根据 JSON 数据创建饼图

    我是 PHP 和 JavaScript 新手 我需要使用从 URL 获取的 JSON 数据创建一个饼图 JSON 数据是 Domain Artificial Intelligence Count 46 Domain Data Archite
  • Actionscript 内存管理、垃圾收集

    这个博客 http blogagic com 163 flex memory management and memory leaks varref 和其他人 指出 在清理对象时 您应该在 dispose 方法中将对象引用设置为 null 但
  • 人们可以放心地忽略宏和内置宏之间的区别吗?

    我从 Clojure 开始 这也是我的第一个 lisp 显然有很多东西需要吸收 为了减轻认知负担 我尝试找到我可以安全地忽略的部分 目前 人们能否安全地以相同的方式处理带有宏的表单和带有内置函数的表单 或者是否会出现以后出现的陷阱 换句话说
  • 修改现有表单值 - GetChoices() 不起作用

    为什么 getChoices https developers google com apps script reference forms list item getChoices 不适用于现有列表项 我有以下代码 它通过 ID 获取表单
  • Excel:如何使用数组连接 criteread 部分旁边的字符串(If 函数)

    今天是个好日子 我有一个 Excel 工作表 分为两列 如下所示 我知道如何使用带有 sum 的数组 if 函数来将满足条件的列旁边的所有值相加 如下所示 sum if A1 A5 YES B1 B5 但如何使用字符串进行操作并连接 以便它
  • AdMob 刷新请求

    我有几个令我困惑的问题 谁最负责广告刷新 加载请求后bannerView load GADRequest 让开发者或 Google 进行监控是最佳做法吗 刷新时间应该短至 30 秒还是至少 60 秒 他们建议 60 秒 但给你选择 30 秒
  • Azure 部署错误:找不到 ClientPerfCountersInstaller.exe

    我最近尝试在现有站点和部署上设置 Azure 预览缓存 但由于错误而不得不中止 但是从那时起 当我尝试部署到 Azure 时 我会收到以下错误 找不到名为的文件approot bin Microsoft WindowsAzure Cachi
  • 逆向工程的汇编语言[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • AWS Kubernetes 集群中出现“创建 pod 沙盒失败”pod 错误

    问题摘要我们曾多次观察到 我们的集群运行时遇到这样的问题 一个或多个节点上的一个或多个 Pod 无法启动 Pod 内的一个或多个容器未启动 Pod 显示 创建 Pod 沙箱失败 错误 在 受影响的 节点上重新启动 docker 或 kube
  • spring boot @controller @transactional 不起作用

    I have Transactional控制器类中的方法如下 主要问题是每个服务调用根据日志在其自己的事务中运行 控制器是否忽略了事务功能 我希望学生记录不会被保存 因为我在使用另一个服务之后抛出异常 但更新仍然发生在数据库中 我什至有 E
  • sklearn 中的 SVM 支持增量(在线)学习吗?

    我目前正在设计一个文本文章推荐系统 有趣 或 不有趣 的二元情况 我的要求之一是它应该不断更新以适应不断变化的趋势 据我所知 最好的方法是利用支持增量 在线学习 http en wikipedia org wiki Online 5fmac
  • HQL 子字符串最后 x 个字符

    我对 Hibernate 很陌生 我想获取字符串的最后 N 个字符 我找到了 substring 方法 但这并没有真正帮助 有人有什么主意吗 TIA 我实际上使用子字符串修复了它 我忘了我可以使用参数 我做了类似的事情 Query q wh
  • 在闪亮选项卡中使用多个 R Markdown 文件

    我正在构建一个闪亮的应用程序 我想要有多个选项卡集 到目前为止我得到的代码告诉我 shinyUI navbarPage OEI Grant tabPanel Part 1 Organization tabsetPanel 1 x tabPa
  • 如何在Swagger open api 3.0中定义常量字符串[重复]

    这个问题在这里已经有答案了 如何在 swagger open api 3 0 中定义常量字符串变量 如果我定义枚举 它将如下所示 StatusCode title StatusCode enum success fail type stri
  • 使用Golang登录私有站点并提取信息

    我尝试使用 golang 登录网站的私人区域并提取一些信息 但我似乎不太正确 我设法获取登录页面以获取 csrf 令牌 然后将 csrf 令牌与登录信息一起发布到登录页面 然后我就可以正常登录了 如果我在此时停止 我可以看到我被重定向的页面
  • 当尝试使用 Webdriver 通过 linkText 查找链接时,有没有办法忽略大写字母?

    我正在使用 Selenium 2 Webdriver 我想单击一个链接 但链接文本可以是 Linktext 或 LINKTEXT 还有比这更好的方法吗 List
  • 具有大量输入数据的 REST 端点 (GET)

    我正在开发一个应用程序 我需要将对象列表传递到 REST 端点 该端点将执行一些计算并将结果返回给调用者 问题更多的是一个哲学问题 即如何处理这种情况 在 GET 请求中传递巨大的负载是一个坏主意 同时 它并不是真正的 POST PUT 请