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

如何设计统一 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.mzph.cn/diannao/45137.shtml

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

相关文章

国漫推荐11

1.《元龙》 2.《恶魔法则》2023年9月29日 3.《三十六骑》 4.《山河剑心》 5.剑网3侠肝义胆沈剑心 《剑网3侠肝义胆沈剑心》 《剑网3侠肝义胆沈剑心 第二季》 《剑网3侠肝义胆沈剑心之长漂》(番外) 《剑网3侠肝义胆沈剑心 第三季》 6.《仙逆》东方玄幻…

生产管理系统功能全拆解:哪些功能是企业真正需要的?

制造业的伙伴经常听到“生产管理”,但很多人可能只是模糊地知道它与工厂、生产线有关。那么,到底什么是生产管理呢?它的重要性又体现在哪里呢?接下来,我就以轻松的方式,带大家走进生产管理的世界&#xff0…

微信闪退怎么回事?实用技巧助你轻松应对

在使用微信的过程中,偶尔会遇到闪退的问题,这不仅影响我们的日常沟通,还可能导致重要信息的丢失。那么,微信闪退怎么回事呢?闪退的原因可能有很多,包括软件问题、手机存储不足、系统不兼容等。本文将详细分…

笔记本电脑数据丢失如何恢复?

在计算机网络日益普及的今天,计算机已波及到人们的生活、工作、学习及消费等广泛领域,其服务和管理也涉及政府、工商、金融及用户等诸多方面。笔记本电脑等电子产品被各行各业的人所喜爱和接受,早已成为人们出差的必备品,可以用来…

keepalived高可用集群

一、keepalived: 1.keepalive是lvs集群中的高可用架构,只是针对调度器的高可用,基于vrrp来实现调度器的主和备,也就是高可用的HA架构;设置一台主调度器和一台备调度器,在主调度器正常工作的时候&#xff0…

OS_同步与互斥

2024-07-04:操作系统同步与互斥学习笔记 第9节 同步与互斥 9.1 同步互斥的基本概念9.1.1 同步关系9.1.2 互斥关系9.1.3 临界资源9.1.4 临界区9.1.5 同步机制应遵循规则 9.2 软件同步机制9.2.1 单标志法9.2.2 双标志先检查法9.2.3 双标志后检查法9.2.4 peterson算法 …

jstat命令介绍

jstat:查看JVM统计信息 一 基本情况二 基本语法2.1 option参数1. 类装载相关的:2. 垃圾回收相关的-gc:显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。-gccapacity:显示…

【C++】C++-机房收费管理系统(源码+注释)【独一无二】

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

LeetCode之最长回文子串

1.题目链接 5. 最长回文子串 - 力扣(LeetCode)https://leetcode.cn/problems/longest-palindromic-substring/description/ 2.题目解析 对于这道题目我们可以使用动态规划的思路来求解,具体思路是,对于一个长度大于2的子串&…

生成式信息检索(问答系统与信息检索的进步)

文章目录 什么是问答系统(Question Answering Systems)检索系统的演变经典检索系统“Term” 文档搜素的最小单位倒排索引词嵌入的出现预训练语言模型 用于问答的语言模型设计方案选择:封闭式与开放式问答系统对比方案A:封闭式生成…

【干货】一文带你看懂什么是渠道分销?如何管理渠道分销

在当今竞争激烈的市场环境中,企业想要扩大市场份额、提高产品或服务的可见度,有效的渠道分销策略是关键。 什么是渠道分销? 渠道分销,简而言之,是指企业利用中间商(如经销商、代理商、零售商等&#xff0…

springboot解压文件流zip压缩包

springboot解压文件流zip压缩包 原始文件存储的地方&#xff1a; 需要在当前目录下解压该文件&#xff0c;如下图&#xff1a; 代码示例&#xff1a; private Result<String> getLocationGuideLayerName(YbYstbtqTaskResolveParam params, String fishnetLayerName)…

华为od100问持续分享-1

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

入门PHP就来我这(高级)24 ~ Session判断用户登录

有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 上一篇我们介绍了Session管理部分的概念&#xff0c;本文通过session来改写一些用户登录&…

一致性Hash问题及解决方案

Hash算法的应用场景 请求的负载均衡 Nginx的ip_hash策略可以在客户端ip不发生变化的情况下&#xff0c;将其发出的请求始终路由到同一个目标服务器上&#xff0c;实现会话粘滞&#xff0c;避免处理session共享问题。 如果没有ip_hash策略&#xff0c;可以通过维护一张映射表的…

ts实现将相同类型的数据通过排序放在一起

看下效果&#xff0c;可以将相同表名称的字段放在一起 排序适用于中英文、数字 // 排序 function sortByType(items: any) {// 先按照类型进行排序items.sort((a: any, b: any) > {if (a.label < b.label) return -1;if (a.label > b.label) return 1;return 0;});r…

鸿蒙语言基础类库:【@ohos.application.testRunner (TestRunner)】 测试

TestRunner TestRunner模块提供了框架测试的能力。包括准备单元测试环境、运行测试用例。 如果您想实现自己的单元测试框架&#xff0c;您必须继承这个类并覆盖它的所有方法。 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-…

[氮化镓]Kevin J. Chen组新作—肖特基p-GaN HEMTs正栅ESD机理研究

这篇文章是发表在《IEEE Electron Device Letters》上的一篇关于Schottky型p-GaN栅极高电子迁移率晶体管&#xff08;HEMTs&#xff09;的正向栅极静电放电&#xff08;ESD&#xff09;机理研究的论文。文章由Jiahui Sun等人撰写&#xff0c;使用了基于碳化硅&#xff08;SiC&a…

8626 原子量计数

分析&#xff1a; 1. **读取输入**&#xff1a;首先&#xff0c;我们需要读取输入中的第一行&#xff0c;了解有多少个化学式需要处理。之后&#xff0c;对于每个化学式&#xff0c;我们逐行读取并进行处理。 2. **解析化学式**&#xff1a;对于每个化学式&#xff0c;我们需要…

8627 数独

为了判断数独解是否合法&#xff0c;我们需要遵循以下步骤&#xff1a; 1. **检查每一行**&#xff1a;确保1到9每个数字在每一行中只出现一次。 2. **检查每一列**&#xff1a;确保1到9每个数字在每一列中只出现一次。 3. **检查每个3x3的宫**&#xff1a;确保1到9每个数字在…