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

Restful 接口设计规范

一、资源与 URL

1. 使用名词表示资源

URL 应该以名词为主,用来表示具体的资源,而不是动词。例如,/users 表示用户资源集合,/users/{id} 表示单个用户资源。

2. 采用复数形式

一般来说,资源的 URL 应该使用复数形式,这样更符合 RESTful 的设计理念,也更直观。如 /orders 而不是 /order

3. 避免层级过深

URL 的层级结构不宜过深,尽量保持简洁,以便于理解和使用。例如,/api/v1/orders/{orderId}/items/api/v1/orders/{orderId}/related-items/item-list 更清晰。

4. 使用清晰的命名

URL 中的单词应该使用有意义的命名,遵循一定的命名规范,如使用驼峰命名法或下划线分隔单词,提高可读性。

二、HTTP 方法

GET:用于获取资源。例如,`GET /users` 获取所有用户,`GET /users/{id}` 获取单个用户。
POST:用于创建新资源。例如,`POST /users` 用于创建一个新用户,请求体中包含新用户的信息。
PUT:用于更新资源的全部属性。例如,`PUT /users/{id}` 更新指定 ID 的用户的所有信息,请求体中包含完整的用户数据。
PATCH:用于更新资源的部分属性。例如,`PATCH /users/{id}` 可以只更新用户的部分字段,如 `name` 或 `email`。
DELETE:用于删除资源。例如,`DELETE /users/{id}` 删除指定 ID 的用户。

三、状态码

1. 2xx 成功

200 OK:表示请求成功,通常用于 GET、PUT、PATCH 请求。
201 Created:表示资源创建成功,常用于 POST 请求。
204 No Content:表示请求成功,但没有返回内容,常用于 DELETE 请求或某些不需要返回数据的 PUT、PATCH 请求。

2. 4xx 客户端错误

400 Bad Request:表示客户端请求有误,如请求参数不合法、缺少必要参数等。
401 Unauthorized:表示用户未授权,需要提供有效的身份验证信息才能访问资源。
403 Forbidden:表示用户已认证,但没有权限访问资源。
404 Not Found:表示请求的资源不存在。

3. 5xx 服务器错误

500 Internal Server Error:表示服务器内部发生错误,通常是服务器端的代码或配置问题。
503 Service Unavailable:表示服务器暂时不可用,可能是由于服务器维护、过载等原因。

四、数据格式

1. 使用 JSON

推荐使用 JSON 格式作为数据交换的格式,因为它具有良好的可读性和兼容性,易于在不同的平台和语言之间进行解析和处理。

2. 定义清晰的结构

返回的数据应该有清晰的结构,包含必要的字段和信息。例如,对于用户资源,返回的 JSON 数据可能包含 idnameemail 等字段。

3. 错误信息格式

当发生错误时,返回的错误信息应该包含明确的错误码、错误消息和相关的上下文信息,以便于客户端进行处理和调试。例如:{"errorCode": "400", "errorMessage": "Invalid request parameters", "details": {"param1": "Required parameter is missing"}}

五、其他规范

1. 幂等性

PUT、DELETE 等操作应该具有幂等性,即多次执行相同的操作应该得到相同的结果,不会对资源产生额外的副作用。

2. 版本控制

可以在 URL 中加入版本号,如 /api/v1/users,以便于对接口进行版本管理,在不破坏现有接口的情况下进行功能升级和修改。

3. 安全与认证

根据接口的需求,采取适当的安全措施,如使用 HTTPS 协议进行数据加密传输,采用身份验证和授权机制,确保只有授权的用户能够访问敏感资源。

4. 文档化

为接口编写详细的文档,包括接口的功能描述、请求和响应的格式、参数说明、状态码含义等,方便其他开发者使用和维护接口。

相关文章:

Restful 接口设计规范

一、资源与 URL 1. 使用名词表示资源 URL 应该以名词为主,用来表示具体的资源,而不是动词。例如,/users 表示用户资源集合,/users/{id} 表示单个用户资源。 2. 采用复数形式 一般来说,资源的 URL 应该使用复数形式…...

Java后端高频面经——Spring、SpringBoot、MyBatis

Spring定义一个Bean有哪些方法?依赖注入有哪些方法? (1)定义Bean的方法 注解定义Bean,Component 用于标记一个类作为Spring的bean。当一个类被Component注解标记时,Spring会将其实例化为一个bean&#xff0…...

扩散模型中三种加入条件的方式:Vanilla Guidance,Classifier Guidance 以及 Classifier-Free Guidance

扩散模型主要包括两个过程:前向扩散过程和反向去噪过程。前向过程逐渐给数据添加噪声,直到数据变成纯噪声;反向过程则是学习如何从噪声中逐步恢复出原始数据。在生成过程中,模型从一个随机噪声开始,通过多次迭代去噪&a…...

Banana Pi OpenWRT One Wifi6 OpenWrt社区官方开源路由器评测

第一款不可破解、开源、版权软件、符合 FCC、CE 和 RoHS 的维修权路由器 OpenWRT项目今年已经20岁了,为了纪念这一时刻,Banana Pi OpenWrt One/AP-24.XY路由器开发系统已经上市。这是OpenWRT团队与硬件公司的第一个联合项目。选择 Banana Pi,…...

9.1go结构体

Go不是完全面向对象的,没有类的概念,所以结构体应该承担了更多的责任。 结构体定义 使用 type 和 struct 关键字定义: type Person struct { Name string Age int } 字段可以是任意类型,包括其他结构体或指针。 字段名以大写…...

Manus全球首个通用Agent,Manus AI:Agent应用的ChatGPT时刻

文章目录 前言Manus AI: 全球首个通用AgentManus AI: 技术架构与创始人经历AI Agent的实现框架与启示AI Agent的发展预测行业风险提示 前言 这是一篇关于Manus AI及其在通用人工智能领域的应用和前景的报告,主要介绍了Manus AI的产品定位、功能、技术架构、创始人经…...

【SAP-PP】生产版本维护

一、基本概念 生产版本:用于定义一种产品,不同的生产方式,包含物料清单(BOM)和工艺路线的信息,给生产带来更多的灵活性。在做产品需求计划时和产品生产时(创建生产订单、生产订单下达前和生产订…...

软考 中级软件设计师 考点笔记总结 day01

文章目录 软考1.0上午考点下午考点 软考1.11、数值及其转换2、计算机内数据表示2.1、定点数 - 浮点数2.2、奇偶校验 和 循环冗余校验 (了解)2.3、海明码 (掌握)2.4、机器数 软考1.0 上午考点 软件工程基础知识: 开发模型、设计原则、测试方…...

K8s控制器Deployment详解

回顾 ReplicaSet 控制器,该控制器是用来维护集群中运行的 Pod 数量的,但是往往在实际操作的时候,我们反而不会去直接使用 RS,而是会使用更上层的控制器,比如说 Deployment。 Deployment 一个非常重要的功能就是实现了 Pod 的滚动…...

【微知】Centos如何迁移到Anolis系统的失败记录?(yum -y install centos2anolis、centos2anolis.py)

背景 本文记录如何从centos 8迁移到anolis系统。 详细步骤 下载迁移repo wget https://mirrors.openanolis.cn/anolis/migration/anolis-migration.repo -O /etc/yum.repos.d/anolis-migration.repo下载centos2anolis工具包 yum -y install centos2anolis安装额外工具包 …...

在 macOS 上使用 CLion 进行 Google Test 单元测试

介绍 Google Test(GTest)是 Google 开源的 C 单元测试框架,它提供了简单易用的断言、测试夹具(Fixtures)和测试运行机制,使 C 开发者能够编写高效的单元测试。 本博客将介绍如何在 macOS 上使用 CLion 配…...

Python SQLite3 保姆级教程:从零开始学数据库操作

Python SQLite3 保姆级教程:从零开始学数据库操作 本文适合纯新手!无需任何数据库基础,跟着步骤操作即可掌握 SQLite3 的核心用法。 目标:让你像用记事本一样轻松操作数据库! 目录 什么是 SQLite3?环境准…...

深度解析:视频软编码与硬编码的优劣对比

视频编码 一、基本原理与核心技术 压缩原理 通过时空冗余消除实现数据压缩: 空间冗余:利用帧内预测(如DC/角度预测)消除单帧内相邻像素相似性。时间冗余:运动估计与补偿技术(ME/MC)减少连续帧间…...

Azure云生态系统详解:核心服务、混合架构与云原生概念

核心服务:深入掌握Azure SQL Database、Azure Database for PostgreSQL、Azure Database for MySQL的架构、备份恢复、高可用性配置(如Geo-Replication、自动故障转移组、异地冗余备份)。混合架构:熟悉Azure Arc(管理混…...

人工智能之数学基础:正交矩阵

本文重点 正交矩阵是线性代数中一个重要的特殊矩阵,它在许多领域都有广泛的应用。 什么是正交矩阵 如图所示,当矩阵A满足如上所示的条件的时候,此时我们就可以认为是正交矩阵,需要注意一点矩阵A必为方阵。 正交矩阵的充要条件 …...

分布式锁—7.Curator的分布式锁

大纲 1.Curator的可重入锁的源码 2.Curator的非可重入锁的源码 3.Curator的可重入读写锁的源码 4.Curator的MultiLock源码 5.Curator的Semaphore源码 1.Curator的可重入锁的源码 (1)InterProcessMutex获取分布式锁 (2)InterProcessMutex的初始化 (3)InterProcessMutex.…...

【笔记】STM32L4系列使用RT-Thread Studio电源管理组件(PM框架)实现低功耗

硬件平台:STM32L431RCT6 RT-Thread版本:4.1.0 目录 一.新建工程 二.配置工程 ​编辑 三.移植pm驱动 四.配置cubeMX 五.修改驱动文件,干掉报错 六.增加用户低功耗逻辑 1.设置唤醒方式 2.设置睡眠时以及唤醒后动作 ​编辑 3.增加测试命…...

C++什么是深复制和浅复制,构造函数和析构函数,哪一个可以写成虚函数,为什么?

在C之中深复制是指对于值类型复制它的值,对于指针类型不仅仅复制指针指向的值,还会重新分配一个内存空间用于放置复制的值(对动态分配的内存进行重新分配和内存复制),这种深复制不会出现悬空指针的问题,但是…...

从连接到交互:SDN 架构下 OpenFlow 协议的流程与报文剖析

在SDN架构中,交换机与控制器之间的通信基于 OpenFlow协议,其设计目的是实现控制平面与数据平面的解耦。以下是 交换机连接控制器 和 数据包进入交换机触发交互 的详细流程及协议报文分析: 一、交换机连接控制器的流程(初始化阶段&…...

第七课:Python反爬攻防战:Headers/IP代理与验证码

在爬虫开发过程中,反爬虫机制成为了我们必须面对的挑战。本文将深入探讨Python爬虫中常见的反爬机制,并详细解析如何通过随机User-Agent生成、代理IP池搭建以及验证码识别来应对这些反爬策略。文章将包含完整的示例代码,帮助读者更好地理解和…...

2026年,市面上正规SSL证书品牌众多,哪家才是真正专业之选?

在当今数字化时代,网络安全至关重要,SSL证书作为保障网站安全的关键工具,其重要性不言而喻。2026年,市面上正规的SSL证书品牌众多,企业在选择时往往会感到困惑。本文将为大家分析如何选择专业的SSL证书品牌&#xff0c…...

GESP三级语法知识(六、string 入门与基础操作)

🌟 第一课:《string 入门与基础操作》🏰 第一章:string 是什么?(升级版小火车)1、🎯 故事以前我们用的是:👉 char数组 小火车 🚂(要自…...

BinCmdParser:嵌入式二进制命令动态解析器

1. BinCmdParser:面向嵌入式通信的动态二进制命令解析器 在工业控制、传感器网络与跨平台设备互联场景中,串口/UART/SPI/I2C等低带宽物理通道常承载结构化二进制指令。传统固定帧格式(如Modbus RTU、自定义8字节头4字节长度2字节CRC&#xff…...

Treap(树堆)实战:从原理到代码实现与性能对比

1. 什么是Treap:当二叉搜索树遇上堆 第一次听说Treap这个数据结构时,我正被红黑树的旋转操作折磨得焦头烂额。直到某天在算法竞赛讨论区看到有人用20行代码实现了一个"魔法平衡树",才真正打开了新世界的大门。Treap这个名字本身就揭…...

信号处理学习笔记5:卡尔曼滤波理论

卡尔曼滤波,用直白的话来讲, 就是有多个不确定的结果,经过分析、推理和计算,获得相对准确的结果。 它的核心特点是: 能够预测数据的未来趋势\({x}_{k}^{ }\) 结合当前数据进行修正,使预测更加准确 可以处理…...

QGIS进阶指南:动态标注与条件表达式高级应用

1. 动态标注的核心价值与应用场景 当你面对一个包含上千条建筑数据的地图图层时,传统静态标注会显得力不从心——商场和医院用相同字体显示,重要地标淹没在普通建筑中,数据更新后还得手动调整样式。这就是动态标注技术大显身手的时候了。 动态…...

别再手动排版了!用LaTeX + TikZ 5分钟搞定高中数学试卷里的立体几何图

用LaTeXTikZ高效绘制数学试卷中的立体几何图形 数学试卷排版一直是教师们的痛点,尤其是立体几何图形的绘制。传统方法要么依赖专业绘图软件导出图片插入,要么直接在Word中用绘图工具勉强拼凑,不仅效率低下,修改起来更是噩梦。其实…...

M2LOrder模型LSTM原理浅析与实战:时序情感分析入门

M2LOrder模型LSTM原理浅析与实战:时序情感分析入门 你是不是经常看到一些智能客服或者社交平台,能分析出一段对话里用户情绪的变化?比如,用户一开始有点生气,聊着聊着又缓和了,最后还挺满意。这种对“情绪…...

UniApp应用变现实战:用uni-ad激励视频提升用户留存与收益的配置心得

UniApp应用变现实战:用uni-ad激励视频提升用户留存与收益的配置心得 在移动应用生态中,广告变现与用户体验的平衡一直是开发者面临的难题。激励视频作为一种用户主动参与的广告形式,不仅能为开发者带来收益,还能通过奖励机制提升用…...

在Windows 11上用Bochs调试Linux 0.00:从BIOS加载到保护模式切换的完整实战

在Windows 11上用Bochs调试Linux 0.00:从BIOS加载到保护模式切换的完整实战 如果你对操作系统的底层实现充满好奇,想亲手探索计算机从加电到运行第一个用户程序的完整过程,那么这次实验将是一次绝佳的实践机会。我们将使用Bochs模拟器&#x…...