了解 RESTful API

栏目: 后端 · 前端 · 发布时间: 6年前

内容简介:REST,即 REpresentational State Transfer,其主语是 Resource,但是被省略掉了,所以全称是:Resource Representational State Transfer。按照字面意思来理解就是:资源在网络中以某种表现形式进行状态转移,这样的直译,我相信绝大多数看了都是困惑的,用人人都能理解的话来说,就是REST 是一种设计风格(不是标准),是一组架构的约束条件和原则,满足这些约束条件和原则的应用程序或设计就是 RESTful。其次,REST 是面向资源的,而资源

REST,即 REpresentational State Transfer,其主语是 Resource,但是被省略掉了,所以全称是:Resource Representational State Transfer。按照字面意思来理解就是:资源在网络中以某种表现形式进行状态转移,这样的直译,我相信绝大多数看了都是困惑的,用人人都能理解的话来说,就是 用 URL 来定位资源,用 HTTP 来描述操作 ,详细展开就是:

  • 看 URL 就知道要什么
  • 看 HTTP method 就知道干什么
  • 看 HTTP status code 就知道结果如何

REST 是一种设计风格(不是标准),是一组架构的约束条件和原则,满足这些约束条件和原则的应用程序或设计就是 RESTful。其次,REST 是面向资源的,而资源是通过 URL 进行暴露的。理解这两点对认识 REST 和 RESTful 非常重要。

那我们的 API 应该如何设计,才能满足 RESTful API 的要求呢?

HTTP 动词

对资源的具体操作类型,应该由 HTTP 动词表示,具体如下(括号里是对应的 SQL 命令):

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

还有两个不常用的 HTTP 动词:

  • HEAD:获取资源的元数据
  • OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的

过滤数据

如果查询出的数据很多,API 应该提供参数,将数据的过滤结果进行返回,常见的过滤参数如下:

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

参数的设计是允许存在冗余的。

状态码

服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词):

  • 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
  • 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
  • 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
  • 204 NO CONTENT - [DELETE]:用户删除数据成功。
  • 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
  • 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
  • 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
  • 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
  • 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
  • 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
  • 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
  • 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

错误处理

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

{
    error: "Invalid API key"
}
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java数据结构和算法

Java数据结构和算法

拉佛 / 计晓云 / 中国电力出版社 / 2004-02-01 / 55.00元

《Java数据结构和算法》(第2版)以一种易懂的方式教授如何安排和操纵数据的问题,其中不乏一些难题:了解这些知识以期使计算机的应用获得最好的表现。不管使用何种语言或平台,掌握了数据结构和算法将改进程序的质量和性能。 《Java数据结构和算法》(第2版)提供了一套独创的可视讨论专题用以阐明主要的论题:它使用Java语言说明重要的概念,而避免了C/C++语言的复杂性,以便集中精力论述数据结构和算法。经......一起来看看 《Java数据结构和算法》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具