React--》掌握openapi-typescript-codegen快速生成API客户端代码

今天深入探索一个神奇的工具——openapi-typescript-codegen。它不仅能够帮助你快速生成TS代码,还能让你的API请求更加高效、类型安全,让开发者摆脱手动编写冗长请求代码的困扰,专注于实现业务逻辑。接下来让我们一起来了解它的强大功能和使用技巧,提升你的开发体验!

        openapi-typescript-codegen:根据OpenAPI规范自动生成TS代码的开源工具,OpenAPI 是一种广泛使用的API规范,能够描述RESTful API的结构和行为,包括请求、响应、数据模型等内容,而openapi-typescript-codegen这个工具正是利用OpenAPI规范,自动化地为开发者生成与之匹配的TS类型定义和API客户端代码,也就是说作为前端的你不再需要根据后端提供的接口编写接口函数,直接一键就可以生成接口函数,大大提高了编程效率!

如果想了解该开源工具的源码,可以随时访问 官网 进行查阅,这里不再赘述,接下来博主就对这个开源工具进行一个简单的介绍!

openapi-typescript-codegen的作用如下所示:

1)自动生成TS类型:通过读取OpenAPI规范文件,生成与之对应的TS类型定义,这样直接在代码中使用这些类型,而无需手动编写类型声明确保类型安全。

2)生成API客户端代码:生成用于与API交互的客户端代码,包括自动生成请求函数、错误处理、请求参数的类型化等。

3)简化与API的集成:帮助快速生成与API交互所需的所有代码,避免了手动构建请求、解析响应等繁琐的工作,提高了开发效率。

4)保持同步与API规范:通过直接从OpenAPI规范中生成代码,确保每次 API 更新时相关的客户端代码都能自动同步,避免了手动更新的繁琐和遗漏。

通过官方文档的介绍,我们可以知道我们使用该开源工具的优势所在:

总之其是一个非常有意义的工具,特别适用于需要与第三方或内部API进行频繁交互的TS项目,帮助开发者减少了手动编写重复代码的工作量,确保了代码的类型安全和可靠性,同时能够与API文档保持同步,减少了开发中的错误和不一致问题,具体想了解的请查阅官网,这里不再赘述:

借助该工具开发者不仅能提高开发效率,还能享受更加流畅和高效的工作体验,接下来博主就讲解一下如何对该开源工具使用进行讲解,不足之处还请见谅!

接下来介绍如何快速上手openapi-typescript-codegen,帮助开发者如何在项目中轻松生成与API交互所需的代码,提升开发效率并确保类型安全,在官方文档中提供了该工具使用的一些核心命令,如下所示:

$ openapi --helpUsage: openapi [options]Options:-V, --version             output the version number-i, --input <value>       OpenAPI specification, can be a path, url or string content (required)-o, --output <value>      Output directory (required)-c, --client <value>      HTTP client to generate [fetch, xhr, node, axios, angular] (default: "fetch")--name <value>            Custom client class name--useOptions              Use options instead of arguments--useUnionTypes           Use union types instead of enums--exportCore <value>      Write core files to disk (default: true)--exportServices <value>  Write services to disk (default: true)--exportModels <value>    Write models to disk (default: true)--exportSchemas <value>   Write schemas to disk (default: false)--indent <value>          Indentation options [4, 2, tab] (default: "4")--postfixServices         Service name postfix (default: "Service")--postfixModels           Model name postfix--request <value>         Path to custom request file-h, --help                display help for commandExamples$ openapi --input ./spec.json --output ./generated$ openapi --input ./spec.json --output ./generated --client xhr

从上面核心命令举出的examples我们可以知道,该工具主要使用的就是这两个常用命令,这里对其做一个简单的介绍:

例如:openapi --input ./spec.json --output ./generated --client xhr

1)–input:指定接口文档的路径、url 或字符串内容(必填)

2)–output:代码生成的目录

3)–client:生成的代码所需要使用的请求库 

作为前端开发者最常用的请求库无非就是axios,这里我们终端执行如下命令进行安装:

// 首先下载axios
npm install axios// 然后安装成功API工具
npm install openapi-typescript-codegen --save-dev

生成命令:装配置之后我们可以直接在我们的demo项目中进行测试一下,项目终端执行如下命令可是发现控制台报错无法识别,如下所示:

openapi --input 你的在线swagger.json地址 --output ./src/api --client axios

解决该方法有两种,一直是直接将开源工具全局安装,另一种就是使用npx临时安装,都可以:

// 全局安装
npm install openapi-typescript-codegen -g// 临时安装
npx openapi-typescript-codegen --input 你的在线swagger.json地址 --output ./src/api--client axios

如下可以看出我们根据在线的swagger.json直接生成的API接口代码:

为了方便后期重新生成最新的接口代码,我们可以将命令放置在package.json文件中,通过执行npm命令快速生成接口代码,如下所示:

目录介绍:接下来我们对上面生成的api目录下的文件代码进行一个简单的介绍:

1)core:包含接口请求类型限制、接口请求基本设置、封装的接口请求request函数

2)models:包含接口请求函数中的所有ts类型

3)services:包含所有的请求接口函数

4)index.ts:所有请求函数的出口

这里我们可以自定义一个request.ts文件,然后执行如下命令,在每次重新生成的api文件中,复制使用我们自定义的request.ts文件:

// axios基础封装
import axios from 'axios'export const request: any = axios.create({baseURL: '服务器接口根地址',timeout: 5000,
})// 请求拦截器
request.interceptors.request.use((config: any) => {// 请求拦截器return config
}, (error: any) => {return Promise.reject(error)
})// 响应拦截器
request.interceptors.response.use((res: any) => {return res.data
},  (error: any) => {//处理网络错误let msg = ''const status = error.response.statusswitch (status) {case 401:msg = 'token过期'breakcase 403:msg = '无权访问'breakcase 404:msg = '请求地址错误'breakcase 500:msg = '服务器出现问题'breakdefault:msg = '网络出现问题'break}return Promise.reject(error)}
)

要生成的代码中执行如下命令,该--request参数告诉生成器不要生成默认的request.ts文件,而是复制指定的自定义文件进行使用:

openapi --input swagger地址 --output ./src/api --request ./src/utils/request.ts --client axios

随便调用一个函数:

import { Button } from 'antd';
import { BasicDataService } from './api'const App = () => {const getData = async () => {const data = await BasicDataService.basicDataQueryLocation()console.log(data)}getData()return (<div style={{ display: 'flex', gap: '20px' }}><Button type='primary'>按钮</Button></div>)
}
export default App

结果被打印了出来:

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

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

相关文章

【C++】类中的“默认成员函数“--构造函数、析构函数、拷贝构造、赋值运算符重载

目录 "默认"成员函数 概念引入&#xff1a; 一、构造函数 问题引入&#xff1a; 1&#xff09;构造函数的概念 2&#xff09;构造函数实例 3&#xff09;构造函数的特性 4)关于默认生成的构造函数 (默认构造函数) 默认构造函数未完成初始化工作实例: 二…

中仕公考怎么样?事业编面试不去有影响吗?

事业编考试笔试已经通过&#xff0c;但是面试不去参加会有影响吗&#xff1f; 1. 自动放弃面试资格&#xff1a;未能按时出席事业单位的面试将被视为主动放弃该岗位的竞争机会。 2. 个人信誉问题&#xff1a;面试作为招聘流程的关键步骤&#xff0c;无故缺席可能被解释为诚信…

websocket初始化

websocket初始化 前言 上一集我们HTTP的ping操作就可以跑通了&#xff0c;那么我们还有一个协议---websocket&#xff0c;我们在这一集就要去完成我们websocket的初始化。 分析 我们在初始化websocket的之前&#xff0c;我们考虑一下&#xff0c;我们什么时候就要初始化我们…

Unity中HDRP设置抗锯齿

一、以前抗锯齿的设置方式 【Edit】——>【Project Settings】——>【Quality】——>【Anti-aliasing】 二、HDRP项目中抗锯齿的设置方式 在Hierarchy中——>找到Camera对象——>在Inspector面板上——>【Camera组件】——>【Rendering】——>【Pos…

Linux系统任务管理

文章目录 系统任务管理atcron &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月14日11点20分 系统任务管理 任务管理 计划执行&#xff1a;特定时间运行一次&#xff1a;at 定期执…

(附项目源码)Java开发语言,springboot 民宿管理系统的设计与实现 57,计算机毕设程序开发+文案(LW+PPT)

目 录 摘 要 1 绪论 1.1 研究背景 1.2 研究意义 1.3 主要研究内容 1.4 论文章节安排 2 相关技术介绍 2.1 Java编程语言 2.2 MySQL数据库 2.3 springboot框架 3 系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 经济可行性分析 3.1.3 操作可行性分析 3.2 …

IDEA热部署(简单死了!)

真的很简单很简单&#xff0c;我之前看别的博主&#xff0c;很多都讲的很复杂&#xff0c;我哭 步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#xff1a; 步骤四&#xff1a; 到这里就结束啦~ 最后很重的是&#xff1a; 1.启动项目时候&#xff0c;必须使用debug方式启…

基于java+springboot+layui的流浪动物交流信息平台设计实现

基于javaspringbootlayui的流浪动物交流信息平台设计实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系…

Spring Boot框架:构建可扩展的网上商城

4 系统设计 网上商城系统的设计方案比如功能框架的设计&#xff0c;比如数据库的设计的好坏也就决定了该系统在开发层面是否高效&#xff0c;以及在系统维护层面是否容易维护和升级&#xff0c;因为在系统实现阶段是需要考虑用户的所有需求&#xff0c;要是在设计阶段没有经过全…

「Py」模块篇 之 PyAutoGUI库自动化图形用户界面库

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「Py」Python程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定…

打造透明、高效的分布式系统:通过 EMQX ECP 集成实现链路追踪功能

链路追踪作为一种用于监控和观察分布式系统中请求流动和性能的技术&#xff0c;在现代微服务架构中扮演着重要角色。 在复杂的分布式环境中&#xff0c;它可以记录并可视化跨多个服务与组件的完整请求路径&#xff0c;并提供每个服务节点上的执行时间&#xff0c;帮助开发人员…

sql数据库-聚合函数-DQL(类似Excel函数)

目录 聚合函数介绍 语法 举例 统计表中的所有女性员工 统计表中工作地点在北京的员工 聚合函数介绍 常用的聚合函数 函数功能count统计字段数量max最大值min最小值avg平均值sum求和 语法 SELECT 聚合函数(字段列表) FROM 表名; 举例 统计表中的所有女性员工 sele…

【C语言刷力扣】58.最后一个单词的长度

题目&#xff1a; 解题思路; 倒序遍历&#xff0c;先将末尾的空格过滤&#xff0c;再统计至第一个空格。 条件i > 0 放在前面先判断&#xff0c;条件s[i] ! 放后面&#xff0c;反之遇到单字符会溢出。 时间复杂度&#xff1a; 空间复杂度&#xff1a; int lengthOfLas…

【数据运营】数据资产私域运营:探索并实现数据价值变现的新途径

随着数字化浪潮的席卷&#xff0c;数据已成为现代企业的核心竞争力之一。然而&#xff0c;仅仅拥有数据并不足以在激烈的市场竞争中脱颖而出&#xff0c;关键在于如何有效地管理和运营这些数据资产&#xff0c;将其转化为实实在在的商业价值。本文将从数据资产私域运营的定义、…

360天擎终端安全管理 远程控制客户端终端进行的安全防护/终端管理:病毒查杀/插件管理/系统修复/漏洞管理等操作

文章目录 目录 文章目录 使用流程 小结 概要使用流程技术细节小结 概要 如果首页上出现只有5台。但是公司实际上有20台电脑。还有很多未进行安装360天擎的用户主机。我们下发指示通告内容。这个的话需要一个一个排查才能知道谁没有安装。可以查看终端管理页面看到主机IP知道已…

数字人直播骗局大起底!源码部署究竟有哪些优势?

随着数字人直播的应用频率不断上升&#xff0c;越来越多的人开始关注到了它所蕴含着的广阔前景和巨大收益潜力&#xff0c;于是&#xff0c;纷纷打听起了入局相关的事宜。而这也就让许多不法分子盯上了这一项目&#xff0c;并炮制出了各式各样的数字人直播骗局来收割韭菜。 其中…

OpenAI官方发布:利用ChatGPT提升写作的12条指南

近日&#xff0c;OpenAI官方发布了学生如何利用ChatGPT提升写作的12条指南&#xff0c;值得深入研究学习。 在如今AIGC应用爆发增长的时间点&#xff0c;如何充分利用生成式AI工具&#xff0c;如ChatGPT&#xff0c;有效切快速的提升写作和学习能力&#xff0c;成为每个学生、…

探索大型语言模型(LLMs)能否在不泄露私人信息的情况下联合其他大型语言模型共同解决问题

概述 谷歌的 Gemini Ultra&#xff08;2023 年&#xff09;和 OpenAI 的 GPT-4 &#xff08;2023 年&#xff09;等大规模语言模型在许多任务中都表现出了令人印象深刻的性能。然而&#xff0c;这些模型不仅推理成本高昂&#xff0c;而且运行于数据中心&#xff0c;而数据中心…

CloudDM Team Docker 版安装指南

CloudDM Team 是一款全新的国产自研数据库管理工具&#xff0c;在《全新的企业级数据库数据安全管控平台》 一文中全面介绍了其核心功能和特点。本文将会介绍如何在 Ubuntu Linux 中安装并初步使用这款数据库管理工具。 准备工作 安装 Docker CloudDM Team 安装过程中需要用…

第22天Linux下常用工具

目录 第 1 章 vim 编辑器 1.1 vim 安装 1.2 vim 的使用 1.3 vim 的 4 种工作模式 第 2 章 gcc 编译器 2.1 编译流程&#xff08;以 main.c 为例&#xff09; 2.2 gcc 的常用参数 2.3 进行多模块编译 第 3 章 动态库静态库的制作 3.1 库的作用 3.2 库的分类与特点 …