REST API

第一次接触REST API时有些迷惑,后来查阅了一些相关的文章并结合上自己的一些总结,总算对其有粗略的了解。

1. 起源

​ REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。关于他,这里简单介绍一下:他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。这样也不难理解,为什么他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。(毕竟是大佬)。

​ REST,即Representational State Transfer的缩写,中文翻译叫:“表现层状态转化”。从其名字来看的确难以读懂这是个什么东西。而我是这么理解的:对服务器端的API操作等能从URI(统一资源定位符)中体现出来就叫做REST。简单地说:就是能从URI的字段中体现对后端发起何种请求就叫做"表现层状态转化"。也就是实现某URL所代表资源的状态转移。(听起来可能别扭)

2. REST是什么?

对于REST我更愿意把他理解为是一种对HTTP API的一种规范和约束,或者说是一种API设计思想,事实上它本质上也体现了这点。

RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构。

根据 HTTP 标准,HTTP 请求可以使用多种请求方法:

  • HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
  • HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

而REST核心就是能使用HTTP中其中定义的5种HTTP请求方法对应上CRUD 操作。

2.1 对应上CRUD操作

以下是5种HTTP请求方法对应上CRUD 操作:

GET:读取(Read)
POST:新建(Create)
PUT:更新(Update)
PATCH:部分更新(Update)
DELETE:删除(Delete)

也就是说服务程序中的特定操作被映射成为标准的 HTTP 方法——为了消除歧义,而非直接通过GET,POST的方式直接调用后端某些CRUD的数据操作接口。

就像下面这种图一样:

这样约束地话的确可以通过URL和请求方式就能大概知道我们想干什么了。

2.2举例

我想查找ID为1的订单,我就可以通过:

GET  http://example.com/order/1

创建一个新订单可以:

POST http://example.com/order
#在HTTP请求体中发送要添加的订单的信息
{id:1,order:"MIX 8",num:2,...
}

修改数量

PUT http://example.com/order
#PUT为全跟新,所以HTTP请求体中发送要订单全部信息,
#达到覆盖修改
{id:1,order:"MIX 8",num:1,...
}

删除第一条订单:

DELETE http://example.com/order/1

这里只是简单地举个例子,具体看实际情况而定。所以说,REST我更愿意把他理解为是一种对HTTP API的一种规范和约束,或者说是一种API设计思想。

2.3 应该遵循关键原则

当然这些原则其实是来自一篇文章https://www.infoq.cn/article/rest-introduction/,在文章中作者对REST作了总结并对其5条关键原则了做解析。

五条关键原则列举如下:

  • 为所有“事物”定义 ID
  • 将所有事物链接在一起
  • 使用标准方法
  • 资源多重表述
  • 无状态通信

3. 覆盖GET和POST

有些客户端只能使用GETPOST这两种方法。服务器必须接受POST模拟其他三个方法(PUTPATCHDELETE)。这时,客户端发出的 HTTP 请求,要加上X-HTTP-Method-Override属性,从而告知服务器应该使用哪一个HTTP请求方式解析该请求,覆盖POST方法。

POST http://example.com/order/
#在请求体头部添加
X-HTTP-Method-Override: PUT

REST API解析相关推荐

  1. JavaScript 对象所有API解析【2020版】

    写于 2017年08月20日,虽然是2017年写的文章,但现在即将2020年依旧不过时,现在补充了2019年新增的ES10 Object.fromEntries().发到公众号申明原创.若川顺便在此提 ...

  2. java微信开发API解析(二)-获取消息和回复消息

    java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...

  3. Java 调用Google Map Api解析地址,解析经纬度实例

    Java 调用Google Map Api解析地址,解析经纬度实例 使用google地图的反向地址解析功能,提供一个经纬度得到对应地址,或者给出模糊地址,得到经纬度,放在java后台代码中处理,这个使 ...

  4. 使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件

    一个音视频文件是由音频和视频组成的,我们可以通过MediaExtractor.MediaMuxer把音频或视频给单独抽取出来,抽取出来的音频和视频能单独播放: 一.MediaExtractor API ...

  5. SDL开发(一):SDL简介及2.0核心API解析

    文章目录 零. 参考文献 一. 什么是SDL? 1. SDL 库分类 2. SDL 子系统分类 二. SDL2.0核心API解析 1. 初始化函数 SDL_Init() 2. 创建窗口 SDL_Cre ...

  6. 【API解析】微软文本转语音(text-to-speech)官方Demo调用步骤

    [API解析]微软文本转语音(text-to-speech)官方Demo调用步骤 1. 来源 github: MsEdgeTTS 吾爱破解:微软语音助手免费版,支持多种功能,全网首发 微软Demo: ...

  7. React16常用api解析以及原理剖析

    React16常用api解析以及原理剖析 目录 Vue 与 React 两个框架的粗略区别对比 react 16 版本常见 api react 生命周期 react 事件机制 react.Compon ...

  8. mediawiki java api_维基百科 MediaWiki API 解析

    使用开放的 API 做一个自己的小项目,是一个很好的学习方法.但好像开放的 API 选择并不多.这里给大家多一个选择,简单介绍一下维基百科使用的 MediaWiki API. 简介 先简单介绍几个容易 ...

  9. 在Java 8中使用Stream API解析文件

    Java 8中到处都有流.只需四处看看,可以肯定地找到它们. 它也适用于java.io.BufferedReader . 使用Stream API在Java 8中解析文件非常容易. 我有一个要读取的C ...

最新文章

  1. 一文提升你对深度学习分布式训练的整体认知!
  2. springboot中使用redis详解
  3. 数学建模——TOPSIS综合评价模型Python代码
  4. 完整版使用Shell脚本在多个服务器同时实现Mysql建表语句和删除表
  5. c++ string 长度限制_String 有多长?
  6. java8新特性简述
  7. 使用git checkout命令切换到指定的commit
  8. java逆向生成代码有哪些_利用mybatis逆向工程生成代码
  9. 被约谈后,丰巢道歉并让步了......
  10. python读取xml文件内容_python读取xml文件
  11. ./configure:command not found 解决方法
  12. 桌面支持--outlook会议邀请(选择可选参加的领导)
  13. [学习]啦啦外卖定位修复,商家经纬度保存修复
  14. 联发科MT2503D处理器详细参数介绍
  15. 金蝶shr动态列表展示自定义字段
  16. 大学计算机实验教程制作电子小报,word中电子小报怎么做?word电子小报的图文教程...
  17. 判断字符串中哪个字符出现的次数最多?
  18. 互联网快讯:永辉拟打造数字化零售;猿辅导,掌门教育积极布局素质教育
  19. 如何解决学习进度缓慢?
  20. Linux赋予用户读写权限

热门文章

  1. android 获得屏幕的大小
  2. 6-1 水晶报表技术(上)
  3. linux删除大量文件时遇 -bash: /bin/rm: Argument list too long 错误
  4. Java将一段逗号分割的字符串转换成一个数组(亲测)
  5. 深入理解 Ribbon-Hystrix-Feign 三者之间的关系(一)
  6. Graphviz安装配置及入门(windows安装亲测)
  7. PHP处理跨域:header(AccessControlAllowOrigin:星)允许所有来源访问;后端Curl请求转发
  8. Bug同样的shell脚本在win与linux系统下执行不一样
  9. php连接mysql的区别吗_php连接mysql之mysql_connect()与mysqli_connect()的区别
  10. mongodb修改数据语句_mongodb之一些简单的增删改查语句