# 概述

RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。

核心是面向资源:对象的单个实例。 例如,一只动物。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个 URL(统一资源定位符)指向它,每种资源对应一个特定的 URL。要获取这个资源,访问它的 URL 就可以,因此 URL 就成了每一个资源的地址或独一无二的识别符。

主要有请求方式、状态码、URL 规范、传参规范

# 请求方式

GET   (SELECT):从服务器取出资源(一项或多项)
POST  (CREATE):在服务器新建一个资源
PUT   (UPDATE):在服务器更新资源(客户端提供改变后的完整资源)
PATCH (UPDATE):在服务器更新资源(客户端提供改变的属性)
DELETE(DELETE):从服务器删除资源
  • 还有两个不常用的
HEAD   :获取资源的元数据
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的

# 状态码

1xx 信息,请求收到,继续处理。范围保留用于底层HTTP的东西,你很可能永远也用不到。
2xx 成功,行为被成功地接受、理解和采纳
3xx 重定向,为了完成请求,必须进一步执行的动作
4xx 客户端错误,请求包含语法错误或者请求无法实现。范围保留用于响应客户端做出的错误,例如。他们提供不良数据或要求不存在的东西。这些请求应该是幂等的,而不是更改服务器的状态。
5xx 范围的状态码是保留给服务器端错误用的。这些错误常常是从底层的函数抛出来的,甚至
开发人员也通常没法处理,发送这类状态码的目的以确保客户端获得某种响应。
当收到5xx响应时,客户端不可能知道服务器的状态,所以这类状态码是要尽可能的避免。
  • 以下是常见状态码
200:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
201:用户新建或修改数据成功。
202:表示一个请求已经进入后台排队(异步任务)
204:用户删除数据成功。
205:重置内容。服务器处理成功,用户端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
301:永久重定向,请求的资源已被永久的移动到新URL。
302:临时重定向。
400:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
401:表示用户没有权限(令牌、用户名、密码错误)。
403:表示用户得到授权(与401错误相对),但是访问是被禁止的。
404:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410:用户请求的资源被永久删除,且不会再得到的。
422:当创建一个对象时,发生一个验证错误。
500:服务器发生错误,用户将无法判断发出的请求是否成功。
501:服务器不支持请求的功能,无法完成请求
502:错误的网关,该服务器在充当网关或代理的同时,从尝试访问该请求的上游服务器接收到无效响应。

# URL

URL 结尾不应该包含斜杠 “/”

正斜杠分隔符”/“必须用来指示层级关系

使用连字符”-“来提高 URL 的可读性,而不是使用下划线”_”

URL 路径中首选小写字母

URL 路径使用名词或复数

  1. 版本规范
  • 应该将 API 的版本号放入 URL。
  • 另一种做法是,将版本号放在 HTTP 头信息中,但不如放入 URL 方便和直观。
https://api.example.com/v1
  1. 路径视网络上任何东西都是资源,比如一个动物园
https://api.example.com/v1/zoos
  1. 完成某种操作
https://api.example.com/v1/zoos		GET   :列出所有动物园
https://api.example.com/v1/zoos		POST  :新建一个动物园
https://api.example.com/v1/zoos/ID		GET   :获取某个指定动物园的信息
https://api.example.com/v1/zoos/ID		PUT   :更新某个指定动物园的信息(提供该动物园的全部信息)
https://api.example.com/v1/zoos/ID		PATCH :更新某个指定动物园的信息(提供该动物园的部分信息)
https://api.example.com/v1/zoos/ID		DELETE:删除某个动物园
https://api.example.com/v1/zoos/ID/animals	GET   :列出某个指定动物园的所有动物

# 传参规范 (过滤信息)

如果记录数量很多,服务器不可能都将它们返回给用户。API 应该提供参数,过滤返回结果。

参数的设计允许存在冗余,即允许 API 路径和 URL 参数偶尔有重复。比如,

GET /zoo/ID/animals 与 GET /animals?zoo_id=ID 的含义是相同的。

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

请我喝[茶]~( ̄▽ ̄)~*

Daniel ✨ 微信支付

微信支付

Daniel ✨ 支付宝

支付宝