找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

336

积分

0

好友

41

主题
发表于 14 小时前 | 查看: 1| 回复: 0

UnoAPI 是干嘛的?

简而言之,UnoAPI 的核心功能是:自动生成前端项目中的 API 层代码

❓ 什么是“API 层”代码?

以常见的前端开发模式为例:当需要调用一个“获取用户列表”的接口时,开发者通常会在 src/api 目录下的 user.ts 文件中编写如下代码:

import { GetUserListQuery, UserInfo } from './model';
/**
 * 获取用户列表
 */
export function getUserList(query: GetUserListQuery) {
  return request<UserInfo[]>({
    url: 'xxx',
    method: 'GET',
    query,
  });
}

将所有与“用户”相关的接口集中管理在同一个文件中,便于在业务代码中复用,并天然支持 Tree Shaking

在业务组件中的调用方式如下:

import * as userApi from '@/api/user';
const userList = await userApi.getUserList({ xx: 'xxx' });

因此,这里所说的 API 层代码通常包括:

  • getUserList 请求函数
  • GetUserListQuery 入参类型定义
  • UserInfo 出参类型定义

UnoAPI 的作用,就是基于接口文档自动生成上述这些格式固定的代码和类型定义。

如何使用?

UnoAPI 设计为 “开箱即用”且对项目“零侵入” 的工具,旨在作为纯粹的开发辅助。你可以随时启用或停用,而不会在项目中留下任何必须的依赖或配置。

目前主要提供 CLI 命令行使用方式。

三种使用方式

1️⃣ 通过 npx 直接运行(无需安装)

npx @unoapi/cli -i <在线或本地的OpenAPI JSON文档URL/路径>

2️⃣ 全局安装后使用

# 全局安装
npm install @unoapi/cli -g
# 使用
uno -i <在线或本地的OpenAPI JSON文档URL/路径>

3️⃣ 使用配置文件(推荐用于常规项目)

对于需要重复使用的场景,可以创建配置文件来管理参数。

# 生成默认配置文件
uno init
# 使用配置文件运行(无需额外参数)
uno

无论采用哪种方式,都需要提供一个符合 OpenAPI 3.1 规范的 JSON 格式文档作为输入源。

核心参数说明

  • -i, --input:指定在线或本地的 OpenAPI JSON 文档路径。
  • -o, --output:指定生成代码的输出目录或文件。
  • --func:自定义生成的 API 函数名称。
  • --only-model:仅生成 TypeScript 类型定义文件。
  • --all:生成文档中的所有接口,而非交互式选择。

配置文件详解

通过 uno init 生成的配置文件允许进行更细致的控制:

  • input:文档地址,支持 URL 或本地路径,也支持异步函数以便处理需要鉴权的文档。
  • output:代码输出目录。
  • typeMapping:自定义类型映射规则。
  • onlyModel:设为 true 时只生成类型定义。
  • imports:在生成的 API 函数顶部插入的导入语句,通常用于引入项目自定义的 request 函数,这对统一项目请求风格非常重要。
  • ignores:通过正则表达式匹配,忽略不需要生成的接口或类型。
  • funcTpl自定义 API 函数模板。如果默认生成的函数不符合你的项目规范,可以利用此字段,根据提供的 ApiContext 上下文对象,返回一个符合团队风格的函数代码字符串。

🚀 快速体验

为了直观感受生成效果,可以直接运行以下命令(使用一个公开的钉钉接口文档):

npx @unoapi/cli -i https://unoapi.codingmo.com/api/dd-openapi-v31.json

执行后,CLI 会以交互形式让你选择需要生成的接口:

选择接口

选择完成后,工具会自动在指定目录生成对应的 TypeScript 文件与代码:

自动生成的代码

为什么要用 UnoAPI?

手动编写 API 层代码存在两个普遍问题:重复性高易出错。定义接口的入参、出参类型是一项繁琐且容易遗漏的工作。UnoAPI 通过解析后端提供的标准 OpenAPI 文档,自动化完成这部分编码,能显著提升开发效率并降低因手误导致的类型错误。

同时,它也有助于统一团队的代码规范,避免在赶工时直接使用 any 类型或省略类型定义等不良实践。

当然,如果你的项目现有 API 层架构与本文描述的模式迥异,那么这款工具可能并不适用。

常见问题解答

1. 使用时遇到问题怎么办?

UnoAPI 是一个开源项目,欢迎在 GitHub 仓库提交 Issue 或 Pull Request。请注意,维护者可能无法保证所有问题都能得到即时响应与修复。

2. UnoAPI 稳定吗?

目前版本仍处于早期阶段,无法保证绝对的稳定性与兼容性。功能细节可能随着版本迭代进行调整。但得益于其“零侵入”的设计,即使生成代码后不再使用该工具,或新版本存在变动,也不会对现有项目运行造成任何影响。

3. 不想用了怎么办?

直接停止使用即可。UnoAPI 不会在项目中添加任何运行时依赖,生成的代码是纯静态的 TypeScript 文件,如同手动编写的一样。配置文件也可随时安全删除。

4. VS Code 扩展会更新吗?

短期内暂无更新 VS Code 扩展的计划。除非能找到比 CLI 方式体验显著提升的交互模式,否则开发重心将放在核心命令行工具上。

后续计划

项目已完全开源,更新频率将取决于社区反馈和参与度。实际使用中遇到的问题将是驱动功能迭代的最佳方向。

您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-3 15:27 , Processed in 1.189761 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表