أمثلة
أمثلة عملية لـ @powerduck/openapi-codegen. تفترض جميعها وجود كائن مستند OpenAPI محلّل باسم document.
1. JavaScript fetch
import { generate } from "@powerduck/openapi-codegen";
const code = generate({
document,
path: "/pets/{id}",
method: "get",
language: "javascript",
client: "fetch",
});
console.log(code);
عملاء JavaScript الآخرون: axios وofetch وjquery وxhr. وللبدائل على خادم Node، استخدم node/fetch أو node/axios أو node/ofetch أو node/undici.
2. Python requests
const code = generate({
document,
path: "/pets",
method: "post",
language: "python",
client: "requests",
});
console.log(code);
عملاء Python الآخرون: aiohttp وhttp-client وhttpx-sync وhttpx-async.
3. cURL (shell)
const code = generate({
document,
path: "/pets/{id}",
method: "get",
language: "shell",
client: "curl",
serverUrl: "https://staging.example.com/v1",
securityValues: { bearerAuth: "YOUR_ACCESS_TOKEN" },
});
console.log(code);
عملاء shell الآخرون: wget وhttpie. لرفع multipart/form-data، يُفضَّل shell/curl أو shell/httpie على shell/wget.
4. اكتشاف مولّد واختياره
استخدم list() لمعرفة المولّدات المتاحة، ثم ولّد الشيفرة بزوج اللغة والعميل المختار:
import { generate, list } from "@powerduck/openapi-codegen";
const all = list();
console.log(all.length, "generators available");
const picked = all.find(
(g) => g.language === "python" && g.client === "requests",
);
if (!picked) throw new Error("generator unavailable");
const code = generate({
document,
path: "/pets",
method: "get",
language: picked.language,
client: picked.client,
});
5. تسجيل مولّد مخصص
نفّذ الواجهة Generator واستدعِ register:
import { register, generate } from "@powerduck/openapi-codegen";
import type { RequestIR } from "@powerduck/openapi-codegen";
register({
language: "mylang",
client: "my-client",
generate(request: RequestIR): string {
return [
`// ${request.method} ${request.baseUrl}${request.path}`,
`mylang.request(${JSON.stringify({
method: request.method,
url: request.baseUrl + request.path,
})})`,
].join("\n");
},
});
const code = generate({
document,
path: "/pets",
method: "get",
language: "mylang",
client: "my-client",
});
console.log(code);
6. استخدام إضافة
تجمع الإضافة تسجيل مولّد واحد أو أكثر عبر use():
import { use, generate } from "@powerduck/openapi-codegen";
use({
name: "internal-generators",
register(api) {
api.register({
language: "go",
client: "our-wrapper",
generate(request) {
return `// go wrapper for ${request.method} ${request.path}`;
},
});
api.register({
language: "ruby",
client: "our-wrapper",
generate(request) {
return `# ruby wrapper for ${request.method} ${request.path}`;
},
});
},
});
const code = generate({
document,
path: "/pets",
method: "get",
language: "go",
client: "our-wrapper",
});