alibaba / pont

🌉数据服务层解决方案
MIT License
3.03k stars 254 forks source link
mock-data pont swagger typescript
[![Pont logo](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/332171/1648553869584-66c3761b-79f5-466d-92e4-ed4c6cdd3cf1.png#clientId=u9fdc963e-89e2-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=154&id=ub6370ba6&name=%E6%A1%A5%E6%A2%81.png&originHeight=200&originWidth=200&originalType=binary&ratio=1&rotation=0&showTitle=false&size=3585&status=done&style=none&taskId=ua3612409-5685-4d87-8de5-6cf3a398aea&title=&width=154)](https://github.com/alibaba/pont) # Pont - 搭建前后端之桥 [![npm version](https://badge.fury.io/js/pont-engine.svg)](https://www.npmjs.com/package/pont-engine) [![npm downloads](https://img.shields.io/npm/dm/pont-engine.svg?style=flat-square)](https://www.npmjs.com/package/pont-engine) [![GitHub license](https://img.shields.io/github/license/alibaba/pont)](https://github.com/alibaba/pont/blob/master/LICENSE) [![Gitter](https://badges.gitter.im/jasonHzq/pont-engine.svg)](https://gitter.im/jasonHzq/pont-engine?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) ![Pont Process](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/332171/1648634133414-a1f46be4-f9a7-4c1e-85fd-71d38594fbd0.png#clientId=u9fdc963e-89e2-4&crop=0&crop=0&crop=1&crop=1&id=mNKTs&name=image.png&originHeight=1090&originWidth=1584&originalType=binary&ratio=1&rotation=0&showTitle=false&size=192016&status=done&style=none&taskId=u6b14950f-c9a8-484b-b4ca-d82b93677a6&title=)

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

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

Pontx 用户请访问 Pontx

✨特性

⚡快速开始

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. 提示

🔍 文档

命令行

标准数据源模型

pont-config.json 配置项

定制化 Pont

VSCode 插件

自动化 mocks 服务

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

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

demo

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

👍 最佳实践

❓常见问题

  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

🎉 谁在使用

我们在这里列出了部分使用者,如果你的公司和产品使用了 Pont,欢迎到 这里 留言。