Swagger/OpenAPI-Generierung für Go (Golang): go-swagger und oapi-codegen
\n\nDie Entwicklung moderner Webdienste in Go erfordert eine strenge API-Spezifikation. OpenAPI (früher bekannt als Swagger) ist ein Standard zur Beschreibung von RESTful-Schnittstellen, der die Automatisierung der Erstellung von Clients, Servern und Dokumentation ermöglicht. Im Go-Ökosystem gibt es zwei wichtige Werkzeuge zur Generierung von Code aus OpenAPI-Spezifikationen: go-swagger und oapi-codegen. In diesem Artikel werden wir beide Ansätze, ihre Installation und praktische Anwendung im Detail besprechen.
\n\nWas ist OpenAPI und warum Code generieren?
\nDie OpenAPI Specification (OAS) ist ein Dateiformat (normalerweise YAML oder JSON), das die Endpunkte, Parameter, Datentypen und Antwortschemata Ihrer API beschreibt. Anstatt Handler, Modelle und Validierungen manuell zu schreiben, können Sie:
\n- \n
- Servercode mit Routen und Middleware generieren. \n
- Ein Client-SDK für andere Dienste generieren. \n
- Die Dokumentation automatisch aktualisieren (Swagger UI). \n
- Eine Desynchronisation zwischen Spezifikation und Implementierung vermeiden. \n
Werkzeug Nr. 1: go-swagger
\ngo-swagger ist ein leistungsstarkes, aber schwereres Werkzeug, das nicht nur die Generierung, sondern auch die Validierung von Spezifikationen unterstützt. Es eignet sich ideal für komplexe Projekte mit Versionierung.
Installation von go-swagger
\n# Installation über go install (Go 1.17+)\ngo install github.com/go-swagger/go-swagger/cmd/swagger@latest\n\n# Installation überprüfen\nswagger version\n\nServer aus einer Spezifikation generieren
\nAngenommen, wir haben eine Datei api.yaml:
openapi: "3.0.0"\ninfo:\n title: Pet Store\n version: "1.0.0"\npaths:\n /pets:\n get:\n summary: Alle Haustiere auflisten\n operationId: listPets\n responses:\n '200':\n description: Eine Liste von Haustieren\n content:\n application/json:\n schema:\n type: array\n items:\n $ref: '#/components/schemas/Pet'\ncomponents:\n schemas:\n Pet:\n type: object\n properties:\n id:\n type: integer\n name:\n type: string\n\nFühren Sie die Servergenerierung aus:
\nswagger generate server -f api.yaml -A petstore -t ./gen\nNach der Ausführung erscheinen im Ordner ./gen:
- \n
restapi/— Handler und Routen. \n models/— Datenstrukturen (Pet, Error usw.). \n cmd/— Einstiegspunkt der Anwendung. \n
Beispiel für die Implementierung eines Handlers
\npackage restapi\n\nimport (\n "net/http"\n "petstore/gen/models"\n "petstore/gen/restapi/operations"\n)\n\nfunc configureAPI(api *operations.PetstoreAPI) http.Handler {\n api.ListPetsHandler = operations.ListPetsHandlerFunc(\n func(params operations.ListPetsParams) middleware.Responder {\n pets := []*models.Pet{\n {ID: 1, Name: "Buddy"},\n {ID: 2, Name: "Milo"},\n }\n return operations.NewListPetsOK().WithPayload(pets)\n },\n )\n return api.Serve(nil)\n}\n\nWerkzeug Nr. 2: oapi-codegen
\noapi-codegen ist ein moderner, leichter und sehr schneller Generator vom Team DeepMap. Es unterstützt OpenAPI 3.0 und konzentriert sich auf Minimalismus. Es wird für neue Projekte empfohlen.
Installation von oapi-codegen
\ngo install github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen@latest\n\nGenerierung von Typen und Server
\nWir verwenden dieselbe Spezifikation api.yaml. Führen Sie aus:
oapi-codegen -generate types,server -package petstore api.yaml > petstore.gen.go\nDas Flag -generate ermöglicht die Auswahl, was generiert werden soll:
- \n
types— Go-Strukturen und Typen. \n server— Server-Schnittstellen und Handler-Wrapper. \n
Auch in der Bibliothek
Gradle Kotlin DSL für Kotlin: Vollständige Anleitung mit Beispielen
Doctrine ORM für PHP: Komplettguide mit Praxisbeispielen
neverthrow für TypeScript: Komplette Anleitung mit Beispielen
Symfony/Cache für PHP: Komplette Anleitung mit Beispielen