API 风格选对了,文档写好了,项目就成功了一半!

news/2025/1/10 9:29:13/文章来源:https://www.cnblogs.com/HaiJun-Aion/p/18662804

在前后端开发中,API文档和API风格设计是提高开发效率、减少沟通成本、确保系统稳定性的关键环节。一个清晰、易用的API文档可以帮助前端开发者快速理解接口的使用方法,而完善的测试则能尽早发现潜在问题,避免上线后出现故障。接下来,我们将从 API风格设计 API 文档 两个方面,详细探讨如何提高开发效率。

API风格设计

项目如何选择合适的API风格?

RESTful API

RESTful API 是基于 REST(Representational State Transfer) 架构风格设计的API。它使用HTTP协议的标准方法(GET、POST、PUT、DELETE等)来操作资源,资源通过URL标识,数据通常以JSON格式传输。

前后端对接

URL设计:使用名词表示资源,动词由HTTP方法表示。

  • 获取用户列表:<font style="color:rgb(64, 64, 64);">GET /users</font>
  • 创建用户:<font style="color:rgb(64, 64, 64);">POST /users</font>
  • 更新用户:<font style="color:rgb(64, 64, 64);">PUT /users/{id}</font>
  • 删除用户:<font style="color:rgb(64, 64, 64);">DELETE /users/{id}</font>

数据格式:通常为JSON,字段命名建议统一(如小驼峰或下划线)。

GraphQL

GraphQL 是一种查询语言和运行时环境,允许前端按需获取数据。它通过一个统一的入口(通常是<font style="color:rgb(64, 64, 64);">/graphql</font>)处理所有请求,前端通过查询语句指定需要的数据字段。

前后端对接

  1. Schema定义:使用GraphQL的类型系统定义数据结构。
type User {id: ID!name: String!email: String!
}type Query {users: [User!]!
}
  1. 查询语句:前端通过查询语句指定需要的数据字段。
query {users {idname}
}
  1. 响应数据:后端返回与查询语句匹配的数据。
# 返回数据
{"data": {"users": [{ "id": 1, "name": "Alice", "email": "alice@example.com" },{ "id": 2, "name": "Bob", "email": "bob@example.com" }]}
}

Websocket

WebSocket 是一种全双工通信协议,适合实时性要求高的场景。它通过建立长连接,支持客户端和服务端之间的双向通信。

前后端对接

  1. 建立连接:前端通过<font style="color:rgb(64, 64, 64);">new WebSocket(url)</font> 或者 第三方<font style="color:rgb(64, 64, 64);">websocket</font>进行建立连接。
  2. 消息格式:可以是JSON、二进制等。
  3. 事件监听:前端监听<font style="color:rgb(64, 64, 64);">onmessage</font><font style="color:rgb(64, 64, 64);">onopen</font><font style="color:rgb(64, 64, 64);">onclose</font>等事件。

RPC

RPC 是一种远程过程调用方式,通过调用远程函数来实现通信,通常基于 HTTP 或 TCP 协议。接口通常以动词命名,表示具体的操作。

前后端对接

  1. 使用统一的接口定义语言(如 Protobuf)。
  2. 定义清晰的请求和响应数据结构。
  3. 统一错误码和错误消息格式。

gRPC

gRPC 是一个高性能、开源的远程过程调用(RPC)框架,由 Google 开发。它基于 HTTP/2 协议,使用 Protocol Buffers(protobuf) 作为接口定义语言(IDL)和数据序列化格式。

前后端对接

  1. 定义 **<font style="color:rgb(64, 64, 64);">.proto</font>** 文件
  • 前后端共同维护 <font style="color:rgb(64, 64, 64);">.proto</font> 文件,定义服务、消息类型和 RPC 方法。
syntax = "proto3";
package example;service UserService {rpc GetUser (UserRequest) returns (UserResponse);
}message UserRequest {int32 id = 1;
}message UserResponse {int32 id = 1;string name = 2;string email = 3;
}
  1. 生成代码
  • 使用 <font style="color:rgb(64, 64, 64);">protoc</font> 工具生成客户端和服务端代码。
  • 前端使用 gRPC-Web 或类似工具生成客户端代码。
  1. 错误处理
  • 使用 gRPC 的状态码(如 <font style="color:rgb(64, 64, 64);">OK</font><font style="color:rgb(64, 64, 64);">INVALID_ARGUMENT</font>)和错误消息。
  1. 安全性
    • 使用 TLS 加密通信,确保数据安全。

SOAP

SOAP(Simple Object Access Protocol)是一种基于 XML 的协议,用于在分布式环境中交换结构化信息。它通常与 WSDL(Web Services Description Language)结合使用,描述服务的接口和数据格式。

前后端对接

  1. 定义 WSDL 文件
  • 使用 WSDL 描述服务接口和数据结构。
<definitions name="UserService"targetNamespace="http://haijun.com/UserService"xmlns="http://schemas.xmlsoap.org/wsdl/"><message name="GetUserRequest"><part name="userId" type="xsd:int"/></message><message name="GetUserResponse"><part name="user" type="tns:User"/></message><portType name="UserService"><operation name="GetUser"><input message="tns:GetUserRequest"/><output message="tns:GetUserResponse"/></operation></portType>
</definitions>
  1. 生成客户端代码
    • 使用工具(如 <font style="color:rgb(64, 64, 64);">wsimport</font>)生成客户端代码。
  2. 错误处理
    • 使用 SOAP Fault 返回错误信息。
  3. 安全性
    • 使用 WS-Security 进行加密和签名

Webhook

Webhook 是一种基于 HTTP 的回调机制,允许一个系统在特定事件发生时,主动向另一个系统发送通知。它广泛应用于事件驱动的架构中,是实现实时通信和系统集成的关键技术之一。


API 文档

为什么要引入API 文档?

  1. 降低沟通成本:前后端开发者无需频繁沟通,通过文档即可了解接口细节。
  2. 提高开发效率:前端开发者可以提前基于文档进行开发,无需等待后端接口完成。
  3. 便于维护:清晰的文档可以帮助新成员快速上手项目。

API 文档具有哪些内容呢?

  1. 接口描述:接口的功能、适用场景。
  2. 请求方法:GET、POST、PUT、DELETE 等。
  3. URL:接口的完整路径。
  4. 请求参数:包括参数名称、类型、是否必填、示例值等。
  5. 响应格式:包括状态码、响应字段、示例响应。
  6. 错误码说明:列出可能的错误码及其含义。
  7. 示例请求:提供完整的请求示例。
  8. 版本信息:接口的版本号及变更记录。
  @Post()@ApiOperation({ summary: '添加流水信息', tags: ['Cost Records'] }) // 添加 API 操作的摘要@ApiBody({ type: CreateCostRecordDto }) // 指定请求体的 DTO 类型@ApiResponse({ status: 201, }) // 添加成功响应信息@ApiResponse({ status: 400, }) // 添加错误响应信息,根据实际需要添加更多create(@Body() createCostRecordDto: CreateCostRecordDto) {return this.costRecordService.create(createCostRecordDto);}

常用的Swagger 装饰器

装饰器 描述 使用场景
@ApiTags 为控制器或方法添加标签,用于组织 Swagger UI 文档。 标明控制器或方法所属的领域,使文档更易于组织。
@ApiOperation 为控制器方法添加操作描述,包括摘要和详细描述。 提供关于 API 操作的清晰说明,方便开发者理解 API 的作用。
@ApiParam 描述路径参数、请求参数或响应参数,包括名称、类型、描述等。 提供详细的参数信息,方便开发者正确使用和理解 API。
@ApiBody 指定请求体的 DTO 类型,用于描述请求体的结构。 明确请求体的结构,帮助开发者正确发送请求。
@ApiResponse 描述 API 的响应,包括状态码、描述等。 提供关于 API 响应的详细说明,方便开发者处理各种响应情况。
@ApiBearerAuth 指定请求需要携带 Bearer Token,用于身份验证。 在需要身份验证的接口中使用,指定需要提供 Token 信息。
@ApiProperty 为 DTO 类型的属性添加元数据,如描述、默认值等。 提供详细的属性信息,使开发者了解 DTO 对象的结构和约束。
@ApiQuery 描述查询参数,包括名称、类型、描述等。 用于标识查询参数,使开发者清晰了解 API 的可用查询选项。
@ApiHeader 描述请求头信息,包括名称、类型、描述等。 提供请求头的详细信息,使开发者正确设置请求头。
@ApiExcludeEndpoint 标记一个控制器方法不在 Swagger UI 中显示。 在一些特殊情况下,可以使用该装饰器排除不需要在文档中展示的接口。

API 文档工具

Swagger/OpenAPI

  • 通过注解或配置文件自动生成API文档。
  • 支持在线测试和调试。

Postman 接口文档

  • 支持手动或自动生成API文档。
  • 提供团队协作功能,方便共享文档。

API文档的最佳实践

  • 保持文档与代码同步:使用工具自动生成文档 或者 配置Swagger注解自动生成,避免手动更新。
  • 提供示例:每个接口都应提供请求和响应的示例。
  • 版本控制:文档应明确标注接口版本,避免混淆。
  • 团队协作:使用支持团队协作的工具(如Postman),确保文档的实时更新。

总结

在本文中,我们从 API 风格的选择到文档的编写,详细探讨了如何选用API设计和构建高效的API文档,来达到提供协作效率。希望这些内容能为你提供实用的指导,帮助你在实际项目中更好地落地 API 设计与文档管理。

如果你觉得这篇文章对你有帮助,欢迎 点赞转发,让更多开发者受益!同时,关注我们,获取更多技术干货和实战经验。我们下期再见!👋

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

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

相关文章

macOS的PrivilegedHelperTools文件夹

在 macOS 上,/Library/PrivilegedHelperTools 文件夹是一个特殊的位置,用于存放可以以更高权限运行的辅助工具或守护进程。这些工具通常由各种应用程序安装,以执行需要超出普通应用程序沙箱权限的任务,例如Proxy的应用,常见都是带有helper的应用。让我们更详细地了解这个目…

CDS标准视图:预期应收 I_FutureAccountsReceivables

视图名称:预期应收 视图类型:参数 视图代码:点击查看代码 //Documentation about annotations can be found at http://help.sap.com searching for CDS annotations //Inserted by VDM CDS Suite Plugin @ObjectModel.usageType.sizeCategory: #XXL //Inserted by VDM CDS …

如何在服务器上查看当前运行的PHP版本?

要查看主机当前运行的PHP版本,您可以按照以下步骤操作。这种方法简单且适用于大多数Web服务器环境。步骤 描述1 创建一个新的PHP文件,例如info.php。2 在文件中添加以下代码: php<br>phpinfo();<br>3 将该文件上传到您的Web服务器的根目录。4 在浏览器中访问ht…

如何解决“此网站无法提供安全连接,使用了不受支持的协议”的问题?

当您访问某个网站时,如果遇到“此网站无法提供安全连接,使用了不受支持的协议”的错误提示,通常是因为客户端浏览器和服务器之间的TLS协议版本不匹配。以下是详细的解决方法:解决方案 适用对象 具体步骤客户端解决方案 用户 1. 更新浏览器:确保您的浏览器是最新版本,因为…

使用宝塔面板上传网站后,为什么网站打开速度变慢?如何优化以提升速度?

在使用宝塔面板上传网站后,如果网站打开速度变慢,通常需要排除网速和硬件问题。以下是一些常见的优化方法,可以帮助显著提升PHP网站的执行速度和数据库读取速度。 常见原因:PHP配置不当:PHP的默认配置可能不适合您的网站需求,导致执行效率低下。 数据库性能问题:MySQL配…

电脑分屏---播放不同的声音

在工作中,一台电脑两个显示器是常见办公模式,那么如何做到两个显示器播放不同的声音的呢? 常见的需求就是:一边看电视、一边打游戏 准备: 1、3.5mm的外接音箱,插入到电脑后面的绿色孔。【红色孔:音频输入、常用于连接麦克风;绿色孔:音频输出、常用于链接耳机/音箱;蓝…

C#MAUI 安卓请求http错误

报错:One or more errors occurred. (Connection failure) 在window端请求http https都没有问题,但是在安卓端请求http就会报错。 这是由于安卓从底层禁止了明文请求,需要设置打开 示例<application android:allowBackup="true" android:icon="@mipmap/ap…

在使用 PbootCMS 的 IP 黑名单功能时,如果发现只能添加 10 多条 IP 地址,多了保存不了,通常是因为 ay_config 表中存储 IP 黑名单的字段长度有限

1. 备份数据库 在进行任何数据库操作之前,请务必备份数据库,以防数据丢失。mysqldump -u your_username -p your_database_name > backup.sql2. 登录数据库管理工具 使用 phpMyAdmin 或其他数据库管理工具登录到您的 MySQL 数据库。 3. 修改 ay_config 表结构找到 ay_conf…

显著增加 PbootCMS IP 黑名单可以存储的 IP 地址数量

通过修改 ay_config 表结构中的 value 字段类型,可以显著增加 PbootCMS IP 黑名单可以存储的 IP 地址数量。确保在进行数据库操作之前备份数据库,并在修改后验证设置是否生效。如有任何问题,可以参考官方文档或寻求专业的技术支持。 以下是具体的 SQL 语句示例:ALTER TABLE…

bat命令大全完整版

常用的BAT命令列表,分为文件操作、流程控制、网络操作等几类: 文件和目录操作cd:更改当前目录 md 或 mkdir:创建目录 rd 或 rmdir:删除空目录 copy:复制文件 move:移动文件或重命名文件 del 或 erase:删除文件 ren 或 rename:重命名文件或目录 type:显示文本文件内容…

bat提示命令语法不正确

当遇到BAT命令语法不正确的问题时,可以按照以下步骤排查和修正:检查命令拼写:确保使用的命令名称准确无误。例如,md 和 mkdir 是创建目录的命令,而 mkdr 则是错误的。 确认参数格式:每个命令都有特定的参数格式。例如,copy source destination 中的 source 和 destinati…

bat命令电脑微信双开怎么设置

找到微信安装路径通常微信安装在 C:\Program Files (x86)\Tencent\WeChat\WeChat.exe 或 C:\Program Files\Tencent\WeChat\WeChat.exe。创建批处理文件(.bat)打开记事本,输入以下内容并保存为 wechat_dual_open.bat:@echo off start "" "C:\Program Files …