【接口设计】如何设计统一 RESTful 风格的数据接口

news2024/11/13 9:49:42

如何设计统一 RESTful 风格的数据接口

  • 1.版本控制
    • 1.1 通过 URL
    • 1.2 通过自定义请求头
    • 1.3 通过 Accept 标头
  • 2.过滤信息
  • 3.确定 HTTP 的方法
  • 4.确定 HTTP 的返回状态
  • 5.定义统一返回的格式

近年来,随着移动互联网的发展,各种类型的客户端层出不穷。如果不统一数据接口,则会造成冗余编码,增加成本。RESTful 风格的 API 正适合通过一套统一的接口为 PC、手机 APP 等设备提供数据服务。
在这里插入图片描述

1.版本控制

随着业务需求的变更、功能的选代,API 的更改是不可避免的。当一个 API 修改时,就会出现很多问题,比如,可能会在 API 中新增参数、修改返回的数据类型。这就要考虑根据原先版本 API 编写的客户端如何保留或顺利过渡。所以,需要进行版本控制。

REST 不提供版本控制指南,常用的方法可以分为 3 种。

1.1 通过 URL

通过 URL 是最直接的方法,尽管它违背了 URI 应该引用唯一资源的原则。当版本更新时,还可以保障客户端不会受到影响,如下面使用不同 URL 来确定不同版本。

二级目录 的方式:

  • API 版本 V1:http://eg.com/api/v1
  • API 版本 V2:http://eg.com/api/v2

二级域名 的方式:

  • API 版本 V1:http://v1.eg.com
  • API 版本 V2:http://v2.eg.com

还可以包括日期、项目名称或其他标识符。这些标识符对于开发 API 的团队来说足够有意义并且随着版本的变化也足够灵活。

1.2 通过自定义请求头

自定义头(例如,Accept-version)允许在版本之间保留 URL。

1.3 通过 Accept 标头

客户端在请求资源之前,必须要指定特定头,然后 API 接口负责确定要发送哪个版本的资源。

2.过滤信息

如果记录数量很多,则服务器不可能一次都将它们返回给用户。API 应该提供参数,实现分页返回结果。下面是一些常用的参数。

  • ?limit=10:指定返回记录的数量。
  • ?page=5&size=10:指定第几页,以及每页的记录数。
  • ?search_type=1:指定筛选条件。

3.确定 HTTP 的方法

在 RESTful 中,HTTP 的方法有以下几种。

  • GET:代表 请求资源
  • POST:代表 添加资源
  • PUT:代表 修改资源。PUT 是进行全部的修改,大家在编写修改功能时可能会遇到这样的情况:只修改了一个字段,但提交之后导致其他字段为空。这是因为,其他字段的值没有一起提交,数据库默认为空值。如果只修改一个或几个字段,则可以使用 PATCH 方法。
  • DELETE:代表 删除资源
  • HEAD:代表发送 HTTP 头消息,GET 中其实也带了 HTTP 头消息。
  • PATCH:PUT 与 PATCH 方法比较相似,但它们的用法却完全不同,PUT 用于替换资源,而 PATCH 用于 更新部分资源
  • OPTIONS:用于获取 URI 所支持的方法。返回的响应消息会在 HTTP 头中包含 Allow 的信息,其值是所支持的方法,如 GET。

4.确定 HTTP 的返回状态

HTTP 的返回状态一般有以下几种。

  • 200 200 200:成功。
  • 400 400 400:错误请求。
  • 404 404 404:没找到资源。
  • 403 403 403:禁止。
  • 406 406 406:不能使用请求内容特性来响应请求资源,比如请求的是 HTML 文件,但是消费者的 HTTP 头包含了 JSON 要求。
  • 500 500 500:服务器内部错误。

5.定义统一返回的格式

为了保障前后端的数据交互的顺畅,建议规范数据的返回,并采用固定的数据格式封装。如:

异常信息:

{
	"code": 10001, 
	"msg": "异常信息", 
	"data": null
}

成功信息:

{
    "code": 200, 
    "msg": "成功""data": {
    	"id": 1,
		"name": "pipi", 
		"age": 26
    }
}  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1919374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

347. 前 K 个高频元素(中等)

347. 前 K 个高频元素 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转:347. 前 K 个高频元素 2.详细题解 寻找出现频率前 k k k高的元素,因此需要先统计各个元素出现的次数,该步骤时间复杂度为 O ( n ) O(n) O(n)…

javaweb中的请求与响应--基于postman工具的应用(附带postman的详细安装步骤)

一、前言 后端的第一天感觉难度就上来了,可能是基础太过薄弱了吧。目前看视频已经有点跟不上了,果然15天想要拿下还是太勉强了点。30天还差不多。不知道读者们有没有好好的去学这方面的知识,没有什么是学不会的,关键是坚持。 Po…

【C语言】C语言-学生籍贯信息记录系统(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

C#Winform窗体中嵌入exe文件

1,效果以嵌入Modbus Slave为例: 2,代码: public partial class Form1 : Form{//设置嵌入exe的常量private const int nIndex -16;private const int dwNewLong 0x10000000;Process m_AppProcess;public Form1(){InitializeCompo…

了解AsyncRotationController

概述 基于android 15.0, 以从强制横屏App上滑退回桌面流程来分析 frameworks/base/services/core/java/com/android/server/wm/AsyncRotationController.javaAsyncRotationController 是一种控制器,用于处理设备显示屏旋转时非活动窗口的异步更新。这种控制器通过…

【记录】CSS|Tailwind 的主题定义的颜色的使用方法(--color啥的)

文章目录 【记录】CSS|Tailwind 的主题定义的颜色的使用方法(--color 啥的)省流版GPT 详细解释版Tailwind CSS 配置文件示例使用自定义颜色定义 CSS 变量总结 附赠个 Tips 【记录】CSS|Tailwind 的主题定义的颜色的使用方法&#…

【Python】已解决:ModuleNotFoundError: No module named ‘sklearn.cross_validation

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 (机器学习分割数据问题)解决“ModuleNotFoundError: No module named ‘sklearn.cross_validation’” 一、问题背景 在机器学习的实践中,数据分割是…

聚鼎装饰画:现在做装饰画能不能相信

在艺术的殿堂中,装饰画以其多变的风格和独特的魅力占据了一席之地。它们或清新淡雅,或浓烈奔放,总能为现代家居带来一丝生气与美感。然而,在这美丽的背后,却隐藏着一个令人困惑的问题:现在做装饰画&#xf…

[EasilyOpenJCL] 使用 Java 调用显卡 计算 和Java调用 CPU 进行计算 的基准测试!

设备环境介绍 easily-openJCL 是一个轻量级的 Java 语言下的 GPU 显卡 计算库,它提供了一套简单易用的 API,让用户能够轻松实现 GPU 计算操作。 通过 Java 调用 GPU 计算的一个库,使用非常简单的API就可以轻松应付 Java 数据类型在 GPU 中的…

程序使用多进程,打包.exe后,程序陷入死循环

最近写了一个深度学习程序,用cxfreezee打包exe后,在本地运行突然出现死循环,明明在pycharm运行一切正常。 排查了问题,怀疑是多进程的原因,解决办法: 在你的主程序前添加一行代码: if __name_…

Typescript 模块小知识-global scope

问题表现 在编写ts代码的时候遇到一个问题, 表现为, 如果在某个ts工程中, 如果多个文件里面没有任何导出export或者是export default, 那么这些文件如果有const或者是let定义相同的声明都会报错如下 无法重新声明块范围变量 a/a.ts 和 index.ts 和 index2.ts 都没有进行expor…

C++系列-Vector(一)

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” Vector的介绍及使用 Vector的介绍 当vector构建的参数类型为char类型时,它是和string是极其类似的,但是二者之间也有不同,比如&#xff0c…

人工智能时代,零基础学IT,我首推Python作为你编程入门语言!

人工智能时代为什么将 Python 称为第一语言? 因为python适应了人工智能时代: 人工智能时代对于代码的简便性有很大要求,像传统的C/CPP/Java学习较为复杂,学习路线长,对于很多零基础的人入门困难。python的兼容性&…

24下软考高级-系统架构设计师100条知识点速记!

11月系统架构设计师现在准备真的太早了吗? 不不不~对于0基础和打工人,留给我们备考的时间其实已经不多了! 想开始不晓得从哪里开始?这里给大家整理了24下系统架构设计师知识点100条,符合最新版教材和考试大纲&#x…

Python实现动态迷宫生成:自动生成迷宫的动画

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame定义迷宫生成类主循环 完整代码 引言 迷宫生成算法在游戏开发和图形学中有着广泛的应用。它不仅可以用于创建迷宫游戏,还可以用于生成有趣的图案。在这篇博客中,我们将使用Python…

目前哪些充电宝是最强?曝光几款好用的充电宝排行榜

充电宝在我们的日常生活中能为我们带来无与伦比的便捷与体验。然而,当充电宝市场品牌和型号众多,功能丰富多样,口碑最佳的充电宝究竟有哪些?怎样才能挑选到口碑上佳、契合个人需求的充电宝,这已然成为消费者面临的难题…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【HMAC(C/C++)】

HMAC(C/C) HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),是一种基于Hash函数和密钥进行消息认证的方法。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 生…

基于Python/MATLAB长时间序列遥感数据处理及在全球变化、植被物候提取、植被变绿与生态系统固碳分析、生物量估算与趋势分析应用

植被是陆地生态系统中最重要的组分之一,也是对气候变化最敏感的组分,其在全球变化过程中起着重要作用,能够指示自然环境中的大气、水、土壤等成分的变化,其年际和季节性变化可以作为地球气候变化的重要指标。此外,由于…

大模型【Qwen2-7B本地部署(WEB版)】(windows)

大模型系列文章目录 Qwen2-7B本地部署(WEB版) 前言 大模型是截止2024年上半年最强的AI,Qwen2是刚出来的号称国内最强开源大模型。这是大模型系列的第一篇文章,旨在快速部署看看最近出来的大模型效果怎么样,效果ok的话…

Nature Communications|柔性无感智能隐形眼镜(柔性传感/可穿戴电子/柔性电子)

南京大学徐飞(Fei Xu)、陆延青(Yanqing Lu)、陈烨(Ye Chen)和江苏省人民医院袁松涛(Songtao Yuan)团队,在《Nature Communications》上发布了一篇题为“Frequency-encoded eye tracking smart contact lens for human–machine interaction”的论文。论文内容如下: 一、 摘…