了解 RESTful API

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

内容简介: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"
}
复制代码

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

查看所有标签

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

Essential ActionScript 3.0

Essential ActionScript 3.0

Colin Moock / Adobe Dev Library / June 22, 2007 / $34.64

ActionScript 3.0 is a huge upgrade to Flash's programming language. The enhancements to ActionScript's performance, feature set, ease of use, cleanliness, and sophistication are considerable. Essentia......一起来看看 《Essential ActionScript 3.0》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具