目录

前言

这是在经过一段时间的积累后,对RESTFul框架的再一次更深入的理解。希望能够将零散的知识点连接成线,相织成面。

RESTful的目的

RESTful由Roy Thomas Fielding在2000年提出,旨在探索两大计算机学科方向–软件&网络 的交叉点。

软件开发:关注软件设计的分类、设计方法的实现。

网络开发:关注系统之间的通信行为的细节和如何改进特定通信机制的表现。

在传统的行业环境中,软件开发很少去评估不同的设计选择对系统行为的影响。在网络开发中也常常忽略了应用程序的交互风格改变比改变互动协议对整体的表现形式有着更大的影响。

而RESTful提出的目的,用设计者的话来说就是:希望在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。即RESTful架构设计风格的Web service是建立在网络传输协议HTTP上的特别的应用网站,或者应该称之为”软件”会更加符合REST的初衷。

REST的含义

REST(Representational State Transfer)表现层状态转换

表现层

在Web service的表现层中,Resource Request Handler会接收Client通过HTTP协议发送的无状态请求,在接收请求后再向业务逻辑层请求服务并执行结果返回给Client。除此之外,表现层中的Resource Request Handler还能够确定对自动化客户端公开的概念性实体,而这种实体是具有多种表现形式的数据或服务,也被称之为资源。同时还会为资源分配URI作为唯一的标识,在网络中访问这个URI就是获取一个资源。

需要注意的是:**URI只代表资源的实体,不表示资源的表现形式。我们需要在HTTP请求的头信息中用Accept和content-Type字段来指定相应的资源的表现形式。即:**URI指定资源、HTTP请求中的Accept、content-Type字段指定资源的表现形式

在不同的客户端中可能会请求同一个资源的不同表现形式,例如:我们请求Server中的同一个文本资源时,可能有人需要以XML格式获取、有人可能需要以JSON格式获取。这种格式的需求是由Client发出的请求确定的,而这种资源格式的转换是发生在表现层中的,先由Resource Request Handler对资源的格式进行确定后再做出响应。这种特性使得Web service可以部署到大量需求不同的客户端之中,并且由于无状态原则的特性,使得其非常适合运行在分布式系统中。

状态转化

这种状态指的是请求的状态而不是资源的状态。从客户端的角度出发,其可以通过HTTP的标准方法POST(新建)、DELETE(删除)、GET(获取)、PUT(更新)来操作和修改Server上的资源。而且这种转化建立在表现层中,所以称之为”表现层状态转化”。

无状态协议HTTP

为什么RESTful要加入无状态原则?

这是由于RESTful选择了HTTP协议来同时充当传输协议和应用协议。

那为什么RESTful要选择HTTP协议?

这是从RESTful的设计初衷决定的。Roy Thomas Fielding希望能够建立一个框架去实现基于网络协议的应用软件,而软件的形式就是”网站”,那么协议自然就是HTTP了。

协议的状态:指的是下一次传输能够”记住”这次传输信息的能力。有状态的请求会在Server对请求做出响应后,将请求的状态信息保存在Server的Session中,使得下一次Client传输的信息能够与这一次的请求相关联,从而Server能够再次做出应答。但是这也意味着没有保存过Client请求状态信息的Server无法随时与Client建立连接,这并不适合在分布式系统中使用,会造成很高的请求延迟。

相对而言,由于Web Server要面对很多浏览器的并发访问,为了提高Web Server对并发访问的处理能力,在设计HTTP协议时规定Web Server响应HTTP应答报文和文档时,不保存Client发出请求的Web浏览器进程的任何状态信息。这能够实现一个Client在短时间之内两次访问同一个Server对象时,Server进程不会因为已经给Client发过应答报文而不接受第二次的服务请求(并发访问)。出于上述的理由和为了保证服务器内存,Web Server不会保存发送请求的Web浏览器进程的任何信息,因此HTTP协议属于无状态协议。

基于HTTP协议的无状态特性,决定了RESTful风格的请求也是无状态的。这里的无状态指的是Server不会保留有请求的任何状态信息,那么久决定了每一个请求都必须包含有Server可以理解这个请求所需要的全部信息。

最后

RESTful这一设计风格,需要我们在理论和实践的结合中去理解。在往后的时间里,我们会尝试使用Python去实现连接Web service的RESTful API和实现RESTful API。

RESTful再理解的更多相关文章

  1. Restful的理解,Restful 优缺点

    写一下我对restful的理解,最近换工作面试的时候有问到我restful api的东西,工作中以前很多项目也是webapi + js前台控件的形式构建系统.实际上感觉restful太“理想化”,用起 ...

  2. 33.服务之间的调用之RPC、Restful深入理解

    33.服务之间的调用之RPC.Restful深入理解 2018年05月08日 01:52:42 郑学炜 阅读数 13577更多 分类专栏: 6.框架   版权声明:本文为博主原创文章,遵循CC 4.0 ...

  3. 对restful的理解

    最近在学习web api,从而涉及到了restful风格,我的理解是restful风格,每个链接都会对资源进行相应的操作(CRUD),如果一个链接不包含资源,则可能不符合restful风格,借此想请教 ...

  4. SVM问题再理解与分析——我的角度

    SVM问题再理解与分析--我的角度 欢迎关注我的博客:http://www.cnblogs.com/xujianqing/ 支持向量机问题 问题先按照几何间隔最大化的原则引出他的问题为 上面的约束条件 ...

  5. 再理解HDFS的存储机制

    再理解HDFS的存储机制 1. HDFS开创性地设计出一套文件存储方式.即对文件切割后分别存放: 2. HDFS将要存储的大文件进行切割,切割后存放在既定的存储块(Block)中,并通过预先设定的优化 ...

  6. SpringBoot-04-自动配置原理再理解

    4. 自动配置原理再理解 ​ 配置文件到底能写什么?怎么写?SpringBoot官方文档有大量的配置,但是难以全部记住. 分析自动配置原理 ​ 官方文档 ​ 我们以HttpEncodingAutoCo ...

  7. RESTful概念理解

    基础 REST 定义了一组体系架构原则,您可以根据这些原则设计以系统资源为中心的 Web 服务,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态. 如果考虑使用它的 Web 服务的数 ...

  8. Community Value再理解

    其实之前写“从香港机房引入google/bitbucket路由”的时候,对community value的了解还并不深入,对Juniper default BGP export/import poli ...

  9. RESTful的理解

    REST(Representational State Transfer ),有中文翻译为"具象状态传输"(也有:"代表性状态传输").是由 Roy Thoma ...

随机推荐

  1. 2019春第十二周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 这里 我在这个课程的目标是 能按自己的想法解出题目 这个作业在那个具体方面帮助我实现目标 能朝着软件工程师方向发展 参考文献与网址 C语言 ...

  2. [Web 前端] 014 css 盒子模型

    1. 简介 元素在页面中显示成一个方块,类似一个盒子 把元素叫做盒子,设置对应的样式分别为 盒子的边框(border) 盒子内的内容和边框之间的间距(padding) 盒子与盒子之间的间距(margi ...

  3. ofbiz框架以及核心原理介绍

    1. 什么是Ofbiz Ofbiz(Open for business)是一个开源的,基于J2EE和XML规范的,用于构建大型企业级.跨平台.跨数据库.跨应用服务器的多层.分布式电子商务类WEB应用系 ...

  4. Java JSON入门

    一.所需jar包 jakarta commons-lang 2.5jakarta commons-beanutils 1.8.0jakarta commons-collections 3.2.1jak ...

  5. node开发一个接口详细步骤

    最近在做后台系统改版,由于目前接口还没出来,就自己用nodejs写了个简单的接口. 我这里用的是nodejs+mysql的 这里不讲nodejs和mysql的安装.这些基础略过. 首先创建文件夹.cd ...

  6. Docker备份与迁移

    容器保存为镜像 通过以下命令将容器保存为镜像: docker commit [-m="提交的描述信息"] [-a="创建者"] 容器名称|容器ID 生成的镜像名 ...

  7. day01-html

    HTML概述: HTML: Hyper Text Markup Language 超文本标记语言 超文本: 比普通文本功能更加强大,可以添加各种样式 标记语言: 通过一组标签.来对内容进行描述. &l ...

  8. Linux用户都应该了解的命令行省时技巧

    每个Linux用户都应该了解的命令行省时技巧 有网友在问答网站Quora上提问:“有哪些省时小技巧,是每个Linux用户都应该知道的?” Joshua Levy 平常就在 Linux 平台工作,并且他 ...

  9. ARM Cortex-M底层技术(3)—编译内核的原理及其应用

    概述: 当前开发中,我使用的Keil开发工具较多(keil526),故以keil为例进行介绍,其他开发环境大同小异. 1. 编译链接的定义 不管我们编写的代码有多么简单,都必须经过「编译 --> ...

  10. SSM架构 (Spring 5.0.2)添加Jackson

    第一步添加jsckson的包 <dependency> <groupId>javax.annotation</groupId> <artifactId> ...