AI 助理
备案 控制台
开发者社区 开发与运维 文章 正文

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 数据库
如何使用Spring Boot构建RESTful API,以在线图书管理系统为例
【10月更文挑战第9天】本文介绍了如何使用Spring Boot构建RESTful API,以在线图书管理系统为例,从项目搭建、实体类定义、数据访问层创建、业务逻辑处理到RESTful API的实现,详细展示了每个步骤。通过Spring Boot的简洁配置和强大功能,开发者可以高效地开发出功能完备、易于维护的Web应用。
龙大吉
25 3
龙大吉
|
2天前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
龙大吉
12 4
小周sir
|
1天前
|
JSON API 数据格式
使用Python和Flask构建简单的RESTful API
【10月更文挑战第12天】使用Python和Flask构建简单的RESTful API
小周sir
10 1
叫个什么名字
|
3天前
|
中间件 Go API
使用Go语言构建高性能RESTful API
在现代软件开发中,RESTful API因其简洁和高效而成为构建网络服务的首选。Go语言以其并发处理能力和高性能著称,是开发RESTful API的理想选择。本文将介绍如何使用Go语言构建RESTful API,包括基础的路由设置、中间件的使用、数据验证、错误处理以及性能优化。通过实际代码示例,我们将展示Go语言在API开发中的强大功能和灵活性。
叫个什么名字
11 1
小周sir
|
4天前
|
XML JSON API
深入理解RESTful API设计:最佳实践与实现
【10月更文挑战第9天】深入理解RESTful API设计:最佳实践与实现
小周sir
16 1
Star时光
|
1天前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
Star时光
4 0
小周sir
|
1天前
|
API 网络架构 Python
使用Python和Flask构建简单的RESTful API
【10月更文挑战第12天】使用Python和Flask构建简单的RESTful API
小周sir
6 0
LKIDTI数据
|
2天前
|
存储 前端开发 API
Restful API 设计示例
Restful API 设计示例
LKIDTI数据
7 0
深语人工智能DeepNLP
|
11天前
|
人工智能 自然语言处理 PyTorch
Text2Video Huggingface Pipeline 文生视频接口和文生视频论文API
文生视频是AI领域热点,很多文生视频的大模型都是基于 Huggingface的 diffusers的text to video的pipeline来开发。国内外也有非常多的优秀产品如Runway AI、Pika AI 、可灵King AI、通义千问、智谱的文生视频模型等等。为了方便调用,这篇博客也尝试了使用 PyPI的text2video的python库的Wrapper类进行调用,下面会给大家介绍一下Huggingface Text to Video Pipeline的调用方式以及使用通用的text2video的python库调用方式。
深语人工智能DeepNLP
53 4
技术交流18179014480
|
10天前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
技术交流18179014480
34 1

热门文章

最新文章

  • 1
    TensorFlow中的那些高级API
  • 2
    一个免费功能强大的谷歌翻译api
  • 3
    View and Data API Tips: Hide elements in viewer completely
  • 4
    17、Windows API 图形用户界面(1)
  • 5
    FTK应用程序编程接口(API)手册-1【转】
  • 6
    NODE-WEBKIT教程(6)NATIVE UI API 之MENU(菜单)
  • 7
    Windows Azure入门教学系列 (七):使用REST API访问Storage Service
  • 8
    Map 3D 2013 新功能和新API WebCast视频下载
  • 9
    13、Windows API 内存管理(3)
  • 10
    iOS5系统API和5个开源库的JSON解析速度测试
  • 1
    深入理解RESTful API设计原则与实践
    106
  • 2
    【Web系列笔记】Restful
    60
  • 3
    RESTful接口与http协议状态表述
    51
  • 4
    java一行代码实现RESTFul接口
    51
  • 5
    Node.js中构建RESTful API的最佳实践
    115
  • 6
    【Go语言专栏】基于Go语言的RESTful API开发
    65
  • 7
    【Swift开发专栏】Swift中的RESTful API集成实战
    111
  • 8
    深度学习在图像识别中的应用与挑战构建高效可扩展的RESTful API:后端开发的实战指南
    59
  • 9
    【PHP开发专栏】PHP RESTful API设计与开发
    87
  • 10
    构建高性能的RESTful API:最佳实践与性能优化技巧
    129
  • 相关电子书

    更多
  • Spring Boot2.0实战Redis分布式缓存
  • CUDA MATH API
  • API PLAYBOOK
  • 相关实验场景

    更多
  • 快速体验智能体API应用
  • 基于Assistant Api的旅游助手
  • 下一篇
    AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片

    玻璃钢生产厂家重庆动物玻璃钢雕塑定做玻璃钢花盆栽图片清远玻璃钢动物雕塑批发宁夏卡通玻璃钢雕塑生产厂家漯河玻璃钢卡通雕塑厂家电话东昌玻璃钢雕塑厂家商场美陈推荐哪家公司沈阳动物玻璃钢雕塑生产厂家广州发光小品玻璃钢雕塑供应商嘉兴玻璃钢雕塑哪家好沈丘玻璃钢雕塑设计景观玻璃钢人物雕塑代理价格兴化玻璃钢雕塑企业玻璃钢dp景点陈列雕塑商场新年美陈服务台无锡小提琴玻璃钢花盆定兴玻璃钢花盆花器云南水果玻璃钢雕塑定制艺术商场美陈销售企业怀集玻璃钢机器人雕塑公司专业的生产玻璃钢雕塑厂家江门市玻璃钢雕塑价格长沙玻璃钢雕塑制作厂家福建主题商场美陈批发价东莞厂家推荐玻璃钢雕塑玻璃钢卡通雕塑展电话广东玻璃钢雕塑麋鹿玻璃钢雕塑如何维修合肥园林玻璃钢雕塑厂家玻璃钢龙虾雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

    玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化