风格 ⇒ 标准 ⇒ 协议 ⇒ 实现

Representational State Transfer,是一种软件架构风格,既然是风格,就非标准或协议,而是定义了一组设计原则和约束条件。具有如下特点:

  • 适用于客户端和服务器交互类的软件;
  • 基于该风格设计的软件更简洁,更有层次,更易于实现缓存等机制;
  • 在REST中,每一个对象(资源)都是通过 URL 来表示的
    • REST 以 url 的形式对外暴露接口;

0. Rest 与 GET/POST/DEL 与响应吗

以智能家居为例:

  • GET:/devices/<identifier>获取设备信息;

    • 200:表示成功响应;
    • 404:不存在
  • POST:注册新的设备进入:
    • 请求携带参数:identifier/name/device_type/control_gateway
    • 返回 201:Created 表示请求已经被成功处理,并且创建了新的资源。新的资源在应答返回之前已经被创建。
  • DEL:删除已有设备;
    • 404:不存在
    • 204:无内容

1. 网站即软件

网站即软件,是一种新型的软件。

  • 作为软件的网站是一种互联网软件,采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,

    • 具有高延时(high latency,受制于带宽)、高并发的特点;
    • 软件开发一般针对单机环境,网络则主要研究系统之间的通信;

RESTful 架构的提出,使得网站越来越多地具有软件的属性,通过风格的限制和约束,也使得网站开发能够按照软件开发的方式进行开发。

2. RESTful 架构

REST,representational state transfer,表现层状态转化(还记得 OSI 7层网络模型吗,在网络层、传输层之上又细分为会话层(session layer),表示层(presentation layer))。

  • 资源(resources)与资源的展现,表示层状态转移,省略了主语,表现层其实指的是资源的表示层,对资源的展示与表现;

    • 资源(resources)就是 URI/URL 的 R;
    • 所谓“资源”,就是网络空间中的一个实体,由 URI 唯一指向。它可以是一段文本,一张图片,一首歌曲,甚至是一种服务。
    • 一个专门的网站将资源具体呈现出来的形式,叫做它的“表现层”;文本可以用 txt 格式表现,也可用 html 格式、xml 格式、json 格式。URI 仅代表资源,并不指定资源形式。严格说来,某些网页网址(URL)最后的“.html”后缀名是不必要的,后缀名表格式,属“表示层”范畴,而 URL 仅说明资源的位置。那么具体的资源表示(resource representation)应该放在何处呢?通过 HTTP 请求的头信息中用 accept 和 content-type 字段(比如为 text/html)指定,这两个字段是对“表现层”的描述;
  • 状态转移(state transfer):访问一个网站,就代表了客户端和服务器的一个交互过程,客户端发出连接或者获取资源的请求,服务器给出响应。自然这个过程中,必然涉及到数据和状态的转化;
    • http 的第二个 t 就表示 transfer,转移;
    • 互联网通信协议HTTP协议,是一个无状态(stateless)协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生”状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是”表现层状态转化”。
      • 客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

references

  • 理解RESTful架构

理解 RESTful相关推荐

  1. [转] 理解RESTful架构

    FROM:http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件 ...

  2. 理解RESTful架构

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  3. 我是如何根据豆瓣api来理解Restful API设计的

    1.什么是REST REST全称是Representational State Transfer,表述状态转移的意思.它是在Roy Fielding博士论文首次提出.REST本身没有创造新的技术.组件 ...

  4. 如何理解 RESTful 的幂等性

    来源:http://blog.720ui.com/2016/restful_idempotent/ 理解RESTful的幂等性,并且设计符合幂等规范的高质量RESTful API. 怎么理解幂等性 H ...

  5. [转载] 理解RESTful架构

    原文: http://www.ruanyifeng.com/blog/2011/09/restful.html 理解RESTful架构 作者: 阮一峰 日期: 2011年9月12日 越来越多的人开始意 ...

  6. 理解RESTful架构【转】

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  7. 如何理解RESTful的幂等性

    理解RESTful的幂等性,并且设计符合幂等规范的高质量RESTful API. 怎么理解幂等性 HTTP幂等方法,是指无论调用多少次都不会有不同结果的 HTTP 方法.不管你调用一次,还是调用一百次 ...

  8. 转: 理解RESTful架构

    转自: http://www.ruanyifeng.com/blog/2011/09/restful.html 作者: 阮一峰 日期: 2011年9月12日 越来越多的人开始意识到,网站即软件,而且是 ...

  9. 理解restful协议

    原文 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency ...

最新文章

  1. 跟踪自主车辆软件平台
  2. [VBScript] 自动删除2小时以前生成的文件
  3. Python 函数参数有冒号 声明后有- 箭头
  4. 中断方式下进行串口通讯的正确方法
  5. 针对与其他语言的数据交换Model ,添加了 构造函数
  6. 常见的BIOS硬盘故障现象及急救措施
  7. 利用python进行数据分析_利用python进行数据分析复现(1)
  8. 异常的捕获 try...catch java
  9. python使用codecs模块进行文件操作-读写中英文字符
  10. (转载)用C#实现MySQL建库及建表
  11. c# 图片批量转双层PDF,OFD格式文件
  12. SpringBoot框架下集成萤石云平台开发海康的摄像头
  13. 【笔记分享】Android TV 红外蓝牙遥控器添加
  14. 小米 gps信号测试软件,实时查看,防走丢神器:小米 米兔GPS定位器 防盗跟踪器 使用评测...
  15. 学生搭配问题数据结构报告c语言,数据结构课程设计_学生搭配问题.doc
  16. 点与直线位置关系,叉乘
  17. 在ppt中插入html,PPT页面中插入浏览器方法 PPT中插入浏览器教程-PPT家园
  18. 微信h5支付添加域名时报错,“h5支付域名需要提供完整的支付路径“
  19. SpaceX取代俄罗斯 将帮助OneWeb发射220颗联网卫星
  20. java 延时发送邮件_基于SpringBoot实现定时发送邮件过程解析

热门文章

  1. Windows环境下Android NDK环境搭建
  2. Box2D物理引擎的使用方法
  3. linux haokande shell,5 个 PowerShell 主题,让你的 Windows 终端更好看
  4. globalmapper如何选取图像上的点_图像配准算法
  5. 理解mysql 底层原理
  6. java语言构造顺序树_PAT-1086(Tree Traversals Again)Java语言实现+根据中序和前序遍历构建树并且给出后序遍历序列...
  7. scala构造器的介绍
  8. package关键字的使用
  9. get请求是否 csrf认证流程_CORS和CSRF修炼宝典
  10. Dell服务器串口开机协议,dell和ibm服务器串口重定向功能的配置.docx