【问题标题】:RestFul Get vs PostRestFul 获取与发布
【发布时间】:2012-01-25 00:33:11
【问题描述】:

我知道 Restful Get 操作用于检索信息。而 Restful Post 用于创建/插入我们没有唯一标识符的资源。

但有人刚刚问我“Restful GET 与 Restful POST 相比有什么优势?在服务器端能力方面有什么优势?”

【问题讨论】:

  • 这个问题被问过无数次了,here's 一个例子。
  • Marvin - 你提供的链接并没有准确解决我的问题。我不是在这里询问 Http GET。 Restful Get 不一定会出现在浏览器的 url 上。而且我已经强调了“服务器端功能” - 请重新阅读。
  • @Rose 一个 GET 是一个 GET。你如何“设计”它,使用 REST 或其他任何东西,并不会在后台改变它。服务器端的能力取决于很多因素——尤其是你用来处理请求的过程。您没有提及您是如何接收或处理请求的。

标签: java web-services rest post get


【解决方案1】:

认为“他们”想要的答案,至少我会尝试的答案是,GET 是幂等的(不对服务器进行任何更改)并且可以缓存以提高速度和巨大的可扩展性。在服务器上处理大量 GET(相对)容易。 POST 在服务器上创建东西,所以它会改变东西,不能被“缓存”,工作量更大,更难扩展。呜呜呜……

【讨论】:

  • 我同意。 Get 是幂等的。 Post 可能会因多次调用而发生服务器端更改。我们的实现是否授予了这种“幂等性”?这意味着如果我编写一个 GET 方法并将 x 更改为 x++ 并保存它,它就不再是幂等的了,对吧?那么是否只是 RESTful 规范提供了这样的建议?或者网络框架/库是否有任何东西可以使请求具有幂等性?
  • @Rose:GET 或 POST 请求中没有任何inherent 使其具有幂等性。 GET/POST 只是尝试对请求进行分类并允许服务器应用程序基于该分类启用附加功能的动词;比如处理FORM字段。考虑到这一点,幂等性完全来自实现。按照惯例和推荐的最佳实践,GET 请求应该从不修改数据。如果您遵循此约定/实践,那么您的 GET 请求将满足幂等要求,因此有资格进行缓存。
【解决方案2】:

服务器端功能没有任何区别,您不是自己做的。请求是 GET 还是 POST 只不过是 HttpServletRequest 对象上的一条数据,当它到达您时。您可以完全不同地处理它们,或者使用完全相同的代码。

【讨论】:

  • 虽然您可以按照自己的方式编写任何代码,但 HTTP 规范明确规定 GET 不得有副作用。这些是在客户端、代理服务器和服务器之间共享的语义。限制自己仅根据服务器端实现来考虑请求在网络协议中是没有意义的。
  • 我同意你的看法,这不是我对 OP 所说的问题的解释方式:)
【解决方案3】:

您可以使用 GET 或 POST 来做任何您想做的事情。如果您偏离 HTTP 标准,那么您将不得不向您的消费者解释这一点,并且您已经完全破坏了 REST 原则。例如,当网站使用 GET 删除资源时。然后,当 Google 开始抓取该网站时,它表示要删除资源。 GET 应该是幂等的,所以如果服务创建者遵循 HTTP 规范就不会发生这种情况。

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 2011-03-31
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多