pont

pont

前后端一体化API开发工具

Pont是一款开源的API开发工具,支持Swagger等多种接口文档平台。它可自动生成前端接口代码、mock数据和测试平台,具有跨语言支持、高度可定制等特性。Pont集成了VSCode插件,提供丰富的命令行工具和自动化mocks服务,简化API开发流程,提高前后端协作效率。

PontAPISwagger前后端代码生成Github开源项目
<div align="center">

Pont logo

Pont - 搭建前后端之桥

npm version npm downloads GitHub license Gitter

Pont Process

</div>

pont 在法语中是“桥”的意思,寓意着前后端之间的桥梁。Pont 把 swagger、rap、dip 等多种接口文档平台,转换成 Pont 元数据。Pont 利用接口元数据,可以高度定制化生成前端接口层代码,接口 mock 平台和接口测试平台。

其中 swagger 数据源,Pont 已经完美支持。并在一些大型项目中使用了近两年,各种高度定制化需求都可以满足。

Pontx 用户请访问 Pontx

✨特性

  • 跨语言 天然支持 Javascript 项目及 Typescript 项目。如果使用 JavaC++ 等语言,可定制代码生成器支持
  • 支持高度定制化 通过复写内部方法,各种高度定制化需求都可以满足
  • VSCode 插件支持 专门为 Pont 开发的 VSCode 插件 vscode-pont,完美支持 Pont 所有能力
  • 丰富的命令行提供丰富的命令行命令,满足不同场景的使用
  • 自动化 mocks 服务Pont 自动生成所有 mocks 数据,并提供所有接口的 mocks 服务

⚡快速开始

1. 安装

全局安装 pont-engine

# 选择一个你喜欢的包管理器 # NPM $ npm i -g pont-engine # Yarn $ yarn global add pont-engine # pnpm $ pnpm add -g pont-engine

2. 初始化

使用 pont start 命令,快速创建初始模板 test9.gif

3. 安装 VSCode 插件

打开 VSCode 插件商店,输入 vscode-pont 搜索安装 image.png

4. 沉浸式接口开发

插件安装成功后,点击 Pont 图标,打开面板进行进一步操作。更多插件相关请参考 插件文档 image.png

点击接口代码片段图标,打开接口列表,搜索后生成接口代码片段,快速开始接口开发 test12.gif

5. 联调维护

实时发现后端接口更新 image.png 更新接口层后,可迅速定位接口调用代码,进行调用修改。 image.png

6. 自定义

Pont 支持自定义数据获取 、数据源预处理、自定义代码生成器等。请参考 定制化 Pont

7. 提示

  • 确保服务端使用 Swagger(目前只支持 Swagger V2、V3),提供的数据源接口是免登录的。如果不是,请后端帮忙简单配置一下,或者使用 fetchMethodPath 配置,通过自定义数据获取来获取带鉴权的接口的文档。
  • 若需替换默认的请求信息,请参阅 pontCore

🔍 文档

命令行

标准数据源模型

pont-config.json 配置项

定制化 Pont

VSCode 插件

自动化 mocks 服务

mocks.enable 配置为 true,pont 将自动生成所有 mocks 数据,并提供所有接口的 mocks 服务。此外 IDE 提供如下功能

  • 右键 pont 接口代码,可以跳转(jump to mock position)去编辑接口的 mocks 数据
  • 右键 pont 接口代码,可以访问(visit mocks interface) GET 类型的 mocks 接口。

mocks 自动生成所有 mocks 数据,你也可以自由更新 mocks 数据,支持 mockjs 语法更新 mocks 数据。

demo

参考下面的例子,来体验 pont。

👍 最佳实践

  • 项目 pre-commit hook 中,加上 pont check,防止本地数据源被研发人员损坏。
  • 很多 Swagger 所有的接口返回的类型都类似是 Result,主要是囊括了约定的接口错误字段,类似 { errorCode: 0, data: T, errMessage: '' }。这里建议,让后端 Swagger 的接口返回类型,去掉这个 Result 外壳。只返回 data 的 T 类型。
  • vscode 配置 trigger suggest 的快捷键(cmd K + cmd S),传参时,用快捷键触发提醒,非常好用;
  • pont template 配置 API、defs 为全局变量;这样不需要 import 任何接口、实体类;使用 API 直接触发建议找到 模块、接口,非常方便
  • 快捷键 cmd + ctrl + p 进行接口查找,非常方便;
  • 善于利用实体类(defs),可以当成类型用、也可以作为逻辑实现的辅助;实体类是后端写得实体类,前端自己写实体类,既没有必要,长期来看也会和后端的实现差异越来越大。如果有自定义逻辑,继承 defs 实体类即可。
  • redux 项目,建议结合 https://github.com/nefe/iron-redux,一个致力类型完美和去冗余的轻量化 redux 库。例如类型友好的,运行安全的 get 方法:https://github.com/nefe/iron-redux#safeget

❓常见问题

  1. demo 中,生成代码的 pontFetch 函数,是要自己实现的吗? 答:pontFetch 是用户自己项目的请求公共方法。因为每个项目的接口有自己的业务逻辑,比如如何判断接口返回的结果是否正确,所以 pont 的默认模板并没有自己实现一套 fetch 方法。另外 Pont 生成的代码是可以用自定义模板配置的。可以在模板上更改 pontFetch 的引用路径和名字。
  2. nestjs 搭配的 Swagger JSON 生成出来的 pont 文件为什么没有 mods? 答:nestjs 中的 Swagger 必须在每个 Controller 上添加 ApiUseTags 装饰器,并且在每个控制器的方法上添加 ApiOperation 装饰器 才能正确输出带 Tags 以及 operationId 的 Swagger JSON。Tags 和 operationId 是 pont 必需的(@nestjs/swagger 自动生成的 default Tags 暂时不被兼容)。 示例如下 (@nestjs/swagger@^3) 对于 @nestjs/swagger@^4,需要如下配置来手动注册 Tag
import { Controller } from '@nestjs/common';
import { ApiUseTags, ApiOperation, ApiOkResponse } from '@nestjs/swagger';

@ApiUseTags('pet')
@Controller('pet')
export class PetController {
  @ApiOperation({ title: 'getDog', operationId: 'getDog' })
  @Get()
  getDog() {}
}
// ... const options = new DocumentBuilder().setTitle('your app').addTag('pet').build(); const document = SwaggerModule.createDocument(app, options); SwaggerModule.setup('/api', app, document);
  1. API、defs 全局变量找不到 答:将 pont 生成的 api.d.ts 塞到 tsconfig.json 中的 includes 数组最前面。并在项目入口处 import pont 生成的入口文件。
{ "compilerOptions": { "allowJs": true, "checkJs": true, "outDir": "./**" }, "include": ["./services/api.d.ts", "./src"], "exclude": [] }

其它接口平台接入

目前 pont 支持 Swagger V2 V3 三种数据源。其他类型数据源只需要在 scripts 中添加对应的数据格式转换文件,把对应数据格式转换为 pont 标准格式,即可适配新的数据源类型。希望社区可以踊跃贡献代码,接入更多类型的数据源!

钉钉用户群

群号:33661609

🎉 谁在使用

我们在这里列出了部分使用者,如果你的公司和产品使用了

编辑推荐精选

商汤小浣熊

商汤小浣熊

最强AI数据分析助手

小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。

imini AI

imini AI

像人一样思考的AI智能体

imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI助手AI工具AI写作工具AI辅助写作蛙蛙写作学术助手办公助手营销助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
下拉加载更多