RESTful规范

RESTful规范

Posted by Ysy on November 23, 2017

##前言

RESTful规范现在是应用最广泛的一种api规范,市面上还有GraphQL等规范,但是感觉相比总有一些缺点,例如无法做缓存等等

域名

域名配置,一般api都要自己配置二级域名

http://api.ysyydz.cn

版本

正常情况是将API的版本号放入URl

https://localhost:5000/v1/

有的也会放在header中

Accept: vnd.example-com.foo+json; version=1.0

但是这种感觉不太好

HTTP方法

每种资源的具体操作都有具体的实现方法

常用方法

GET(SELECT):从服务器取出资源(一项或多项)
POST(CREATE):在服务器新建一个资源
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)
DELETE(DELETE):从服务器删除资源

非常用方法

PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)
HEAD:获取资源的元数据
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的

正确示范

获取服务器列表(GET方法)
curl http://localhost:5000/services

增加服务器(POST方法)
curl -d "ip=127.0.0.1&passwd=123456" http://127.0.0.1:8080/services

删除服务器(DELETE)
curl -X DELETE http://127.0.0.1:8080/services/<serve_id>

路径

网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的”集合”(collection),所以API中的名词也应该使用复数

获取服务器列表
curl http://localhost:5000/services

获取单个服务器
curl http://localhost:5000/devices/<device_id>

增加服务器
curl -X POST -d "ip=127.0.0.1&passwd=123456" http://127.0.0.1:8080/services

状态码

状态码对应着各种错误,正常来说,状态码即代表所返回的错误信息

200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
204 NO CONTENT - [DELETE]:用户删除数据成功。
301 永久重定向
302 临时重定向
400 用户发出的请求有错误,服务器没有进行新建或修改数据的操作(一般是缺少参数,例如服务端强制三个参数。前端传了两个)
401 Unauthorized - 没有登录
403 登录但是没有权限
404 没有这个api
422 暂时用作自定义错误

错误返回

对于自定义错误需要返回统一的错误格式 例如登录

{
    "message": "账号或密码不正确,请您核实",
    "errcode": 422,
    "Content-Type": "text/html"
}