[学习笔记] RESTful API 设计指南 笔记整理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[学习笔记] RESTful API 设计指南 笔记整理相关的知识,希望对你有一定的参考价值。

一、协议

API与用户的通信协议==>HTTPs协议

二、域名

  • 专用域名:https//api.ex.com
  • 主域名(api简单):https//ex.com/api/

三、版本

版本号放入URL:https://api.ex.com/v1/

版本号放入HTTP头信息:不如URL直观方便

四、路径(endpoint)

表示API的具体网址

网址代表资源==只能用名词==名词与数据库表格名对应-->表为集合所以名词应为复述

案例:动物园(zoo)的api,包括动物和雇员信息

//路径设计
https://api.ex.com/v1/zoos
https://api.ex.com/v1/animals
https://api.ex.com/v1/employees

 

五、HTTP动词

表示对资源的操作类型

  • 常用HTTP动词
GET(SELECT)//从服务器取出资源(一项或多项)
POST(CREATE)//在服务器新建资源
PUT(UPDATE)//在服务器更新资源(客户端提供改变后的完整资源)
PATCH(UPDATE)//在服务器更新资源(客户端提供改变的属性)
DELETE(DELETE)//从服务器删除资源)
  • 不常用HTTP动词
HEAD //获取资源的元数据
OPTIONS //获取信息,客户端可更改资源的哪些属性
  • 实例
GET /zoos //列出所有动物园
POST /zoos //新建一个动物园
GET /zoos/ID //获取某个指定动物园的信息
PUT /zoos/ID //更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID  //更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID //删除某个动物园
GET /zoos/ID/animals //列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID //删除某个指定动物园的指定动物

六、过滤信息(Filtering)

记录数量过多时API提供参数返回过滤结果

常见参数

?limit=10 //指定返回记录的数量
?offset=10 //指定返回记录的开始位置
?page=2&per_page=100 //指定第几页,及每页记录数
?sortby=name&order=asc //指定返回结果按照哪个属性排序,以及排序顺序
?animal_type_id=1 //指定筛选条件

 

ps:参数设计允许API路径和URL参数有重复

  • GET /zoo/ID/animals 等价于 GET /animals?zoo_id=ID

七、状态码(Status Codes)

服务器向用户返回状态码和提示信息

常见案例[方括号内为该状态码对应的HTTP动词]

200 OK - [GET] //服务器成功返回用户请求的数据,幂等操作
201 CREATED - [POST/PUT/PATCH] //用户新建或修改数据成功
202 Accepted - [*] //一请求已进入后台排队(异步任务)
204 NO CONTENT - [DELETE] //用户删除数据成功

400 INVALID REQUEST - [POST/PUT/PATCH] //用户请求有错误,服务器没有新建和修改,幂等操作
401 Unauthorized - [*] //用户无权限(令牌、用户名、密码错误)
403 Forbidden - [*] //用户得到授权但访问禁止
404 NOT FOUND - [*] //用户请求的记录不存在,服务器无操作,幂等操作
406 Not Acceptable - [GET] //用户请求的格式不可得,如没有JSON格式只有XML
410 Gone - [GET] //用户请求资源被永久删除,无法再得
422 Unprocesable entity - [POST/PUT/PATCH] //创建一个对象发生验证错误
500 INTERNAL SERVER ERROR - [*] //服务器发生错误,不能判断请求是否成功

 

八、错误处理(Error handling)

状态码为4XX时候向用户返回出错信息

该信息将error为键名,出错信息为键值

{
    error:"Invalid API key/无效的API密钥"
}

九、返回结果

对不同操作的返回结果规范

GET /collection //返回资源对象的列表(数组)
GET /collection/resource //返回单个资源对象
POST /collection //返回新生成的资源对象
PUT /collection/resource //返回完整的资源对象
PATCH /collection/resource //返回完整的资源对象
DELETE /collection/resource //返回一个空文档

 

十、Hypermedia API (超媒体)

返回结果提供指向其他api方法的链接,使用户无需查文档

案例:用户向api.example.com根目录发送请求返回结果的文档

{
    "link:"{
       "rel":"collection https://www.ex.com/zoos",  
       "href":  "https://api.example.com/zoos",
       "title": "List of zoos",
       "type":  "application/vnd.yourformat+json"
        }    
}

文档说明:

  • link属性,用户读取该属性知道下一步做什么
  • rel:该api与当前网址的关系
  • href:API路径
  • title :API标题
  • type:返回类型

案例:GitHub-API

// 访问api.github.com 返回所有可用api的网址列表
{
 "current_user_url": "https://api.github.com/user",
  "authorizations_url": "https://api.github.com/authorizations",
  // ...
}


//从列表可看出想获取当前用户信息应访问 https://api.github.com/user
//获取结果:提示信息及文档网址

{
  "message": "Requires authentication",
  "documentation_url": "https://developer.github.com/v3"
}

 

十一、其他

  • API的身份认证应使用OAuth2.0框架
  • 服务器返回数据格式最好用JSON

 

文章学习来源 http://www.ruanyifeng.com/blog/2014/05/restful_api.html


以上是关于[学习笔记] RESTful API 设计指南 笔记整理的主要内容,如果未能解决你的问题,请参考以下文章

Django后端开发学习笔记Django REST Framework入门

Django后端开发学习笔记Django REST Framework入门

RESTful API 设计指南[转]

restful api设计指南

RESTful API 设计指南

RESTful API 设计指南