Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【RESTful】RESTful API 接口设计规范 | 示例

【RESTful】RESTful API 接口设计规范 | 示例

作者头像
前端修罗场
发布于 2023-10-07 10:27:28
发布于 2023-10-07 10:27:28
1.8K01
代码可运行
举报
文章被收录于专栏:Web 技术Web 技术
运行总次数:1
代码可运行

概念

本质:一种软件架构风格 核心:面向资源设计的API

解决问题:

  • 降低开发的复杂性
  • 提高系统的可伸缩性

例如:设计一套API,为多个终端服务。

设计概念和准则

  • 网络上的所有事物都可以被抽象为资源
  • 每一个资源都有唯一的资源标识,对资源的操作不会改变这些标识
  • 所有的操作都是无状态的(本次操作、下次操作、上次操作之间无关系)

资源:网络上的一个实体、具体信息。

HTTP

RESTful 与HTTP协议操作无关,但是它是按照HTTP的思想进行设计的,所以有必要知道HTTP

参考官方文档:https://tools.ietf.org/html/rfc2616

schema://host[:port]/path[?query-string][#author]

  • shceme 指定低层使用的协议(如http,https,ftp)
  • host 服务器的IP地址或域名
  • port 服务器端口,默认为80
  • path 访问资源的路径
  • query-string 发送给http服务器的数据,常用于对资源进行筛选操作
  • anchor 锚,链接
请求
  • 格式:请求行、消息报头、请求正文

请求行格式: Method Request-URI HTTP-Version CRLF

如: GET/HTTP.1.1 CRLF

  • 请求方法

GET : 请求获取Request-URI 所标识的资源 POST :在Request-URI 所标识的资源后附加新的数据 HEAD : 请求获取由Request-URI所标识的资源的响应消息报头

PUT : 请求服务器存储一个资源,并用Request-URI作为其标识 DELETE :请求服务器删除Request-URI所标识的资源 OPTIONS : 请求查询服务器性能,或者查询与资源相关的选项和需求

对资源的操作:创建、编辑、请求、删除

响应
  • 格式:状态行、消息报头、响应正文

状态行格式:HTTP-Version Status-Code Reason-Phrase CRLF

如: HTTP/1.1 200 OK

  • 常用响应状态码(在RESTful 中有重要应用)

200 OK //客户端请求成功

400 Bad Request //客户端请求有语法错误,不能被服务器所理解

401 Unanthorized //服务器收到请求,但是服务器拒绝提供服务

404 Not Found //请求资源不存在

500 Internal Serval Error //服务器发生不可预期的错误

503 Server Unavailable // 服务器当前不能处理客户端的请求

RESTful 架构与其他架构的区别

API 的开发方式不止一种,另一种比较流行的开发方式是SOAP WebService。

SOAP WebService

WebService 是一种跨编程语言和跨操作系统平台的远程调用技术。其通过HTTP协议发送请求和接收结果时采用XML格式封装,并增加了一些特定的HTTP消息头,这些特定的HTTP消息头和XML内容格式就是SOAP协议。

对比
  • 效率与易用性:SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP处理方面的性能有所下降。同时在易用性方面以及学习成本上也有所增加。而RESTful API 在请求方法、资源、地址都进行了规范,其最大限度的利用了HTTP最初的应用协议的设计理念。
  • 安全性:RESTful 对于资源型服务器接口比较适合,适合对于效率要求很高,但是对于安全要求不高的场景。SOAP 的成熟性可以给需要提供给多开发语言的,对于安全性的要求较高的接口设计带来便利,你可以在客户端和服务端应用证书进行安全措施。所以关键看应用场景。

使用RESTful

设计RESTful API
  • 资源路径(URI):RESTful的核心是面向资源,如何规划资源路径很重要
  • HTTP动词(请求方式):如get,post,delete,put
  • 过滤信息:例如获取资源列表时有分页操作/查询操作,这时要合理分配过滤信息,过滤信息设置太多,有可能会违反RESTful API 关于URI方面的限定。
  • 状态码:当客户端发送一个请求时,服务端应当响应什么状态码
  • 错误处理:如当发现客户端传入的参数有问题时,该返回什么样的状态信息。
  • 返回结果:如POST资源的时候,需要返回一个资源实例;GET资源列表时,需要返回一个资源数组;
资源路径

在RESTful架构中,每个网址代表一个资源,所以网址中不能有动词,只能有名词。一般而言,API中的名词应该使用复数。例如,使用users反映用户资源的URI,而不是使用user。

例如:有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,那么它的资源路径应设计成如下样子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://api.example.com/v1/zoos  //动物园资源。使用https协议头;加入v1版本号,因为以后可能会更改api。版本号的加入有两种做法,一种是加入到地址中,另一种是加入到HTTP请求头中;zoos复数

https://api.example.com/v1/animals //动物资源

https://api.example.com/v1/employees //雇员资源
HTTP动词

对资源的操作有创建、读取、更新、删除(CURD),由HTTP动词表示。

  • GET : 从服务器去除资源
  • POST :在服务器新建一个资源
  • PUT:在服务器更新资源(客户端提供改变后的完整资源,服务端返回完整的更新字段)
  • PATCH:在服务器更新资源(客户端提供改变的属性,服务端返回只发生了更新的字段)
  • DELETE:从服务器删除资源

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST/zoos : 新建一个动物园
GET/zoos/ID : 获取某个指定动物园的信息
PUT/zoos/ID : 更新某个指定动物园的信息
DELETE/zoos/ID : 删除某个动物园
过滤信息

如果记录数量过多,服务器不可能都将它们返回给用户。这时就需要进行筛选。筛选时,API应该提供一个参数,过滤一下返回的结果。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?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 当创建一个对象时,发生一个验证错误。例如创建用户资源时需要用户名、密码,而前端只提供用户名字段,那么就要返回一个422 状态码,并返回错误信息:”密码不能为空“
  • 500 INTERNAL SERVER ERROR 服务器内部错误,此时服务端无法处理任何请求。
错误处理

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "error":"参数错误"
}
返回结果

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

  • GET/collections: 返回资源对象的列表(数组)
  • GET/collections/identity : 读取资源时,传入标识符(identity),服务端返回标识符指定的单个资源对象
  • POST/collections : 返回新生成的资源对象
  • PUT/collections/identity : 返回完整的资源对象
  • PATCH/collections/identity : 返回被修改的属性
  • DELETE/collections/identity : 返回一个204状态码和空响应体

DHC Client 用于测试API

  • 安装DHC 谷歌浏览器插件:

名为: 基于REST的Web服务客户端 先下载: http://chromecj.com/web-development/2015-03/401.html

或在谷歌商店 :https://chrome.google.com/webstore/detail/rest-web-service-client/ecjfcmddigpdlehfhdnnnhfgihkmejin?hl=zh-CN

然后安装。

本地开发环境搭建

  • 安装PHP环境集成包 XAMPP 或 upupw
  • 添加虚拟主机,以及取消跨站目录限制 httpd-vhosts.conf文件中 找到添加的域名,将php_admin_value xxx这句开头加入井号进行注释
  • 添加虚拟主机的本地hosts解析 : 更改本地hosts文件,添加 127.0.0.1 api.com本地域名解析

确认设计要素

项目需求
  • 用户登录、注册
  • 文章发表、编辑、管理、列表
确认设计要素
  • 资源路径: /users , /articles
  • HTTP动词: GET,POST,DELETE,PUT
  • 过滤信息: 文章分页筛选
  • 状态码: 200,404,422,403…
  • 错误处理:输出JSON格式错误信息
  • 返回结果:输出JSON数组或JSON对象

数据库设计

数据库中新建2张表:

  • 用户表: ID、用户名、密码、注册时间
  • 文章表: 文章ID、标题、内容、发表时间、用户ID

添加.htaccess Apache重写文件

之后就可以在IDE中进行相应的开发编码工作。

当然,处理RESTful API设计思想,还有最近流行的GraphQL,它是一种API查询语言,其将所见即所得的思想引入,能帮助提升开发的体验与应用的性能。(参考:http://graphql.cn/ )

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RESETful API 设计规范
如果你的应用很庞大或者你预计它将会变的很庞大,那 应该 将 API 放到子域下(api.example.com)。这种做法可以保持某些规模化上的灵活性。
全栈程序员站长
2022/06/29
1.7K0
【Restful】你还不懂Restful API规范吗?
进入正文之前,先带着小伙伴们了解几个名词,源自百度百科。 标题中涉及的核心名词API,restful
沁溪源
2021/08/13
1.6K0
RESTful API
RESTful架构是一种流行的互联网软件架构,它结构清晰,符合标准,易于理解,扩展方便。 REST是Representational State Transfer的缩写,翻译为“表现层状态转化”。表现层其实就是资源,因此可以理解为“资源状态转化”。 网络应用上的任何实体都可以看作是一种资源,通过一个URI(统一资源定位符)指向它。
王念博客
2019/07/25
1.1K0
RESTful规范
什么是RESTful 一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 一、URI规范 1.不用大写; 2.用中杠 - 不用下杠 _ ; 3.参数列表要encode; 4.URI中的名词表示资源集合,使用复数形式。 5.在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词(特殊情况可以使用动词),而且所用的名词往往与数据库的表格名对应
人生不如戏
2018/05/30
2.1K0
什么是RESETful API 设计规范?
现在在开发中前后端都是分离开发,后端提供接口给前台,RESTful 架构,就是目前最流行的一种互联网软件架构,也相当于是接口规范
沈唁
2018/08/21
3.4K0
什么是RESETful API 设计规范?
RESTful API 设计指南
简介 REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量的
zhang_derek
2018/04/11
9250
Restful API 的设计规范
本文总结了 RESTful API 设计相关的一些原则,只覆盖了常见的场景。有些规则只是针对自己项目而言,并非其他做法都是错误的。 1. URI URI 表示资源,资源一般对应服务器端领域模型中的实体类。 URI规范 不用大写; 用中杠-而不用下杠_; 参数列表要encode; URI中的名词表示资源集合,使用复数形式; 资源集合与单个资源 资源集合: /zoos //所有动物园 /zoos/1/animals //id为1的动物园内的所有动物 单个资源: /zoos/1 //id为
Clearlove
2019/08/29
7660
Restful API 的设计规范
后端开发必备的 RestFul API 知识
RestFul API 是每个程序员都应该了解并掌握的基本知识,我们在开发过程中设计API的时候也应该至少要满足RestFul API的最基本的要求(比如接口中尽量使用名词,使用POST 请求创建资源,DELETE请求删除资源等等,示例:GET /notes/id:获取某个指定id的笔记的信息)。最近学习过程中接触到这些东西,自己没有时间总结,所以分享一些不错的文章给大家。
Guide哥
2020/05/08
8510
后端开发必备的 RestFul API 知识
RESTful API 设计指南
网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......)。 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现"API First"的设计思想。RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。我以前写过一篇《理解RESTful架构》,探讨如何理解这个概念。 今天,我将介绍RESTful API的设计细节,探讨如何设计一套合理、好用的API。我的主要参考了两篇文章(1,2)
ruanyf
2018/04/13
1.1K0
RESTful API 设计指南
RESTful API 设计指南
网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......)。
OwenZhang
2021/12/08
6890
RESTful API 设计指南
深入理解什么是RESTful API ?
越来越多的人开始意识到,网站即软件,而且是一种新型的软件。   这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。   网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合,** 现在我们必须考虑,如何开发在互联网环境中使用的软件。**
竹清
2018/08/31
6540
深入理解什么是RESTful API ?
深入理解什么是RESTful API ?
越来越多的人开始意识到,网站即软件,而且是一种新型的软件。   这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。   网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合,** 现在我们必须考虑,如何开发在互联网环境中使用的软件。**
AWeiLoveAndroid
2018/09/03
3.2K0
深入理解什么是RESTful API ?
前端要知道的RESTful API架构风格
前端程序员在开发完页面后总是要对接口的,跟后端联调有时候还占用蛮大的时间的,那么你了解你和后端对的接口都是什么风格吗,你们公司接口设计的如何,你使用愉快吗?自己在写Node服务时你遇到如何定义好接口的问题吗?下面介绍一种API架构风格,也是目前主流的API设计风格,你或许一直在使用。
张张
2019/12/27
9520
RESTful API
网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......)。
用户1214487
2022/03/26
1.7K0
RESTful API
RESTful接口入门 转
从下面的图片可以看出,当我们需要把相同的数据展示到不同的界面上时,提供一个可以访问后台的接口,前台只负责将数据友好的,华丽的展示出来即可。而不需要为每一个前台都实现很多的后台逻辑。 
wuweixiang
2018/08/14
8500
RESTful API设计指南
在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的”集合”(collection),所以API中的名词也应该使用复数。
lyb-geek
2018/07/26
5320
RESTful 最佳实践
RESTful 是目前最流行的 API 规范,适用于 Web 接口规范的设计。让接口易读,且含义清晰。本文将介绍如何设计易于理解和使用的 API,并且借助 Docker api 的实践说明。
码哥字节
2020/03/24
1.1K0
好 RESTful API 的设计原则
做出一个好的API设计很难。API表达的是你的数据和你的数据使用者之间的契约。打破这个契约将会招致很多愤怒的邮件,和一大堆伤心的用户-因为他们手机上的App不工作了。而文档化只能达到一半的效果,并且也很难找到一个愿意写文档的程序员。
用户1655470
2018/12/11
1K0
DjangoRestFramework,restful规范、APIview、解析器组件、Postman等
  大家还记得CBV的这个视图函数,为什么get请求就能找到类的get方法,post请求就能找到post方法,其内部有个dispatch方法来进行分发,这又怎么玩呢,看源码啦,从哪里看呢?那里先执行,就从哪里看
changxin7
2019/12/20
2.6K0
DjangoRestFramework,restful规范、APIview、解析器组件、Postman等
RESTful简介
REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。 Fielding,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。
江米小枣
2020/06/16
9070
相关推荐
RESETful API 设计规范
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验