Restful API实战 过程记录

开始于2017-06-10 

另外注意添加 《Http请求状态码》


1、相关知识介绍
    本质:一种软件架构风格
    核心:面向资源
    
    解决的问题
降低开发的复杂性
提高系统的可伸缩性

    设计概念和准则
网络上所有的事物都可以被抽象为资源
每一个资源都有唯一的资源标识,对资源的操作不会改变这些标识
所有的操作都是无状态的

    HTTP协议
组成格式:请求行、消息报头、请求正文
    请求行
格式如下:Method Request-URI HTTP-Vsersion CRLF

GET /HTTP/1.1 CRLF

    请求方法
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取有Request-URI所标识的资源的响应消息报头(不需要主体信息)
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和请求

    HTTP协议-响应
组成格式:状态行、消息报头、响应正文
HTTP-VERSION Status-Code Reason-Phrase CRLF
HTTP/1.1 200 OK

200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源部不存在
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求

    RESTful架构与其他架构的区别
SOAP WebService
WebService是一种跨编程语言和跨操作系统平台的远程调用技术

WebService通过HTTP协议发送请求和接收结果时采用XML格式封装,
并增加了一些特定的HTTP消息头,这些特定的HTTP消息头和XML内容格式就是SOAP协议

效率和易用性
SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP处理方面的性能有所下降。
同时在易用性方面以及学习成本上也有所增加。

RESTful由于其向面向资源接口设计以及操作抽象简化了开发者的不良设计,
同时也最大限度地利用了Http最初的应用协议设计理念。

安全性
RESTful对于资源型服务接口来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。

SOAP的成熟性可以给多开发语言的,对于安全性要求较高的接口设计带来便利。
所以我觉得纯粹说什么设计模式将会占据主导地位没有什么意义,关键还是看应用场景。


    如何设计RESTful API
资源路径(URI) 状态码
HTTP动词 错误处理
过滤信息 返回结果

资源路径
在RESTful架构中,每个网址代表一种资源,所以在网址中不能有动词,只能有名词。
   一般来说API中的动词应该使用复数。
举例:一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成:
   https://api.example.com/v1/zoos    //动物园资源
   https://api.example.com/v1/animals    //动物资源
   https://api.example.com/v1/employes    //雇员资源

HTTP动词
对于资源的操作(CURD),由HTTP动词(谓词)表示。
   GET:从服务器取出资源(一项或多项)。
   POST:在服务器新建一个资源。
   PUT:在服务器更新资源(客户端提供改变后的完整资源)。
   PATCH:在服务器更新资源(客户端提供改变的属性)。
   DELETE:从服务器删除资源。
举例:
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息
DELETE /zoos/ID:删除摸个动物园

过滤信息
如果记录数量很多,服务器不可能都将它们返回给用户
API应该提供参数,过滤返回结果

?offset=10; 指定返回记录的开始位置
?page=2&per_page=100 指定第几页,以及每页的记录数。
?sortby=name&order=asc 指定返回结果排序,以及排序顺序。
?animal_type_id =1 指定筛选条件
状态码
服务器向用户返回的状态码和提示信息,使用标准HTTP状态码

200 OK 服务器成功返回用户请求的数据,该操作是幂等的。
在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。
幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。
这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。
例如,“setTrue()”函数就是一个幂等函数,无论多次执行,
其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现.
201 CREATED 新建或修改数据成功
204 NO CONTENT 删除数据成功
400 BAD REQUEST 用户发出的请求有错误,该操作时幂等
401 Unauthorized 表示用户没有认证,无法进行当前操作
403 Forbidden表示用户访问是被禁止的
422 Unprocesable Entity当作一个对象时,发生一个验证错误
500 INTERNALSERVER ERROR 服务器发生错误,用户将无法判断发出的请求是否成功

错误处理
如果状态码是4xx或者5xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可
{
  "error":"参数错误"
}
返回结果
针对不同操作,服务器向用户返回的结果应该符合以下规范:
GET /collection:返回资源对象的列表(数组)
GET /collections/identity:返回单个资源对象
POST /collections:返回新生成的资源对象
PUT /collections/identity:返回完整的资源对象
PATCH /collections/identity 返回被修改的属性
DELETE /collections/identity:返回一个空文档

2、DHC client插件安装(Restful API测试)
http://chromecj.com/web-development/2015-08/549.html
打开chrome ---> 设置 ---> 扩展程序  --> 拖拽DHC-REST-HTTP-API-Client_v0.8.1.1.crx到扩展程序 
--> 如果提示只能通过应用商店添加 --> 翻墙 --> 搜索dhc client-->未找到,安装失败使用,直接使用Postman工具


3、开发环境搭建
下载UPUPW.NET继承环境