休息服务惯例

时间:2015-05-25 14:06:57

标签: rest resteasy

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

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

3 个答案:

答案 0 :(得分:2)

  

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

所以世界不会崩溃!

不,但严重的是,为什么创建了任何协议或标准?采取这种历史情景。早在谷歌的早期,许多开发人员(相对于现在)对HTTP协议并不太了解。您可能会遇到的是一堆网站,他们只使用了众所周知的(可能仅 已知)GET方法。因此会有链接作为GET请求,但会执行意味着POST请求的操作,这将改变服务器的状态(有时非常重要的状态更改)。进入谷歌,他花了几天时间抓取网络。因此,现在您拥有Google正在抓取的所有这些链接,所有这些链接都是GET请求,但更改了服务器的状态。因此,所有这些公司都在他们的服务器上获得了大量的点击来改变状态。他们都认为他们受到了攻击!但谷歌没有做错任何事情。 HTTP语义声明GET请求不应具有状态更改行为。它应该是“只读”方法。所以最后这些公司变得聪明起来,并开始遵循HTTP语义。真实的故事。

故事的寓意:遵循协议,这就是他们的目标 - 遵循。

您似乎从服务器实现的角度来看待它。是的,你可以实现你的服务器接受DELETE请求“获取”的东西。这不是真正的问题。实现服务器时,您需要考虑客户端期望的内容。我的意思是最终,你正在创建一个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。我会保留以下文档。阅读一次,然后将其作为参考

答案 1 :(得分:0)

由代理POST缓存而不是DELETE!

是的,您可以使用GET创建数据,但现在您必须销毁该缓存。为什么要做额外的工作。

由于使用目的,接受的最大标头大小也不同。

答案 2 :(得分:0)

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

  

为什么要使用这些约定?

它们是惯例,即已被采纳为标准的最佳实践。您不必遵守标准,但Illegal instruction (core dumped)服务的大多数消费者都会假设您这样做。这样就更容易理解实现/接口。