# restful api [TOC] >[success] restful是一种软件设计风格,主要用于客户端与服务器端的交互,一般来说restful基于http/https协议,通过某一个唯一标识符(URI)请求对应的服务器资源 ![](https://i.loli.net/2019/03/22/5c9474e7ad430.png) ## restful作用 >[info] 为前端(APP端/PC浏览器端/微信端等等)提供一套简单并且统一的请求方式来从后端(服务器)获取需要的数据 > 提供接口的方式:基于http/https协议 > 返回接口数据的形式主要为:JSON和XML ## 资源路径 在restful api中每个资源路径都对应一个唯一的资源,所以规定网站不能有动词,只能有名词,并且一般来说为重数 ``` http://api.local.com/api/v1/movies----表示电影资源 get获取多条记录 post 添加 http://api.local.com/api/v1/images/1 ----表示图片资源 获单条 修改 删除 get put delete ``` ## Http动词 ``` POST /articles -- 创建文章内容 GET /articles -- 获取全部 GET /articles/1 -- 获取主键id为1的文章 PUT /articles/1 -- 修改参数为1的文章 DELETE /articles/1 -- 删除参数为1的文章 ... 协议还有很多,常用的就增删改查 HEAD:获取资源的元数据。 OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。 这二个个不常用,但是也要记住下,也是比较有用的 ``` ## 过滤信息 如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。 下面是一些常见的参数。 ``` limit=10:指定返回记录的数量 offset=10:指定返回记录的开始位置。 page=2&per_page=100:指定第几页,以及每页的记录数。 sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。 animal_type_id=1:指定筛选条件 ``` 参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如,GET /zoo/ID/animals 与 GET /animals?zoo\_id=ID 的含义是相同的。 ## 状态码 | 状态码 | 含义 | 说明 | | --- | --- | --- | | 200 | OK | 操作成功, 并返回数据 get | | 201 | CREATED | 新建成功 post | | 202 | Accepted | 修改成功 put | | 204 | NO CONTENT | 删除成功 delete | | 400 | BAD REQUEST | 请求语法错误 | | 403 | Forbidden | 请求没有权限的资源 | | 5xx | | 服务器端错误 |