使用的公共代码库 @mittwald/api-client-* 包中。
命令行界面
使用这个包提供的CLI命令来构建您的API客户端 验证openapi规范:
acg validate spec/openapi.json
acg generate --name MittwaldAPIV2 spec/openapi.json src/generated --optionalHeader x-access-token
打印稿API
如果你需要在代码中生成客户端,你可以使用TypeScript API 在这个模板中演示:
import * as path from "path";
import { UniversalContentLoader } from "@mittwald/api-code-generator/js";
import { UniversalFileLoader } from "@mittwald/api-code-generator/js";
import { OpenApiSpec } from "@mittwald/api-code-generator/js";
import { CodeGenerationModel } from "@mittwald/api-code-generator/js";
import { prepareTypeScriptOutput } from "@mittwald/api-code-generator/js";
import { writeIfChangedAsync } from "@mittwald/api-code-generator/js";
const name = "MittwaldAPIV2";
const inout = `${process.cwd()}/spec/openapi.json`;
const output = `${process.cwd()}/src/generated`;
// Loading OpenAPI spec
const loader = new UniversalContentLoader(new UniversalFileLoader(input));
const openApiDoc = await loader.load();
// Parsing OpenAPI spec
const spec = await OpenApiSpec.parse(openApiDoc, {
skipValidation: flags.skipValidation,
});
// Building transformation model
const model = CodeGenerationModel.fromDoc(name, spec.document);
// Generating descriptors
const descriptorsFileContent = model.paths.compileDescriptors();
await writeIfChangedAsync(
path.join(output, "descriptors.ts"),
await prepareTypeScriptOutput(descriptorsFileContent),
);
// Generating types
const typesFileContent = await model.compileTypes({
rootNamespace: flags.name,
optionalHeaders: ["x-access-token"],
});
await writeIfChangedAsync(
path.join(output, "types.ts"),
await prepareTypeScriptOutput(typesFileContent),
);
// Generating client
const clientFileContent = model.paths.compileClient();
await writeIfChangedAsync(
path.join(output, "client.ts"),
await prepareTypeScriptOutput(clientFileContent),
);
// if needed: Generating React client
const reactClientFileContent = model.paths.compileReactClient();
await writeIfChangedAsync(
path.join(output, "client-react.ts"),
await prepareTypeScriptOutput(reactClientFileContent),
);