自动生成代码
集成 openapi-ts-request 插件,可以根据接口文档自动生成 js,ts,uni.request,vue-query 代码。
支持 apifox/swagger/opeanpi/yapi 等接口文档,更多配置详情请查看 openapi-ts-request 插件。
如何使用
你只需要将接口文档对应的接口配置url,复制到根目录的 openapi-ts-request.config.ts
插件的配置文件中的 schemaPath
字段中,然后运行 npm run openapi-ts-request
命令,就可以生成代码。 支持同时配置多个接口文档url,生成的代码默认会放在 src/service/app
目录下,你可以自己调整生成代码的目录。
配置如下:
ts
import type { GenerateServiceProps } from 'openapi-ts-request'
export default [
{
schemaPath: 'http://petstore.swagger.io/v2/swagger.json',
serversPath: './src/service/app',
requestLibPath: `import request from '@/utils/request';\n import { CustomRequestOptions } from '@/interceptors/request';`,
requestOptionsType: 'CustomRequestOptions',
isGenReactQuery: true,
reactQueryMode: 'vue',
isGenJavaScript: false,
},
] as GenerateServiceProps[]
生成 ts 代码
ts 的 type 类型会默认生成在 src/service/app/types.ts
文件,你可以通过引入它们进行使用。
ts
import { type Category } from '@/service/app'
const category: Category = {
id: 1,
name: '张三',
}
生成 uni.request 代码
ts 的 uni.request 客户端会默认生成在 src/service/app
目录下,以模块名进行分类,你可以通过引入它们进行使用。
ts
import { getPetById } from '@/service/app'
onShow(() => {
const res = await getPetById({ id: 1 });
console.log('res: ', res)
})
生成 vue-query 代码
vue-query 的代码会默认生成在 src/service/app
目录下,以模块名进行分类,后缀为 moduleName.vuequery.ts
,你可以通过引入它们进行使用。
ts
import { useQuery } from '@tanstack/vue-query'
import { findPetsByStatusQueryOptions, usePlaceOrderMutation } from '@/service/app'
// get请求使用,findPetsByStatusQueryOptions 方法为自动生成 react-query 函数
export function findPetsByStatusQueryOptions(options: {
// 叠加生成的Param类型 (非body参数openapi默认没有生成对象)
params: API.findPetsByStatusParams;
options?: CustomRequestOptions;
}) {
return queryOptions({
queryFn: async ({ queryKey }) => {
return apis.findPetsByStatus(queryKey[1] as typeof options);
},
queryKey: ['findPetsByStatus', options],
});
}
// vue-query useQuery 默认使用
const {
data,
error
isLoading,
refetch,
} = useQuery(findPetsByStatusQueryOptions({ params: { status: ['available'] } }))
// vue-query useQuery 额外配置
const {
data,
error
isLoading,
refetch,
} = useQuery({
...findPetsByStatusQueryOptions({ params: { status: ['available'] } }),
enabled: !!token,
})
// post, delete, patch请求使用,usePlaceOrderMutation 为自动生成 vue-query hook函数
export function usePlaceOrderMutation(options?: {
onSuccess?: (value?: API.Order) => void;
onError?: (error?: DefaultError) => void;
}) {
const { onSuccess, onError } = options || {};
const response = useMutation({
mutationFn: apis.placeOrder,
onSuccess(data: API.Order) {
onSuccess?.(data);
},
onError(error) {
onError?.(error);
},
});
return response;
}
// 定义请求
const { mutate, isPending } = usePlaceOrderMutation({
onSuccess: (data) => {
console.log('success data: ', data)
},
})
// 提交请求
mutate({
body: {
status: 'placed',
complete: true,
}
})