如何设计RESTful API

  • 资源路径(入何规划资源路径)
  • HTTP动词(请求方式 GET/POST...)
  • 过滤信息(分页,查询操作的时候进行信息过滤)
  • 状态码(服务器端响应什么样的状态码)
  • 错误处理(如果传入服务器端的参数有问题)
  • 返回结果(不同请求的返回结果)

资源路径

  在RESTful架构中,每个网址代表一种资源,所以网址中不能有动词,只能有名词。一般来说API中的名词应该使用复数。

  例如:有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,它的路径应该设计成:  

https://api.example.com/v1/zoos    //动物园资源
https://api.example.com/v1/animals  //动物资源
https://api.example.com/v1/employees  //雇员资源

  https:协议头。v1:关于API的版本号(还可以加到HTTP请求头中)。zoos:动物园资源(复数)。

  动物园只有一个,所以没有指明动物园的ID。

HTTP动词

  对于资源的操作(CURD),由HTTP动词(谓词)表示。

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

  put更新资源后,服务器端会返回整个资源。而patch更新完之后只会返回跟新的属性。

  举例:

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 :服务器成功返回用户请求的数据,该操作是幂等的
  • 201 CREATED :新建或修改数据成功
  • 204 NO CONTENT :删除数据成功
  • 400 BAD REQUEST :用户发出的请求有错误,该操作是幂等的
  • 401 Unauthorized :表示用户没有认证,无法进行当前操作
  • 403 Forbidden :表示用户访问时被禁止的
  • 422 Unprocesable Entity :当创建一个对象时,发生一个验证错误
  • 500 INTERNAL SERVER ERROR :服务器发生错误,用户将无法判断发出的请求是否成功

错误处理

  如果状态码是4xx或者5xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值。例如:

{
"error" : "参数错误"
}

返回结果

  针对不同操作,服务器向用户返回的结果应该符合以下规范:

  • GET/collections :返回资源对象的列表(数组)
  • GET/collections/identity :返回单个资源对象(指定的标识符(identity)对应的对象,不存在返回404状态码)
  • POST/collections :返回新生成的资源对象(创建对象的时候)
  • PUT/collections/identity :返回完整的资源对象
  • PATCH/collections/identity :返回被修改的属性
  • DELETE/collections/identity :返回一个空文档

[RESTful] 设计要素的更多相关文章

  1. RESTful 设计理论

    RESTful 设计: 1.协议通信协议:https 2.域名部署在API专用域名下,除非API很简单(https://www.example.com/api)https://api.example. ...

  2. Restful设计思想

    1.REST的架构设计 代表性状态传输(Representational State Transfer,REST)在Web领域已经得到了广泛的接受,是基于SOAP和Web服务描述语言(Web Serv ...

  3. django RESTful设计方法

    1. 域名 应该尽量将API部署在专用域名之下. https://api.example.com 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下. https://example.org ...

  4. RESTful设计方法

    REST REST,即Representational State Transfer的缩写.维基百科称其为“具象状态传输”,国内大部分人理解为“表现层状态转化”. RESTful是一种开发理念.维基百 ...

  5. php Restful设计

    1.restful是基于资源的,面向资源架构风格(一个链接,一张图.一个文本等等) 2.restful的http协议 2.1 url: 2.1.1 port 服务端口,默认为80 2.1.2 path ...

  6. restful设计参考

    https://www.cnblogs.com/pyspark/p/8599210.html 以下查阅多处文档,思考总结: 所谓restful规范代表一种理想状态,首先对此种规范表示赞同,但应不忘实事 ...

  7. RESTful设计中的常见疑问

    最近写了几个有关RESTful的API相关内容,也谈谈对常见问题的自己的理解. 什么是RESTful 详情可以看http://www.ruanyifeng.com/blog/2011/09/restf ...

  8. Java Web学习(八)RESTful设计

    一.RESTful设计风格 REST :指的是一组架构约束条件和原则. RESTful :满足这些约束条件和原则的应用程序或设计就是 . REST 原则 客户端和服务器之间的交互在请求之间是无状态的. ...

  9. 公司正在开发BI系统?这些设计要素请了解一下!

    ​1. 数据源 第一个要素数据源.企业中的BI工具可能承接上游数据中台或者其他产品输出的结果,作为输入的数据源,每个业务方用的数据库都可能是不一样的,所以可接入数据源的种类决定的一个BI工具的可用性, ...

随机推荐

  1. allure--下的各装饰器的翻译及自己的总结

    翻译图-快捷键 红色字体感觉用的会比较多,起码现在感觉应该是比其他的多一点 lable应该没有什么特殊的用法,只是对下面方法的一个汇总(或者可以这么说,下面的方法是lable更具体的实现) sever ...

  2. spring中集成hibernate

    1.hibernate框架是什么? (1)hibernate对jdbc进行的封装 (2)开源的轻量级框架. 2.hibernate思想:ORM(对象关系映射) (1)让实体类和数据库中的表一一对应(表 ...

  3. Android屏幕适配框架-(今日头条终极适配方案)

    在Android开发中,屏幕适配是一个非常头痛的问题,因而为了去进行屏幕适配,作为程序员,是呕心沥血,历经磨难,哈哈 我们之前做屏幕适配一般都会用到一下两种方式: 第一种就是宽高限定符适配,什么是宽高 ...

  4. scrapy 中crawlspider 爬虫

    爬取目标网站: http://www.chinanews.com/rss/rss_2.html 获取url后进入另一个页面进行数据提取 检查网页: 爬虫该页数据的逻辑: Crawlspider爬虫类: ...

  5. FPM四:用OVP做查询跳转到明细

    前面做了查询的UIBB配置,在这边可以直接复用,查询的feeder class也就自动复用了. 1.给查询的feeder class添加接口,继续继承form的接口. 2.挨个实现每个方法,即使是用不 ...

  6. Docker 容器技术

    前言: 之前感觉Docker是一种小虚拟机,docker和KVM虚拟机之间有什么区别.联系.可以应用在什么样的生产环境? 一.Docker是什么以及和KVM的区别 1.docker概念? Docker ...

  7. BinDiff安装使用教程

    一.说明 大概一两年前在<漏洞战争:软件漏洞分析精要>听到bindiff(和补丁比较法),但一直都没去使用.前两天再回头看书感觉需要使用一翻,整个过程下来还是遇到了一些问题,值得记录一番. ...

  8. Python3+Appium安装使用教程

    一.安装 我们知道selenium是桌面浏览器自动化操作工具(Web Browser Automation) appium是继承selenium自动化思想旨在使手机app操作也能自动化的工具(Mobi ...

  9. 通讯录管理系统(C语言)

    /* * 对通讯录进行插入.删除.排序.查找.单个显示功能 */ #include <stdio.h> #include <malloc.h> #include <str ...

  10. 出发a链接里面的div,a链接不进行跳转

    HTML <a href="http://www.baidu.com" style="display: inline-block; width: 100%; hei ...