REST和HTTP协议之间的区别是什么?

REST和HTTP协议之间的区别是什么?,http,rest,terminology,Http,Rest,Terminology,REST协议是什么?它与HTTP协议有什么不同?REST是一种利用HTTP协议的方法,不是HTTP协议的替代品 数据由URL唯一引用,可以使用HTTP操作(GET、PUT、POST、DELETE等)对其进行操作。消息/响应支持多种mime类型,但XML和JSON是最常见的 例如,要读取有关客户的数据,可以使用带有URL的HTTP get操作。如果要删除该客户,只需使用相同URL的HTTP delete操作即可 下面的Java代码演示了如何通过HTTP协议进行REST调用: String u

REST协议是什么?它与HTTP协议有什么不同?

REST是一种利用HTTP协议的方法,不是HTTP协议的替代品

数据由URL唯一引用,可以使用HTTP操作(GET、PUT、POST、DELETE等)对其进行操作。消息/响应支持多种mime类型,但XML和JSON是最常见的

例如,要读取有关客户的数据,可以使用带有URL的HTTP get操作。如果要删除该客户,只需使用相同URL的HTTP delete操作即可

下面的Java代码演示了如何通过HTTP协议进行REST调用:

String uri =
    "http://www.example.com/customers/1";
URL url = new URL(uri);
HttpURLConnection connection =
    (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/xml");

JAXBContext jc = JAXBContext.newInstance(Customer.class);
InputStream xml = connection.getInputStream();
Customer customer =
    (Customer) jc.createUnmarshaller().unmarshal(xml);

connection.disconnect();
有关Java(JAX-RS)示例,请参见:


REST不是一种协议,它是一种通用的体系结构,用于描述无状态、高速缓存的客户机-服务器分布式媒体平台。REST体系结构可以使用多种不同的通信协议来实现,尽管HTTP是目前最常见的协议。

REST不是一种协议,它是一种公开应用程序的方法,主要通过HTTP完成

例如,您希望公开应用程序的api,该api不包含getClientById
而不是创建一个URL

yourapi.com/getClientById?id=4
你可以做
yourapi.com/clients/id/4

由于您使用的是GET方法,这意味着您需要获取数据

您可以利用HTTP方法:GET/DELETE/PUT

yourapi.com/clients/id/4还可以处理删除,如果您发送了一个delete方法而没有得到,这意味着您想要删除记录

REST是协议的一种设计风格,它是由Roy Fielding在他的博士论文中开发的,并将HTTP/1.0背后的方法形式化,找到了适合它的方法,然后利用对它的这种更结构化的理解来影响HTTP/1.1的设计。因此,尽管在很多方面它都是在事后进行的,但REST是HTTP背后的设计风格

菲尔丁的论文可以在上找到,非常值得一读,也非常可读。博士论文可能很难写,但这篇论文描述得非常好,对于我们这些没有计算机科学水平的人来说非常可读。休息本身非常简单,这会有所帮助;这是其他人提出后显而易见的事情之一。(就这一点而言,它还用一种简单的方式概括了许多老web开发人员通过艰苦的方式学会的东西,这使得阅读它成为许多人的一个重要“哈哈”时刻)

其他应用程序级协议以及HTTP也可以使用REST,但HTTP是典型的例子

因为HTTP使用REST,所以HTTP的所有使用都使用REST系统。将web应用程序或服务描述为RESTful或non-RESTful关系到它是利用REST还是针对REST工作

RESTful系统的经典示例是一个没有cookie的“普通”网站(cookie并不总是与REST相反,但它们可以是):用户单击加载另一个页面的链接,或执行生成结果的GET form查询,即可更改客户端状态。POST表单查询可以同时更改服务器和客户端状态(服务器根据POST执行某些操作,然后发送描述新状态的超文本文档)。URI描述资源,但描述资源的实体(文档)可能因内容类型或用户首选的语言而异。最后,浏览器总是可以通过PUT和DELETE来更新页面本身,尽管这从来都不是很常见,现在也不常见了

使用HTTP的非RESTful系统的经典示例是,将HTTP视为传输协议,并在每次请求时向同一URI发送一个数据POST,然后以类似RPC的方式对其进行操作,可能连接本身具有共享状态

RESTful计算机可读(即,不是浏览器中的网站,而是以编程方式使用的东西)系统将通过获取URI来获取有关资源的信息,然后URI将返回一个文档(例如,XML,但不一定),该文档将描述资源的状态,包括相关资源的URI(因此超媒体),通过放置描述新状态的实体或删除它们来更改它们的状态,并通过发布来执行其他操作

主要优势是:

可伸缩性:缺少共享状态使得系统具有更大的可伸缩性(当我从一个点击率很高的网站上删除所有会话状态的使用时,我向我展示了这一点,尽管我希望它能提供一些额外的性能,但即使是像我这样的长期反会话倡导者也被删除会话的使用带来的巨大收益所震惊,这甚至不是我为什么要删除它们!)

简单性:有几种不同的方式使REST比更多类似RPC的模型更简单,特别是只有几种“动词”是可能的,每种类型的资源都可以合理地独立于其他资源进行推理

轻量级实体:更多类似RPC的模型最终往往会在实体中以两种方式发送大量数据,以反映类似RPC的模型。这是不需要的。事实上,有时在给定的情况下,一个简单的纯文本文档就是真正需要的,在这种情况下,使用REST,我们只需要发送这些数据(尽管这是一个简单的示例)“最终结果”仅适用于案例,因为纯文本不链接到相关资源)。另一个经典示例是请求获取图像文件,类似RPC的模型通常必须将其包装为另一种格式,并可能以某种方式对其进行编码,以使其位于父格式中(例如,如果RPC-like模型使用XML,则图像需要是base-64'd或类似的,才能适合有效的XML)。RESTful模型只需将文件传输到brows