当前位置: 首页 > news >正文

RESTful接口规范参考

介绍

  • REST(Representational State Transfe),一种架构设计风格,而不是强制标准,主要用于客户端与服务端接口规范;
  • 在现代的软件开发中,RESTful API已经成为应用程序之间通信的重要桥梁,互联网公司也更倾向于实践此风格;
  • 核心是面向资源,每个网址代表一种资源(URI),具有解释性;
  • 行为(GET / POST / PUT / PATCH / DELETE)与资源(URI)分离,更加轻量;
  • 数据描述简单,使⽤JSON、XML、PROTOBUFFER即可全覆盖,主要使⽤JSON;

设计规范

  • 安全

API与⽤户的通信协议,⼀般使⽤HTTP协议,更安全情况下使⽤HTTPS;

  • 域名

应该尽量将API部署在专⽤域名之下,比如api.example.com

  • 版本

在每个API对应的URL中,应有⼀个版本号,以便将来服务升级后,所有版本的客户端可以正常使用,例如/api/v1/xxx

  • 命名

核心是面向资源,每个网址代表一种资源,网址中尽量使用名词,避免动词。
资源对应的是数据库中的集合,所以名词尽量使用复数,除非没有合适的复数形式(如 weather)。

  • 请求方式
请求方式示例说明
GET/teams/{id}读取
POST/teams新建,通常带有 Body
PUT/teams/{id}更新,全量更新,通常带有 Body
PATCH/teams/{id}更新,部分更新,通常带有 Body
DELETE/teams/{id}删除

行业参考

  • 佳明接口文档

https://developers.strava.com/playground/#/
image.png

最佳实践

GET

读取。
示例:

get /teams # 获取车队列表
get /teams/list # 同上,获取车队列表
get /teams?page=1&size=10&search=武汉 # 分页搜索列表get /teams/{id} # 获取车队id为{id}的详情
get /teams/{id}/detail # 同上,获取车队id为{id}的详情get /teams/{id}/members # 获取车队id为{id}下的成员列表

POST

新建。
一个参数可放在路径参数,多个参数必须放到 body 中。
示例:

post /teams/{name} # 新建车队,仅有名称post /teams # 新建车队
# body
{
"name": "武汉车队",
"number": 8888
}

PUT

更新。
put 通常指全部更新,patch 通常指部分更新,一搬支持 put 即可。
示例:

put /teams/{id} # 修改车队id为{id}的信息
# body
{
"id": 123,
"name": "武汉车队Plus",
"number": 9999
}

DELETE

删除。
示例:

delete /teams/{id} # 删除车队id为{id}的车队

相关文章:

  • vue element plus Avatar 头像
  • 扼杀网络中的环路:STP、RSTP、MSTP
  • 万界星空科技MES系统中的车间管理的作用
  • 矩阵键盘中为什么有键位并联二极管?
  • Python光速入门 - Flask轻量级框架
  • Kafka 设计之消息传递保障
  • Web开发介绍,制作小网站流程和需要的技术【详解】
  • 影响哈默纳科Harmonic减速机使用寿命的5大因素
  • 【手游联运平台搭建】游戏平台的作用
  • 外贸常用的出口认证 | 全球外贸数据服务平台 | 箱讯科技
  • 【center-loss 中心损失函数】 参数与应用
  • 最佳牛围栏(二分 + 前缀和)
  • 视频编码中常用的测试YUV系列及说明
  • 【信息系统项目管理师】--【信息技术发展】--【新一代信息技术及应用】--【虚拟现实】
  • ubuntu20.04安装ros并配置相关环境以及驱动AUBO i5机械臂
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 2019年如何成为全栈工程师?
  • extract-text-webpack-plugin用法
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java-详解HashMap
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Webpack 4x 之路 ( 四 )
  • 代理模式
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • zabbix3.2监控linux磁盘IO
  • ​queue --- 一个同步的队列类​
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (java)关于Thread的挂起和恢复
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (转)memcache、redis缓存
  • (转)ObjectiveC 深浅拷贝学习
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET MVC第三章、三种传值方式
  • .Net Remoting常用部署结构
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • [20150707]外部表与rowid.txt
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [C#]winform部署yolov5-onnx模型
  • [HarekazeCTF2019]encode_and_encode 不会编程的崽
  • [HTML]Web前端开发技术6(HTML5、CSS3、JavaScript )DIV与SPAN,盒模型,Overflow——喵喵画网页
  • [json]定义、读写
  • [LeetCode] 626. 换座位
  • [Linux内存管理-分页机制]—把一个虚拟地址转换为物理地址