3. REST架构原则
Roy Fielding 明确指出 REST 和 World Wide Web 的五个架构原则:
可寻址性(Addressability)。REST 中的所有东西都基于资源的概念。资源与 OOP 中的对象或其他名词不同,它是一种抽象,必须可以通过 URI 寻址或访问。
接口一致性(Interface uniformity)。与 SOAP 或其他标准不同,REST 要求用来操纵资源的方法或动词不是任意的。这意味着 RESTful 服务的开发人员只能使用 HTTP 支持的方法,比如 GET、PUT、POST、DELETE 等。因此不需要使用 WSDL 等服务描述语言。
无状态(Statelessness)。为了增强可伸缩性,服务器端不存储客户机的状态信息。这使服务器不与特定的客户机相绑定,负载平衡变得简单多了。这还让服务器更容易监视、更可靠。
无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。HTTP协议是无状态协议。
客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了。
具象(Representational)。客户机总是与资源的某种具象交互,绝不会直接与资源本身交互。同一资源还可以有多个具象。理论上说,持有资源的具象的任何客户机应该有操纵底层资源的足够信息。
连通性(Connectedness)。任何基于 REST 的系统都应该预见到客户机需要访问相关的资源,应该在返回的资源具象中包含这些资源。例如,可以以超链接的形式包含特定 RESTful 服务的操作序列中的相关步骤,让客户机可以根据需要访问它们。
4. REST要求
• 客户端和服务器结构
• 连接协议具有无状态性
• 能够利用Cache机制增进性能
• 层次化的系统
• 随需代码 - Javascript (可选)
不像基于SOAP的Web服务,RESTful Web服务并没有的“正式”标准。 这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但在实现RESTful Web服务时可以使用其他各种标准(比如HTTP,URL,XML,PNG等)
5. REST优势
• 可以利用缓存Cache来提高响应速度
• 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
• 浏览器即可作为客户端,简化软件需求
• 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
• 不需要额外的资源发现机制
• 在软件技术演进中的长期的兼容性更好
6. RESTful实现
RESTful通过RESTful Web 服务与 RPC 样式的 Web 服务实现。
7. URI
URI:Universal Resource Identifier,通用资源标识符;
URL:Uniform Resource Locator,统一资源定位符;
URN:Uniform Resource Name,统一资源名称。
其中,URL,URN是URI的子集。 Web上地址的基本形式是URI,它代表统一资源标识符。有两种形式:
URL:目前URI的最普遍形式就是无处不在的URL或统一资源定位器。
URN:URL的一种更新形式,统一资源名称(URN, Uniform Resource Name)不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件的支持。
URL是Uniform Resource Location的缩写,译为“统一资源定位符”。通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL的格式由下列三部分组成:
第一部分是协议(或称为服务方式);
第二部分是存有该资源的主机IP地址(有时也包括端口号);
第三部分是主机资源的具体地址。,如目录和文件名等。
第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。
文件的URL:
用URL表示文件时,服务器方式用file表示,后面要有主机IP地址、文件的存取路径(即目录)和文件名等信息。有时可以省略目录和文件名,但“/”符号不能省略。
例一:file://ftp.baidu.com/pub/files/foobar.txt
代表存放主机ftp.baidu.com上的pub/files/目录下的一个文件,文件名是foobar.txt。
网络新闻的URL:
利用URL表示网络新闻组时,如果是usenet的话只要指定出新闻组的名字即可。
例如:news:rec.gardening
表示usenet上的rec.gardening新闻组(园艺)。
HTTP的 URL:
使用超级文本传输协议HTTP,提供超级文本信息服务的资源。
例一:http://www.peopledaily.com.cn/channel/welcome.htm
其计算机域名为www.peopledaily. com. cn。超级文本文件(文件类型为.html)是在目录/channel下的welcome.htm。这是中国人民日报的一台计算机。
例二:http://www.rol.cn.net /talk/talk1.htm
其其计算机域名为www.rol. cn. net。超级文本文件(文件类型为.html)是在目录/talk下的talk1.htm。这是瑞得聊天室的地址,可由此进入瑞得聊天室的第1室。
分享到:
相关推荐
2. `.mymetadata`:这是MyEclipse IDE的工作区元数据文件,存储了关于工作区的各种信息,比如项目设置、首选项等。 3. `.project`:这是Eclipse项目的配置文件,定义了项目的类型、构建信息、Nature(项目特性)...
下面写一个最简单的Hello World例子,以便对RESTful WebService有个感性认识。因为非常专业理论化的描述RESTful WebService是一件理解起来很痛苦的事情。看看例子就知道个大概了,再看理论就容易理解多了。
首先我们来认识下RESTful Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www.test.com/user/view/id/1 表示获取id为1的用户信息,如果使用Restful风格,可以变成这样: ...
在压缩包中,我们有两个文档:“day02-认识微服务.md”和“day03-认识微服务2.md”,它们可能是连续的课程章节,涵盖了微服务和Spring Cloud的基础知识。 在“day02-认识微服务.md”中,你可能将学习到: 1. ...
2. **JSP(JavaServer Pages)**:JSP是一种视图技术,允许开发者将HTML代码和Java代码混合编写,简化了网页动态内容的生成。JSP最终会被编译成Servlet执行。 3. **JDBC(Java Database Connectivity)**:JDBC是...
《Java Web 服务:构建与运行(影印版)》提供了对Java的API的一个全面介绍,...· 认识SOAP消息的结构 · 学习如何交付基于Java的RESTful Web服务和消耗商业RESTful服务 · 了解对基于SOAP和基于REST的Web服务的安全要求
10. **JAX-RS(Java API for RESTful Web Services)**:定义了创建RESTful服务的API,使得开发Web服务变得更加简单。 此外,非标准的规范,如Struts、Spring框架、Hibernate ORM等,虽然不是J2EE官方的一部分,但...
在本主题“认识微服务-2.服务拆分和远程调用”中,我们将深入探讨微服务的核心组成部分:服务拆分和服务之间的远程调用。 服务拆分是微服务架构的基础,它的目标是实现应用程序的模块化,将复杂的大规模系统分解为...
《构建基于Spring Boot和Kotlin的RESTful Web服务》 在现代Web开发中,RESTful API已经成为构建可扩展、高效且易于维护的应用程序的关键技术。...同时,你也会对如何构建符合REST原则的API有更深入的认识。
微服务结构鼓励前后端分离,使用RESTful API通信,降低了耦合度,提升了系统的可扩展性和可维护性。 【远程调用方式】 在微服务和SOA中,服务之间的通信通常涉及远程调用。常见的调用方式有RPC和HTTP。 RPC(远程...
【认识OCS:深入理解开放通信服务】 在IT领域,OCS通常指的是“开放通信服务”(Open Communication Services)。这是一个广泛的概念,涵盖了一系列用于构建、集成和管理通信服务的技术和平台。OCS的核心目标是提供...
具体实现了创建项目、编码开发实体类及各模块层次分明的设计以及基于 RESTful API 进行了单元测试。 适合人群:有一定 Java 和 Spring Boot 开发经验的研发工作者,或者想要从事此类工作的软件工程师。 使用场景及...
OM2M遵循具有开放接口的RESTful方法,以独立于基础网络来开发服务和应用程序。 它提出了一种在OSGi层之上运行的模块化体系结构,使其可以通过插件高度扩展。 它支持多种协议绑定,例如HTTP和CoAP。 提供了各种互通...
2. **Jersey框架**:熟悉Jersey的API和配置,能够创建、测试和调试RESTful服务。这包括定义资源类、使用HTTP方法、处理数据类型等。 3. **Jetty服务器**:掌握Jetty的用法,如何配置和启动Jetty服务器,以及如何将...
这篇演讲稿,收录于名为“01+SDCC+-+胡峰+-+京东咚咚微服务架构从理论认识到实践落地.pdf”的文件中,对于想要了解和实施微服务架构的人来说,无疑是一份宝贵的学习资料。 微服务架构是一种将大型复杂应用拆分为一...
微服务架构是一种将大型复杂应用程序拆分为一组小型、独立的服务的方法,每个服务都能在其自己的进程中运行,通过轻量级通信机制(如HTTP RESTful API)互相协作。这种架构有助于提高系统的可伸缩性、可维护性和故障...
· 认识SOAP消息的结构 · 学习如何交付基于Java的RESTful Web服务和消耗商业RESTful服务 · 了解对基于SOAP和基于REST的Web服务的安全要求 · 学习如何在各种环境下部署JAX-WS服务 不管是学生还是有经验...
8. **服务接口API**:通过RESTful API或SOAP等接口,开发者可以方便地集成和使用云计算服务,构建复杂的云应用程序。 云计算的发展对个人用户、企业和整个IT行业产生了深远影响,它降低了技术门槛,使得计算资源变...
Transfer的缩写(不要试图去翻译它,你会发现三个字都认识,但合在一起就不知道它说啥了)。 要理解REST,首先在明确这几点: REST不是平台,不是软件,而是一套规范、一套倡议。就如同HTTP是一套规范,Google ...
2. `demo-restfulapi.zip`:RESTful API是一种常见的Web服务设计风格,用于构建可扩展的、无状态的服务。这个文件可能是用Java实现的一个RESTful API服务,可能使用了Spring Boot和Spring Web MVC来创建HTTP端点。 ...