Generator
Klienci, serwery i dokumentacja z kontraktu
apigenie-generator zamienia opisy API w klientów i serwery w sześciu językach oraz w witryny z dokumentacją, z bibliotekami, których każdy język już używa.
- Bez zależności od środowiska uruchomieniowego API GenieFunkcje pomocnicze klienta są generowane do Twojego pakietu. Serwery używają frameworków docelowego języka, nie środowiska API Genie.
- Generuj ponownie bez nadpisywania handlerówTrzymaj handlery poza wygenerowanym pakietem. Ponowne generowanie zastępuje wygenerowane pliki, nie Twoją implementację. Przewodnik pokazuje ten podział na serwerze w TypeScripcie.
- Sprawdzone zestawem testów zgodnościWygenerowany kod jest porównywany ze snapshotami i sprawdzany narzędziami danego języka. Testy kontraktowe uruchamiają klientów i serwery; pokrycie i ograniczenia zależą od celu.
Jeden kontrakt na wejściu, Twój kod poza pakietem
Cztery rodzaje wyjścia z tego samego pliku. Handlery wygenerowanego serwera mieszkają w Twoich plikach, a ponowne generowanie ich nie rusza.
Jak wygląda wygenerowany klient
Klient Fetch ma typowaną funkcję na każdą operację. Typy trafiają do types.ts, funkcje pomocnicze żądań do runtime.ts. Oba są generowane do Twojego pakietu.
$ apigenie-generator client fetch orders.yaml -o client
$ ls client/src
index.ts metadata.ts operations.ts runtime.ts types.ts
$ # client/src/operations.ts, one function per operation:
/** Get an order */
export async function getOrder(params: GetOrderParams, options?: RequestOptions): Promise<Order> {
const result = await request(
{
method: "GET",
path: "/orders/{orderId}",
pathParams: { orderId: params.orderId },
security: [["ApiKey"]],
responseFormat: "json",
},
options,
);
return result as Order;
}Znajdź cel dla swojego kontraktu
Obsługa języków zależy od standardu wejściowego i wyjścia, którego potrzebujesz. Dla kodu ze Swagger 2.0 najpierw skonwertuj do OpenAPI (eksperymentalne). Dokumentacja generatora wymienia opcje i ograniczenia każdego celu.
| Wejście | Wygenerowane wyjście | Języki |
|---|---|---|
| OpenAPI od 3.0 do 3.2 | Klienci i serwery API | TypeScript, Java, Go, Python, C# i Elixir |
| AsyncAPI 3.x | Klienci i aplikacje do przesyłania wiadomości | TypeScript, Java, Go, Python, C# i Elixir |
| GraphQL | Serwery Absinthe | Elixir |
| Protobuf | Klienci i serwery gRPC | Elixir |
| JSON Schema | Schematy walidacji Zod (eksperymentalne) | TypeScript |
Frameworki, których może użyć Twój kod
- TypeScriptKlienci Fetch, serwery Express, oRPC i MCP (eksperymentalne), klienci i aplikacje KafkaJS i WebSocket, schematy Zod.
- JavaKlienci dla Spring
RestClient,RestTemplate, OpenFeign lub interfejsów HTTP; serwery Spring Boot; klienci i aplikacje Kafka. - GoKlienci i serwery
net/http, pakiety klienckie i aplikacje Kafka. - PythonKlienci httpx i Pydantic, serwery FastAPI, klienci aiokafka i aplikacje FastStream dla Kafka, RabbitMQ i MQTT.
- C#Klienci
HttpClientdla .NET 8, serwery ASP.NET Core Minimal API, klienci i aplikacje Kafka. - ElixirKlienci Req, serwery i kanały Phoenix, serwery GraphQL Absinthe oraz klienci i serwery gRPC na elixir-grpc.
Nie tylko kod
- Witryny z dokumentacjąStatyczna witryna z plików OpenAPI, Swagger 2.0, AsyncAPI, GraphQL i Protobuf, z wyszukiwaniem, Try it out, tłumaczeniami i changelogami z Gita.
- Dane testoweWartości zgodne z dowolnym schematem dokumentu OpenAPI, jedna lub wiele, jako JSON lub YAML.
- Schematy walidacjiSchematy Zod z JSON Schema (eksperymentalne).
- NakładkiCele kodu OpenAPI i AsyncAPI oraz
dataprzyjmują--overlay, więc ustawienia generatora zostają poza opisem API. Cele dokumentacji, GraphQL i Protobuf nie.
Instalacja
Pakiety CLI zawierają apigenie-generator. Zainstaluj przez Homebrew lub npm albo pobierz natywny pakiet lub archiwum. W Dockerze użyj docker run --entrypoint apigenie-generator mykulyak/apigenie.