本质:一种软件架构风格
核心:面向资源设计的API
解决问题:
例如:设计一套API,为多个终端服务。
设计概念和准则
资源:网络上的一个实体、具体信息。
RESTful 与HTTP协议操作无关,但是它是按照HTTP的思想进行设计的,所以有必要知道HTTP
参考官方文档:https://tools.ietf.org/html/rfc2616
schema://host[:port]/path[?query-string][#author]
请求行格式: Method Request-URI HTTP-Version CRLF
如: GET/HTTP.1.1 CRLF
GET : 请求获取Request-URI 所标识的资源
POST :在Request-URI 所标识的资源后附加新的数据
HEAD : 请求获取由Request-URI所标识的资源的响应消息报头
PUT : 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE :请求服务器删除Request-URI所标识的资源
OPTIONS : 请求查询服务器性能,或者查询与资源相关的选项和需求
对资源的操作:创建、编辑、请求、删除
状态行格式:HTTP-Version Status-Code Reason-Phrase CRLF
如: HTTP/1.1 200 OK
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unanthorized //服务器收到请求,但是服务器拒绝提供服务
404 Not Found //请求资源不存在
500 Internal Serval Error //服务器发生不可预期的错误
503 Server Unavailable // 服务器当前不能处理客户端的请求
API 的开发方式不止一种,另一种比较流行的开发方式是SOAP WebService。
WebService 是一种跨编程语言和跨操作系统平台的远程调用技术。其通过HTTP协议发送请求和接收结果时采用XML格式封装,并增加了一些特定的HTTP消息头,这些特定的HTTP消息头和XML内容格式就是SOAP协议。
资源路径(URI):RESTful的核心是面向资源,如何规划资源路径很重要
HTTP动词(请求方式):如get,post,delete,put
过滤信息:例如获取资源列表时有分页操作/查询操作,这时要合理分配过滤信息,过滤信息设置太多,有可能会违反RESTful API 关于URI方面的限定。
状态码:当客户端发送一个请求时,服务端应当响应什么状态码
错误处理:如当发现客户端传入的参数有问题时,该返回什么样的状态信息。
返回结果:如POST资源的时候,需要返回一个资源实例;GET资源列表时,需要返回一个资源数组;
在RESTful架构中,每个网址代表一个资源,所以网址中不能有动词,只能有名词。一般而言,API中的名词应该使用复数。例如,使用users反映用户资源的URI,而不是使用user。
例如:有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,那么它的资源路径应设计成如下样子。
https://api.example.com/v1/zoos //动物园资源。使用https协议头;加入v1版本号,因为以后可能会更改api。版本号的加入有两种做法,一种是加入到地址中,另一种是加入到HTTP请求头中;zoos复数
https://api.example.com/v1/animals //动物资源
https://api.example.com/v1/employees //雇员资源
对资源的操作有创建、读取、更新、删除(CURD),由HTTP动词表示。
例如:
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状态码
如果状态码是4xx或5xx,就应该向用户返回出错信息。一般而言,返回的信息中将error作为键名,出错信息作为键值即可,例如:
{
"error":"参数错误"
}
针对不同操作(如GET,POST),服务器向用户返回的结果应该符合以下规范:
名为: 基于REST的Web服务客户端
先下载: http://chromecj.com/web-development/2015-03/401.html
或在谷歌商店 :https://chrome.google.com/webstore/detail/rest-web-service-client/ecjfcmddigpdlehfhdnnnhfgihkmejin?hl=zh-CN
然后安装。
安装PHP环境集成包 XAMPP 或 upupw
添加虚拟主机,以及取消跨站目录限制 httpd-vhosts.conf
文件中 找到添加的域名,将php_admin_value xxx
这句开头加入井号进行注释
在数据库中新建2张表:
添加.htaccess Apache重写文件
之后就可以在IDE中进行相应的开发编码工作。
当然,处理RESTful API设计思想,还有最近流行的GraphQL,它是一种API查询语言,其将所见即所得的思想引入,能帮助提升开发的体验与应用的性能。(参考:http://graphql.cn/ )