什么是REST

REST是REpresentational State Transfer表述性状态转移 的首字母缩写。它是分布式超媒体系统的架构风格,最初由Roy Fielding在2000年的着名论文中提出。

什么是RESTful:

REST-ful,其中ful代表形容词,如helpful,powerful。这类形容词意为"full of,having the quality of"。多加在名词之后表示“充满...的、易于...、可...的、富有...的、具有...的”的意思,是最常用的形容词后缀,反义词后缀是-less。

RESTful 就代表满足REST原则的。

与任何其他架构风格一样,REST也有自己的6个引导约束,如果接口需要被称为RESTful,则必须满足这些约束。这些原则如下。

REST的指导原则

客户端 - 服务器 - 通过将用户接口问题与数据存储问题分开,我们通过简化服务器组件来提高跨多个平台的用户接口的可移植性并提高可伸缩性。

无状态 - 从客户端到服务器的每个请求都必须包含理解请求所需的所有信息,并且不能利用服务器上任何存储的上下文。因此,会话状态完全保留在客户端上。

可缓存 - 缓存约束要求将对请求的响应中的数据隐式或显式标记为可缓存或不可缓存。如果响应是可缓存的,则客户端缓存有权重用该响应数据以用于以后的等效请求。

统一接口 - 通过将通用性的软件工程原理应用于组件接口,简化了整个系统架构,提高了交互的可见性。为了获得统一的接口,需要多个架构约束来指导组件的行为。REST由四个接口约束定义:资源识别; 通过陈述来处理资源; 自我描述性的信息; 并且,超媒体作为应用程序状态的引擎。

分层系统 - 分层系统风格允许通过约束组件行为来使体系结构由分层层组成,这样每个组件都不能“看到”超出与它们交互的直接层。

按需编码(可选) - REST允许通过以小程序或脚本的形式下载和执行代码来扩展客户端功能。这通过减少预先实现所需的功能数量来简化客户端。

资源

REST中信息的关键抽象是一种资源。可以命名的任何信息可以是资源:文档或图像,临时服务,其他资源的集合,非虚拟对象(例如,人)等。REST使用资源标识符来标识组件之间交互中涉及的特定资源。

任何特定时间戳的资源状态称为资源表示。表示由数据,描述数据的元数据和超媒体链接组成,这些链接可以帮助客户转换到下一个期望的状态。

表示的数据格式称为真正的RESTful API看起来像超文本。每个可寻址信息单元明确地(例如,链接和id属性)或隐式地(例如,从媒体类型定义和表示结构导出)携带地址。

根据罗伊菲尔丁的说法:

超文本(或超媒体)意味着信息和控制的同时呈现,使得信息成为用户(或自动机)通过其获得选择和选择动作的可供性。请记住,超文本不需要是浏览器上的HTML(或XML或JSON)。机器在理解数据格式和关系类型时可以跟踪链接。

此外,资源表示应该是自描述的:客户端不需要知道资源是员工还是设备。它应该基于与资源相关的媒体类型。因此在实践中,您最终将创建大量自定义媒体类型 - 通常是与一种资源相关联的一种媒体类型。

每种媒体类型都定义了默认处理模型。例如,HTML定义了超文本的呈现过程以及每个元素周围的浏览器行为。它与资源方法GET / PUT / POST / DELETE / ...没有任何关系,除了一些媒体类型元素将定义一个过程模型,其类似于“具有href属性的锚元素创建一个超文本链接,当被选中时,在与CDATA编码的href属性对应的URI上调用检索请求(GET)。“

资源方法

与REST相关的其他重要事项是用于执行所需转换的资源方法。许多人错误地将资源方法与HTTP GET / PUT / POST / DELETE方法联系起来。

Roy Fielding从未提及任何关于在哪种情况下使用哪种方法的建议。他所强调的是它应该是统一的接口。如果你决定HTTP POST将用于更新资源 - 而不是大多数人推荐HTTP PUT - 它没关系,应用程序接口将是RESTful。

理想情况下,更改资源状态所需的所有内容都应该是该资源的API响应的一部分 - 包括方法以及它们将保留表示的状态。

应输入REST API,除了初始URI(书签)和适用于目标受众的标准化媒体类型集之外没有任何先验知识(即,任何可能使用API​​的客户都应该理解)。从那时起,所有应用程序状态转换必须由客户端选择服务器提供的选择来驱动,这些选择存在于接收的表示中或者由用户对这些表示的操纵所暗示。转换可以由客户端对媒体类型和资源通信机制的知识来确定(或限制),这两者都可以在运行中(例如,按需代码)进行改进。

[失败在这里意味着带外信息驱动交互而不是超文本。]

在构建RESTful API时,另一件可以帮助您的是基于查询的API结果应该由带有摘要信息的链接列表表示,而不是由原始资源表示的数组表示,因为查询不能代替资源标识。

REST和HTTP不一样!!

很多人更喜欢将HTTP与REST进行比较。REST和HTTP不一样。

REST!= HTTP

但是,由于REST还打算使web(互联网)更加简化和标准化,他主张更严格地使用REST原则。这就是人们试图开始将REST与网络(HTTP)进行比较的地方。Roy fielding在他的论文中没有提到任何实现指令 - 包括任何协议首选项和HTTP。到时候,您正在遵循REST的6个指导原则,您可以将您的接口称为RESTful。

简而言之,在REST架构风格中,数据和功能被视为资源,并使用统一资源标识符(URI)进行访问。通过使用一组简单,定义明确的操作来执行资源。客户端和服务器通过使用标准化接口和协议(通常是HTTP)来交换资源的表示。

资源与其表示分离,以便可以以各种格式访问其内容,例如HTML,XML,纯文本,PDF,JPEG,JSON等。例如,可以使用和使用关于资源的元数据来控制高速缓存,检测传输错误,协商适当的表示格式,以及执行认证或访问控制。最重要的是,与资源的每次交互都是无状态的。

所有这些原则都有助于RESTful应用程序简单,轻量和快速。

参考文献:

restapi是什么意思_什么是REST相关推荐

  1. restapi如何传图片_如何设计restful风格接口

    restful风格接口 URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作. 识别(identify). 表示(represent) .交互(interact with ...

  2. restapi是什么意思_网上整理的对于Rest和Restful api的理解

    一.什么是Rest? REST不是"rest"这个单词,而是几个单词缩写 -- REpresentational State Transfer 直接翻译:表现层状态转移,但这个翻译 ...

  3. restapi是什么意思_简单理解什么是REST和RESTful

    简单理解一 就是用URL定位资源,用HTTP描述操作. 简单理解二 URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作. 官方定义 一种软件架构风格.设计风格,而不是标 ...

  4. restapi是什么意思_用人类语言解释:REST API 与 RESTful API

    API,应用程序接口,也可以叫应用程序界面,或者简称为应用接口.应用程序的设计可以相当复杂,但最终的用户并不需要知道应用程序的内部到底是如何工作的,你只需要给用户提供一些操作接口,再告诉用户怎么用这些 ...

  5. restapi是什么意思_什么是REST API?请解释的通俗一点,它和一般的API有什么区别

    展开全部 REST API是一组关于如何构建Web应用程序API的架构规则.标准或指导,REST API遵循API原则的架构风格.62616964757a686964616fe58685e5aeb93 ...

  6. restapi是什么意思_深入理解什么是RESTful API ?

    前言:最近两年很火爆的网络框架Retrofit,使用它的时候,查看文档会告诉你,要求后台的服务器哥们必须符合REST规范给你设计接口,作为安卓开发工程师来说,我就很奇怪了,REST规范到底是啥?本着极 ...

  7. restapi是什么意思_什么是REST 、RESTful 、RESTful API?

    介绍 自从Roy Fielding博士在2000年他的博士论文中提出Rest(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重 ...

  8. python rest api 连接sdn控制器_基于REST-API的SDN控制器故障恢复机制

    基于 REST-API 的 SDN 控制器故障恢复机制 杨 晨,李 勇,金德鹏 [摘 要] 软件定义网络( SDN )通过可编程的数据平面和逻辑集中的网络控制 器实现网络的灵活可控,然而现有的网络控制 ...

  9. Powershell RESTAPI 访问Office365

    豆子之前对Office365的用户操作一般是通过远程的加载模块,然后创建一个session连接. 比如 $cred = Get-Credential Import-Module MSOnline Se ...

最新文章

  1. 防抖技术 | OpenCV实现视频稳流
  2. UCL葡萄酒(red white wine quality)数据集字段解释、数据导入实战
  3. 格灵深瞳算法团队获得NIST人脸识别竞赛全球第一
  4. 【转载】Linux常用命令1
  5. Mybatis和Spring集成 sessionFactory.openSession() 事务不生效问题
  6. 存储过程之like写法一
  7. spring-quartz
  8. python中双冒号_c++中冒号(:)和双冒号(::)的用法和c/c++ 位域结构体
  9. 焊盘脱落怎么办?莫慌,现在是飞线打圈圈教学时间
  10. 对象变为指定格式的数组
  11. WCF 第十二章 对等网 System.Net.PeerToPeer.Collaboration
  12. bzoj 1661: [Usaco2006 Nov]Big Square 巨大正方形(枚举)
  13. ubuntu find 文件时权限不够
  14. 配置 mysql/mariadb sphinxSE 错误解决 1st column must be bigint to accept 64-bit DOCID
  15. 努比亚 N1 (Nubia NX541J) 解锁BootLoader 并刷入recovery
  16. MySQL Router 8 详解
  17. 计算机网络应用云计算,计算机网络云计算技术应用
  18. matlab合并数据,matlab使用小技巧——数据的拆分与合并
  19. 删除mysql数据库中某表中的某个字段的数据
  20. CURL: CURLE_COULDNT_CONNECT问题探究

热门文章

  1. win10无法启动_Win10硬盘重装后无法启动具体解决步骤
  2. 《重学Java高并发》你管这“破玩意儿”叫锁(没有高并发经验的朋友们看过来,该专栏结合笔者的实战来讲高并发)
  3. 在微型计算机中1mb等于多少字节,1mb的存储容量等于多少字节
  4. Python实现录屏
  5. html怎样实现生成订单,手工创建订单.html
  6. 该如何从 Java 8 升级到 Java 10
  7. java 把List集合转换为json
  8. Windows局域网或PC网线直连中不能被ping通的问题
  9. css3 3d立体三角形展示图片,纯css3实现图片三角形排列
  10. 如何批量设置 Word 文档仅允许批注或修订?