RESTful API接口设计规范

简介: 近年来移动互联网的发展,前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…),因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信,于是RESTful诞生了,它可以通过一套统一的接口为 Web,iOS和Android提供服务。

一、RESTful的诞生背景


近年来移动互联网的发展,前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…),因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信,于是RESTful诞生了,它可以通过一套统一的接口为 Web,iOS和Android提供服务。

20190629235933429.png


二、什么是RESTful?


RESTful,简称REST。

1、英文:Representational State Transfer。

2、直译:表现层状态转化。

3、本质:用URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

4、特点:RESTful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。 基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

5、设计原则和约束条件:

5.1、网络上的所有事物都可以被抽象为资源(resource);

5.2、每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识;

5.3、所有的操作都是无状态的。

凡事满足这些约束条件和原则的应用程序或设计就是 RESTful。

6、通俗解释:服务器上每一种资源,比如一个文件,一张图片,一部电影,都有对应的唯一的url地址(URI:统一资源标识符),如果我们的客户端需要对服务器上的这个资源进行操作,就需要通过http协议(GET、POST、PUT、PATCH、DELETE)执行相应的动作来操作它,比如进行获取,更新,删除。

7、补充:

7.1、 在 RPC 样式的架构中,关注点在于方法,而在 REST 样式的架构中,关注点在于资源 —— 将使用标准方法检索并操作信息片段(使用表示的形式)。资源表示形式在表示形式中使用超链接互联。

7.2、关于http接口、api接口、RPC接口、RMI、webservice、Restful等概念


三、Restful API接口设计规范


REST描述的是在网络中client和server的一种交互形式;REST本身不实用,实用的是如何设计 RESTful API(REST风格的网络接口)。

下面是根据Restful思想设计的通用规范:


3.1、协议

包含 http 和 https,使用 https 可以确保交互数据的传输安全。


3.2、路径规则|域名

路径又称 “终点”(endpoint),表示 API 的具体网址。

在 RESTful 架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的 “集合”(collection),所以 API 中的名词也应该使用复数。

包含两种形式:

a、主域名:https://api.example.com

b、子目录:https://example.org/api/


3.3、版本控制

版本号:v {n} n 代表版本号,分为整形和浮点型

整型:大功能版本发布形式;具有当前版本状态下的所有 API 接口,例如:v1,v2。

浮点型:为小版本号,只具备补充 api 的功能,其他 api 都默认调用对应大版本号的 api 例如:v1.1 v2.2。

放入位置:

1、将版本号放入URL中(方便直观)。

2、将版本号放在请求头。


3.4、请求类型

GET(SELECT):从服务器取出资源(一项或多项)。

POST(CREATE):在服务器新建一个资源。

PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。

DELETE(DELETE):从服务器删除资源。


3.5、传入参数

3.5.1、地址栏参数

主要用于过滤查询

a、restful 地址栏参数 /api/v1/product/122 122 为产品编号,获取产品为 122 的信息

b、get 方式的查询字串,此种方式主要用于过滤查询,如下:


?limit=10:指定返回记录的数量

?offset=10:指定返回记录的开始位置。

?page=2&per_page=100:指定第几页,以及每页的记录数。

?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序(sequence、order)。

?producy_type=1:指定筛选条件


3.5.2、请求body数据

主要用于提交新建数据


3.5.3、请求头

用于存放请求格式信息、版本号、token 密钥、语言等信息


{
    Accept: 'application/json',     //json格式
    version: 'v1.0'                       //版本号
    Authorization: 'Bearer {access_token}',   //认证token
    language: 'zh'                      //语言
}


3.6、返回格式

默认返回格式:


{
    code: 0,                         //状态码
    msg: 'ok',                       //提示信息
    data: {}                          //主体数据
}


使用 json 格式作为响应格式,状态码分为两种:

a、statusCode: 系统状态码,用于处理响应状态,与 http 状态码保持一致,如:200 表示请求成功,500 表示服务器错误。

b、code:业务状态码,用于处理业务状态,一般 0 标识正常,可根据需求自行设计错误码对照表,参考

20190630003422219.png


四、非 Restful Api 的需求


我们一般以 Restful Api 作为接口规范,但是由于实际业务开展过程中,可能会出现各种的 api 不是简单的 restful 规范能实现的,因此,需要有一些 api 突破 restful 规范原则。特别是移动互联网的 api 设计,更需要有一些特定的 api 来优化数据请求的交互。


4.1、单例型:

客户端根据需求分别请求对应 Api 接口,在客户端完成组装。

这种模式服务端相对简单,接口复用率高。

每个接口作用单一,如一个 App 首页,可能有轮播图、分类、推荐商品,则需要分别请求:


{
    code: 0,                         //状态码
    msg: 'ok',                       //提示信息
    data: {}                          //主体数据
}


开发过程中可根据实际需要结合使用。


4.2、组合型:

服务端组装数据,然后返回。

把当前页面中需要用到的所有数据通过一个接口一次性返回全部数据,如:


api/v1/get-home-data 返回首页用到的所有数据

1

这类 API 有一个非常不好的地址,只要业务需求变动,这个 api 就需要跟着变更。


4.3、自定义组合API

把当前用户需要在第一时间内容加载的多个接口合并成一个请求发送到服务端,服务端根据请求内容,一次性把所有数据合并返回,相比于页面级API,具备更高的灵活性,同时又能很容易的实现页面级的API功能。


data:[
    {url:'api1',type:'get',data:{...}},
    {url:'api2',type:'get',data:{...}},
    {url:'api3',type:'get',data:{...}},
    {url:'api4',type:'get',data:{...}}
]


总结:

简单来说就是url地址中只包含名词表示资源,使用http动词表示动作进行操作资源.

下面几个例子:左边是错误的设计,而右边是正确的

GET /blog/getArticles --> GET /blog/Articles  获取所有文章
GET /blog/addArticles --> POST /blog/Articles  添加一篇文章
GET /blog/editArticles --> PUT /blog/Articles  修改一篇文章 
GET /rest/api/deleteArticles?id=1 --> DELETE /blog/Articles/1  删除一篇文章

参考链接:

1、RESTful(百科)

2、网上整理的对于Rest和Restful api的理解

3、什么是RESTful API

4、API 接口设计规范

5、系统API接口规范


相关文章
|
4天前
|
安全 Java API
RESTful API设计与实现:Java后台开发指南
【4月更文挑战第15天】本文介绍了如何使用Java开发RESTful API,重点是Spring Boot框架和Spring MVC。遵循无状态、统一接口、资源标识和JSON数据格式的设计原则,通过创建控制器处理HTTP请求,如示例中的用户管理操作。此外,文章还提及数据绑定、验证、异常处理和跨域支持。最后,提出了版本控制、安全性、文档测试以及限流和缓存的最佳实践,以确保API的稳定、安全和高效。
|
7天前
|
小程序 前端开发 API
小程序全栈开发中的RESTful API设计
【4月更文挑战第12天】本文探讨了小程序全栈开发中的RESTful API设计,旨在帮助开发者理解和掌握相关技术。RESTful API基于REST架构风格,利用HTTP协议进行数据交互,遵循URI、客户端-服务器架构、无状态通信、标准HTTP方法和资源表述等原则。在小程序开发中,通过资源建模、设计API接口、定义资源表述及实现接口,实现前后端高效分离,提升开发效率和代码质量。小程序前端利用微信API与后端交互,确保数据流通。掌握这些实践将优化小程序全栈开发。
|
16天前
|
前端开发 Java API
构建RESTful API:Java中的RESTful服务开发
【4月更文挑战第3天】本文介绍了在Java环境中构建RESTful API的重要性及方法。遵循REST原则,利用HTTP方法处理资源,实现CRUD操作。在Java中,常用框架如Spring MVC简化了RESTful服务开发,包括定义资源、设计表示层、实现CRUD、考虑安全性、文档和测试。通过Spring MVC示例展示了创建RESTful服务的步骤,强调了其在现代Web服务开发中的关键角色,有助于提升互操作性和用户体验。
构建RESTful API:Java中的RESTful服务开发
|
20天前
|
XML JSON 安全
谈谈你对RESTful API设计的理解和实践。
RESTful API是基于HTTP协议的接口设计,通过URI标识资源,利用GET、POST、PUT、DELETE等方法操作资源。设计注重无状态、一致性、分层、错误处理、版本控制、文档、安全和测试,确保易用、可扩展和安全。例如,`/users/{id}`用于用户管理,使用JSON或XML交换数据,提升系统互操作性和可维护性。
14 4
|
22天前
|
安全 API 开发者
构建高效可扩展的RESTful API服务
在数字化转型的浪潮中,构建一个高效、可扩展且易于维护的后端API服务是企业竞争力的关键。本文将深入探讨如何利用现代后端技术栈实现RESTful API服务的优化,包括代码结构设计、性能调优、安全性强化以及微服务架构的应用。我们将通过实践案例分析,揭示后端开发的最佳实践,帮助开发者提升系统的响应速度和处理能力,同时确保服务的高可用性和安全。
25 3
|
29天前
|
缓存 前端开发 API
构建高效可扩展的RESTful API:后端开发的最佳实践
【2月更文挑战第30天】 在现代Web应用和服务端架构中,RESTful API已成为连接前端与后端、实现服务间通信的重要接口。本文将探讨构建一个高效且可扩展的RESTful API的关键步骤和最佳实践,包括设计原则、性能优化、安全性考虑以及错误处理机制。通过这些实践,开发者可以确保API的健壮性、易用性和未来的可维护性。
|
30天前
|
API 开发者 UED
深入探讨RESTful API设计原则及最佳实践
在当今互联网时代,RESTful API已成为各种软件系统之间进行通信的重要方式。本文将从资源定义、URI设计、HTTP方法选择、状态码规范等方面深入探讨RESTful API设计的原则与最佳实践,帮助开发者更好地构建高效、健壮的API。
|
3月前
|
JSON API 数据格式
RESTful API 最佳实践
RESTful API 最佳实践
118 0
|
10月前
|
XML JSON 安全
深入理解RESTful API设计原则及最佳实践
2.尽可能使用HTTP标准方法来表示对资源的操作。比如使用GET方法来获取资源,使用POST方法来创建资源,使用PUT方法来更新资源,使用DELETE方法来删除资源。
140 0
|
XML JSON API
RESTful API 最佳实践
RESTful API 最佳实践
136 0