休息服务约定

Rest Services conventions

在 Rest Services 中,当我们想从服务器检索一些数据时,我们通常使用 'GET' 请求,但是我们也可以使用 'POST' 请求检索数据。 我们使用 'POST' 创建,'PUT' 更新,'DELETE' 删除,但是我们甚至可以使用 'DELETE' 请求创建新数据。

所以我只是想知道这背后的真正原因是什么,为什么要使用这些约定?

GET 由代理缓存 POST 并且不删除!

是的,您可以使用 GET 创建数据,但现在您必须销毁它 cached.Why 才能完成额外的工作。

此外,由于使用目的不同,接受的最大 header 尺寸也不同。

我建议阅读 spec,它清楚地说明了每个 http 方法应该如何使用。

why these conventions are used?

它们是惯例,即已被采纳为标准的最佳实践。您不必遵守该标准,但 REST 服务的大多数消费者都认为您遵守了。这样更容易理解实现/接口。

So I was just wondering what is the real reason behind for that, why these conventions are used?

所以世界不会分崩离析!

不,但说真的,为什么要创建 任何 协议或标准?以这个历史场景为例。回到 Google 的早期,许多开发人员(相对于现在)对 HTTP 协议不是很了解。您可能已经发现了一堆网站,它们只是使用众所周知的(可能 已知)GET 方法。因此会有一些链接是 GET 请求,但会执行本应是 POST 请求的操作,这会更改服务器的状态(有时是非常重要的状态更改)。输入 Google,他每天都在抓取网络。所以现在您拥有 Google 正在抓取的所有这些链接,所有这些链接都是 GET 请求,但会更改服务器的状态。因此,所有这些公司都在他们的服务器更改状态上获得了大量点击。他们都认为他们受到了攻击!但是 Google 没有做错任何事。 HTTP 语义规定 GET 请求不应具有状态更改行为。它应该是一个“只读”方法。所以最终这些公司变聪明了,开始遵循 HTTP 语义。真实故事。

故事的寓意:遵守规程,这就是他们的目的 - 遵守。

你好像是站在服务端实现的角度来看的。是的,您可以实现您的服务器以接受删除请求以“获取”某些内容。这不是真正的问题。在实现服务器时,您需要考虑客户端的期望。我的意思是最终,您正在创建一个 API。从代码API的角度来看

public class Foo {

    public Bar bar;

    public Bar deleteBar() {  
        return bar;            // Really?!
    }

    public void getBar() {  
        bar = null;            // What the..??!
    }
}

我不知道一个开发者能在游戏中坚持多久,写出这样的代码。任何希望“获得”Bar(仅通过命名语义)的调用者都会遇到另一件事。您的 REST 服务也是如此。它最终是一个 WEB API,并且应该遵循构建它的协议(即 HTTP)的语义。那些了解该协议的人将仅根据他们发出的请求类型了解 API 的作用(至少在 CRUD 意义上)。

我对您或任何试图学习 REST 的人的建议是要很好地掌握 HTTP。我会将以下文件放在手边。读一遍,留作参考