Início rápido
Este guia apresenta os três caminhos mais comuns: as funções curlToOpenApi e postmanToOpenApi e a classe XToOpenApi para integrações personalizadas.
Pré-requisito: instale o pacote. Instalação
observação
Todas as funções de conversão são assíncronas e retornam um ConvertResult. Sempre use await.
1. Converter um comando curl
Passe um único comando curl para curlToOpenApi. O campo document do resultado contém o objeto OpenAPI 3.2 gerado.
import { curlToOpenApi } from "@powerduck/x-to-openapi";
const result = await curlToOpenApi(
`curl -X POST https://api.example.com/users \
-H 'Content-Type: application/json' \
--data '{"name":"Ada","age":36}'`,
);
console.log(JSON.stringify(result.document, null, 2));
O documento gerado fica assim, de forma resumida:
{
"openapi": "3.2.0",
"info": { "title": "Generated API", "version": "1.0.0" },
"servers": [{ "url": "https://api.example.com" }],
"paths": {
"/users": {
"post": {
"operationId": "postUsers",
"tags": ["users"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer" }
},
"required": ["name", "age"]
}
}
}
},
"responses": { "default": { "description": "Successful response" } }
}
}
}
}
Verifique se a conversão foi bem-sucedida e examine os diagnósticos:
if (!result.ok) {
for (const d of result.diagnostics) {
console.error(`[${d.severity}] ${d.code}: ${d.message}`);
}
}
console.log("Document valid:", result.documentValid);
2. Converter uma coleção Postman
Passe um objeto de coleção já analisado ou uma string JSON para postmanToOpenApi. Os scripts de teste são preservados como x-postman-scripts.
import { postmanToOpenApi } from "@powerduck/x-to-openapi";
const collection = {
info: {
name: "User API",
schema: "https://schema.postman.com/json/collection/v2.1.0/collection.json",
},
item: [
{
name: "Get user",
request: {
method: "GET",
url: "https://api.example.com/users/123",
header: [{ key: "Authorization", value: "Bearer token" }],
},
event: [
{
listen: "test",
script: {
type: "text/javascript",
exec: ["pm.test('status is 200', () => pm.response.to.have.status(200));"],
},
},
],
},
],
auth: { type: "bearer", bearer: [{ key: "token", value: "{{token}}" }] },
};
const result = await postmanToOpenApi(collection, {
title: collection.info.name,
inferPathParameters: true,
});
// The Postman test script survives on the operation:
console.log(result.document.paths["/users/123"]?.get?.["x-postman-scripts"]);
Uma string JSON também funciona:
const fromText = await postmanToOpenApi('{"info":{"name":"API"},"item":[]}');