文章目录
1 了解API
API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。 [1] 目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问原码,或理解内部工作机制的细节。(引用自百度百科)
举个例子:比如我们去肯德基买个汉堡,不需要知道这个汉堡是怎么做出来的,你付过钱之后就能得到一个汉堡。
- api提供者(肯德基): api说明包括做汉堡(),卖汉堡(钱)。。。
- api使用者(顾客):我现在需要用到汉堡,我自己不需要磨面,买肉,买菜做汉堡。只需要调用肯德基的卖汉堡方法(对外提供的api),就可以获得汉堡。
- 使用过程:查看api接口说明
- 返回结果:卖汉堡能够返回汉堡,这是我需要的api
- 查看要求:提供钱参数,我有钱
- 引包,调用这个方法,我就拥有汉堡这个属性了。
api作用:可以方面程序的扩展性,多人合作开发
2 什么是REST
REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。(引用自百度百科)
表述性状态传递?黑人问号脸?有时候翻译的坏处就是这样,所以学好英文
Resource:资源,即数据。
Representational:某种表现形式,比如用JSON,XML,JPEG等;
State Transfer:状态变化。通过HTTP动词实现。
REST描述的是在网络中client和server的一种交互的形式,REST不是一种协议本身没有太大的作用,实用的是如何设计 REST风格的接口(REST API)
API的风格是REST的。
总结:
RESTful是一个风格、一个规范,是不仅仅绑定在HTTP的,只不过目前HTTP是唯一与REST相关联的实例,HTTP实现了REST
REST的全称是Representational State Transfer 表现层状态转移
表现层:
将所有的URI都看作是资源,无论是txt,html还是pdf,其实只要是同一个URI,那么资源都是一样的,仅仅只是“呈现”出来的形式不一样。
状态转移
标准HTTP协议是无状态的,这也就意味着服务器和客户端并不知道各自的实际情况,也就不可能有上下文关系。必须得有方法能使客户端与服务器发生状态交互,这就是状态转化。比如你使用GET才能知道服务器上新增加了文件,你用DELETE直接删除文件等。因为这种转化是建立在表现层之上的,所以就是"表现层状态转化"。
综述:
通过HTTP协议中的GET,POST,PUT和DELETE方法对某一个URI资源进行交互的一种软件设计模式。
2.1 为什么要采用REST API风格
功能:前后端进行通信。
以前的网页都是前端和后端融在一起的,比如之前的JSP等。在之前的PC时代问题没有啥问题,但是近年来移动互联网快速发展,各种前端框架特别多,如果我们还是前后端不分离的话,一个是学习成本特别高,一个是代码的重复率太高导致我们做了很多重复的东西,代码的复用率不高,用接口的方式可以让代码的复用率变的高些。
过去方式:
普通的接口方式,比如你要从你的网站上面得到一个城市的天气,以前有可能你得这么设计:
https://xxx/getWeather?city=深圳
你这样就得传两个参数给后台 get参数 city参数,这样看起来就很臃肿。
现在调用Rest Api的方式:
GET https://xxx/weathers/深圳
只需要传一个参数给后台city参数
我们的URI中使用的是名词,而不是动词。通过HTTP动词来实现资源的跳转
3 RESTful API的使用场景
在当今的互联网应用的前端展示媒介很丰富。有手机、有平板电脑还有PC以及其他的展示媒介。那么这些前端接收到的用户请求统一由一个后台来处理并返回给不同的前端肯定是最科学和最经济的方式。RESTful API就是一套协议来规范多种形式的前端和同一个后台的交互方式。RESTful API由后台也就是SERVER来提供前端来调用。前端调用API向后台发起HTTP请求,后台响应请求将处理结果反馈给前端。
4 RESTful API结构的系统
4.1 URI
即统一资源标识符,服务器上每一种资源,比如文档、图像、视频片段、程序 都由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。
4.2 HTTP动词
常用的HTTP动词有下面五个
- GET(SELECT):从服务器取出资源(一项或多项)。
- POST(CREATE):在服务器新建一个资源。
- PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
- PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)
- DELETE(DELETE):从服务器删除资源。
4.3 RESTful架构
服务器上每一种资源,比如一个文件,一张图片,一部电影,都有对应的url地址,如果我们的客户端需要对服务器上的这个资源进行操作,就需要通过http协议执行相应的动作来操作它,比如进行获取,更新,删除。
4.4 Restful 风格
URI里面使用的是名词而且不是动词,推荐使用复数,通过HTTP动词来实现资源的跳转。
错误的
/getOrders
listCitys
/getWeathers?city=深圳
正确的
GET /orders/1 :返回订单编号为1的订单
POST /orders :增加一个订单
Delete /orders/1 :删除一个订单编号为1的订单
PUT /orders/1 :更新订单编号为1的订单
保证方法里面只做一件事,不会对资源状态有所改变。比如下面这样是不允许的
GET /updateOrder?id=1
使用正确的HTTP Status Code 表示返回的请求状态。比如
{“code”:“200”}
以上就是如何设计一个简单的RESTful API结构系统的示例。
Tips:
前后台的数据传输可以用json,可以用xml传输,我还是比较倾向于json传输比较方便
比如请求一个城市的温度,用xml返回结果是这样
<city>
<name>深圳</name>
<temperature>26</temperature>
<code>200</code>
</city>
用json返回就是这样
{
"city":
{
"name":"深圳",
"temperature":"26",
"code":200
}
}
参考: https://zhuanlan.zhihu.com/p/97978097
参考:https://www.jianshu.com/p/6baf8554b3f4?from=timeline&isappinstalled=0