使用 Apifox、Postman 测试 Dubbo 服务,Apache Dubbo OpenAPI 即将发布

作者:何亮,Apache Dubbo Contributor

Apache Dubbo OpenAPI 简介

设计背景

在微服务体系中,RPC 服务的文档管理、测试、调用协作一直都是影响研发效能的关键一环,这些难题通常是由于 RPC 的特性所决定的:RPC 服务的定义方式、RPC 协议格式不一,缺少放之宇宙而皆准的统一规范。长期以来,Apache Dubbo 的开发者们也面临同样问题的困扰。

随着 Apache Dubbo 3.3.3 版本进入发布周期(未来1个月内),Dubbo 推出了完全兼容 Swagger OpenAPI 3 规范的 API 管理功能,让用户的 RPC 服务可以方便地生成 OpenAPI 格式文档,从而实现标准化的服务管理。Dubbo OpenAPI 机制的发布,带来了 RPC 服务 API 管理的最佳实践,它从很大程度上解决了 RPC API 管理的问题:

1)减少引入额外依赖和配置: Dubbo 3.3.3 提供内置的 OpenAPI 文档生成功能,用户无需引入额外的第三方工具或复杂的配置即可完成所有操作,降低了学习和使用成本。

2)兼容 REST 协议的卓越能力: 一般的 RPC 服务在兼容 REST 协议时会遇到较大困难,导致 OpenAPI 文档生成较为麻烦。而 Dubbo 3.3.3 基于 Triple 协议的先天优势,实现了对 REST 的无缝支持,极大地提升了 OpenAPI 文档生成和集成的效果。

3)减少手动文档编写工作量: 以前用户需要手动书写 OpenAPI 文档,工作量大且容易出错,现在只需简单配置即可生成。

4)保证文档与代码同步一致: 手写文档往往会滞后于代码更新,而 Dubbo 自动生成文档可以确保接口定义和文档始终一致。

5)跨语言支持更强大: 新增的 Proto 格式导出能力,让多语言开发团队可以更方便地共享接口定义,降低语言间通信的复杂性。

核心功能

以下是 Apache Dubbo OpenAPI 提供的核心功能特性。

1)自动生成 OpenAPI 文档: 无需手动编写接口文档,Dubbo 直接从接口定义中生成 OpenAPI 文档。

2)支持 Proto 格式导出: 除了常见的 JSON、YAML 格式外,Dubbo 3.3.3 新增了 Proto 格式导出功能。通过这一特性,用户可以直接将接口定义转换为 Protocol Buffers 文件,方便在多语言场景下使用,提高跨语言调用的便利性。

3)与 Swagger 完美集成: Dubbo 3.3.3 自带与 Swagger 的无缝集成,服务启动后访问默认的 URL 即可打开 Swagger UI 的 HTML 页面,快速查看和测试接口。

4)实时同步更新: 服务更新后,OpenAPI 文档可以自动同步更新,保证接口文档与代码的实时一致性。

5)快速导入到 Apifox 等工具: 生成的 OpenAPI 文档可以一键导入到 Apifox 中,用于接口调试、测试和 Mock 数据生成。

一键生成 OpenAPI,完美集成 Apifox

接下来,我们将详细讲解 Apache Dubbo OpenAPI 的使用方式。并以服务测试为例,演示如何使用 Apifox 快速测试 Apache Dubbo 服务。

基础功能演示

第一步:引入 Maven 依赖

在项目的 pom.xml 文件中添加以下依赖:

 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-rest-openapi</artifactId><version>3.3.3</version>
</dependency>
第二步:配置 Dubbo 生成 OpenAPI 文档

在 application.yaml 文件中修改相关配置:只需要打开 rest - openapi - enabled 即可。

dubbo:application:name: ${spring.application.name}qos-enable: falseprotocol:name: triport: 50052triple:rest:openapi:enabled: true
第三步:访问 OpenAPI 规范文档

1. 访问 Swagger UI

启动 Dubbo 进程后,通过访问 http://<主机>:<端口>/dubbo/openapi 可打开内置的 Swagger UI 界面。如本示例中,我们可通过 http:/127.0.0.1:50052/dubbo/openapi 在本地访问,效果图如下:

2. 访问 OpenAPI 文档(通过此方法获得 OpenAPI 后即可导入 Apifox 中):在 Dubbo 进程启动后,通过访问 http://<主机>:<端口>/dubbo/openapi/api-docs 可以生成 OpenAPI 规范的服务 API 定义文档。

除了 JSON 格式之外,还支持生成 YAML、Proto 格式文档:

  • 访问 http://<主机>:<端口>/dubbo/openapi/api-docs.yaml 生成 YAML 格式文档。
  • 访问 http://<主机>:<端口>/dubbo/openapi/api-docs.proto 生成 YAML 格式文档。

高级配置示例

通过注解定制 OpenAPI 文档

用户可以根据现有的服务接口增加注解,以丰富或定制生成的 OpenAPI 文档。目前 Dubbo 提供了三个内置注解,分别是 @OpenAPI、@Schema 和 @Operation(在 package org.apache.dubbo.remoting.http12.rest 下),用于快速生成和定制化 OpenAPI 文档:

1. @OpenAPI

  • 功能: 定义服务接口的全局信息,如标题、描述、版本、分组和标签等。
  • 用途: 为服务提供整体的 OpenAPI 配置,使文档更具描述性。
  • 示例:
@OpenAPI(infoTitle = "Dubbo OpenAPI",infoDescription = "This API provides greeting services for users.",infoVersion = "v1",docDescription = "API for greeting users with their names and titles."
)
public class DemoServiceImpl implements DemoService {// 服务方法
}

2. @Operation

  • 功能: 为具体的服务方法定义操作信息,如 HTTP 方法、摘要、描述、版本和标签等。
  • 用途: 针对方法级别的 OpenAPI 定义,使文档描述更加详细和可操作。
  • 示例:
@Operation(description = "Returns a greeting message with the provided name.")
@Override
public String hello(@Schema(description = "Name of the person to greet") String name) {return "Hello " + name;
}

3. @Schema

  • 功能: 定义参数、字段或数据模型的详细元信息,如类型、格式、描述、默认值和枚举等。
  • 用途: 为请求和响应中的数据结构提供详细描述,使文档更加直观规范。
  • 示例:
@Schema(title = "用户模型", description = "表示用户信息的对象")
public class User {@Schema(title = "用户名", example = "Tom")private String name;
}

通过这些注解,开发者可以快速生成基础文档,也能根据需求实现高度定制化。如果场景较为简单,可优先选择 Dubbo 内置的注解;在复杂场景下,可结合 Swagger 提供的注解进一步增强功能(在 package io.swagger.v3.oas.annotations.media 下)。

过滤服务列表,生成 OpenAPI 文档

在生成 OpenAPI 文档过程中,我们可以结合以上注解属性,过滤和定制生成的文档内容。以下是几种常用的文档过滤功能:

  • 按分组, 通过访问 http://<主机>:<端口>/dubbo/openapi/api-docs/{group} 实现。
  • 按版本, 通过访问 http://<主机>:<端口>/dubbo/openapi/api-docs?version=1.0.0 实现。
  • 按标签, 通过访问 http://<主机>:<端口>/dubbo/openapi/api-docs?tag=user,order 实现。

总结

Apache Dubbo 3.3.3(即将发布)实现了与 OpenAPI 的深度集成,通过与 OpenAPI 的深度集成,用户能够体验到从文档生成到接口调试、测试和优化的全流程自动化支持。不论是减少手动工作量、提升开发效率,还是支持多语言和多环境,Dubbo 3.3.3 都展现了其对开发者体验的极大关注。结合强大的 Mock 数据生成和自动化测试能力,这一版本为开发者提供了极具竞争力的服务治理解决方案。如果你正在寻找高效、易用的微服务框架,Dubbo 3.3.3 将是你不容错过的选择。

示例链接:https://github.com/apache/dubbo-samples/tree/master/2-advanced/dubbo-samples-triple-rest

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

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

相关文章

2.11 sqlite3数据库【数据库的相关操作指令、函数】

练习&#xff1a; 将 epoll 服务器 客户端拿来用 客户端&#xff1a;写一个界面&#xff0c;里面有注册登录 服务器&#xff1a;处理注册和登录逻辑&#xff0c;注册的话将注册的账号密码写入数据库&#xff0c;登录的话查询数据库中是否存在账号&#xff0c;并验证密码是否正确…

C++模拟实现AVL树

目录 1.文章概括 2.AVL树概念 3.AVL树的性质 4.AVL树的插入 5.旋转控制 1.左单旋 2. 右单旋 3.左右双旋 4.右左双旋 6.全部代码 1.文章概括 本文适合理解平衡二叉树的读者阅读&#xff0c;因为AVL树是平衡二叉树的一种优化&#xff0c;其大部分实现逻辑与平衡二叉树是…

python-leetcode 25.环形链表

题目&#xff1a; 给定一个链表的头节点head,判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪next指针再次到达&#xff0c;则链表中存在环。为了表示给定链表中的环&#xff0c;评测系统内部使用整数pos来表示链表尾连接到链表中的位置&#xff08;…

从云原生到 AI 原生,谈谈我经历的网关发展历程和趋势

作者&#xff1a;谢吉宝&#xff08;唐三&#xff09; 编者按&#xff1a; 云原生 API 网关系列教程即将推出&#xff0c;欢迎文末查看教程内容。本文整理自阿里云智能集团资深技术专家&#xff0c;云原生产品线中间件负责人谢吉宝&#xff08;唐三&#xff09; 在云栖大会的精…

SQL Server安装流程

SQL Server 2022在安全性、可用性和性能方面不断创新&#xff0c;是现在最支持Azure的SQL Server版本。 SQL Server发展史 SQL Server的历史始于1989年&#xff0c;当时是由微软与Sybase合作的产品&#xff0c;旨在为Windows NT操作系统提供一个高性能的数据库解决方案。随着…

C# 上位机--变量

C# 上位机--变量 在 C# 上位机开发领域&#xff0c;变量是构建程序逻辑的基础元素之一。它就像是一个容器&#xff0c;用于存储各种类型的数据&#xff0c;从简单的数值到复杂的对象。正确理解和使用变量&#xff0c;对于开发出高效、稳定且易于维护的上位机程序至关重要。本文…

Vue3(1)

一.create-vue // new Vue() 创建一个应用实例 > createApp() // createRouter() createStore() // 将创建实例进行了封装&#xff0c;保证每个实例的独立封闭性import { createApp } from vue import App from ./App.vue// mount 设置挂载点 #app (id为app的盒子) createA…

Redis 数据类型 List 列表

列表类型是⽤来存储多个有序的字符串&#xff0c;如下图所⽰&#xff0c;a、b、c、d、e 五个元素从左到右组成了⼀个有序的列表&#xff0c;列表中的每个字符串称为元素&#xff08;element&#xff09;&#xff0c;⼀个列表最多可以存储 2^32 - 1个元素。在 Redis 中&#xff…

yum报错 Could not resolve host: mirrorlist.centos.org

检查dns 使用ping www.baidu.com &#xff0c;如果ping不通&#xff0c;检查/etc/resolv.conf文件中是否有&#xff1a; nameserver 8.8.8.8 nameserver 8.8.4.4 替换yum源 1.备份原始的 YUM 源配置文件&#xff1a; sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.r…

STM32F103C8----外部中断探秘:解锁嵌入式实时响应的关键

​​​ 一、引言 在嵌入式系统的广袤世界里&#xff0c;中断就如同一位高效的调度员&#xff0c;发挥着举足轻重的作用。想象一下&#xff0c;一个嵌入式系统就像一个繁忙的工厂&#xff0c;CPU 如同工厂里的核心工人&#xff0c;负责执行各种任务。如果没有中断机制&#x…

分层解耦-IOC DI 入门

步骤 ①.Service层及 Dao层的实现类&#xff0c;交给I0C容器管理。 ②.为Controller及Service注入运行时&#xff0c;依赖的对象。 ③.运行测试。 添加注解进行分层耦合 Component 会将当前类交给IOC容器管理,成为IOC容器中的bean - 控制反转 Autowired 运行时,IOC容器…

SQL Server 逻辑查询处理阶段及其处理顺序

在 SQL Server 中&#xff0c;查询的执行并不是按照我们编写的 SQL 语句的顺序进行的。相反&#xff0c;SQL Server 有自己的一套逻辑处理顺序&#xff0c;这个顺序决定了查询的执行方式和结果集的生成。了解这些处理阶段和顺序对于优化查询性能和调试复杂查询非常重要。 SQL …

问题:通过策略模式+工厂模式+模板方法模式实现ifelse优化

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 示例&#xff1a;商城系统有会员系统&#xff0c;不同会员有不同优惠程度&#xff0c;普通会员不优惠&#xff1b;黄金会员打8折&#xff1b;白金会员优惠50元&#xff0c;再打7折&#xff1b; 问题描…

MYSQL利用PXC实现高可用

PXC常用端口 3306&#xff1a;数据库对外服务端口号 4444&#xff1a;请求SST的端口 4567&#xff1a;组成员之间进行沟通的端口号 4568&#xff1a;用于传输IST 搭建PXC集群 服务配置&#xff1a; 主机系统&#xff1a;rocky8.0 主机1&#xff1a;172.25.254.101 主机…

2.11寒假作业

web&#xff1a;[SWPUCTF 2022 新生赛]js_sign 打开环境是这样的&#xff0c;随便输入进行看看 提示错误&#xff0c;看源码其中的js代码 这个代码很容易理解&#xff0c;要让输入的内容等于对应的字符串&#xff0c;显然直接复制粘贴是错的 这串字符看起来像是base64加密&…

innovus如何分步长func和dft时钟

在Innovus工具中&#xff0c;分步处理功能时钟&#xff08;func clock&#xff09;和DFT时钟&#xff08;如扫描测试时钟&#xff09;需要结合设计模式&#xff08;Function Mode和DFT Mode&#xff09;进行约束定义、时钟树综合&#xff08;CTS&#xff09;和时序分析。跟随分…

《DeepSeek技术应用与赋能运营商办公提效案例实操落地课程》

大模型算法实战专家—周红伟老师 法国科学院数据算法博士/曾任阿里巴巴人工智能专家/曾任马上消费企业风控负责人 课程背景 随着大模型技术的迅猛发展&#xff0c;企业面临着提升工作效率、降低运营成本和优化资源配置的巨大压力。DeepSeek做出十三项革命性的大模型技术突破…

大模型基本原理(二)——ChatGPT的工作原理

如何得到一个ChatGPT&#xff1f; 1、无监督预训练&#xff1a;通过大量的文本数据集进行无监督训练&#xff0c;得到一个基座模型&#xff08;只会续写文本&#xff09; 2、监督微调&#xff1a;通过一些人类撰写的高质量对话数据对基座模型进行监督微调&#xff0c;得到一个…

示例代码:C# MQTTS双向认证(客户端)(服务器EMQX)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

mosquitto配置桥接

同一终端中两个broker&#xff0c;其中一个做桥将1883端口的消息导出到1884&#xff1a; mosq.conf 多个服务器搭建mosquitto集群&#xff1a; mosquitto配置桥接_mosquitto 桥接-CSDN博客