Eine Do­ku­men­ta­ti­on ist in Ent­wick­lungs­pro­jek­ten sehr zeit­auf­wen­dig und Au­ßen­ste­hen­de erkennen oft nicht, wie hilfreich sie für die Wartung und Wei­ter­ent­wick­lung von Systemen ist. Das macht sich spä­tes­tens dann bemerkbar, wenn Wartung und Er­wei­te­rung nicht von dem Team durch­ge­führt werden, die das System ent­wi­ckelt haben – was eher die Regel als die Ausnahme ist.

Noch wichtiger ist die Do­ku­men­ta­ti­on der APIs, also der Ap­pli­ca­ti­on Pro­gramming In­ter­faces oder zu Deutsch: Schnitt­stel­len. Sie verbinden An­wen­dun­gen mit­ein­an­der und die Ap­pli­ka­tio­nen mit Da­ten­quel­len und anderen Systemen. Es gibt heute kaum noch An­wen­dungs­fäl­le, in denen nicht eine Vielzahl von APIs die zentrale Rolle in Software-Ver­bin­dun­gen spielen. Um aber die Schnitt­stel­len verwenden zu können, muss man auch ihre Struktur und Funk­tio­nen kennen. Das er­mög­licht die OpenAPI-Spe­zi­fi­ka­ti­on Swagger, die als offenes Be­schrei­bungs­for­mat dabei hilft, den Überblick über die un­ter­schied­li­chen Fä­hig­kei­ten von APIs zu bewahren. Mit Swagger können auch Personen, die nicht direkt im Ent­wick­lungs­pro­zess in­vol­viert waren, APIs be­reit­stel­len: Sie sehen die genutzten Schnitt­stel­len und können sie gleich do­ku­men­tie­ren.

IONOS Ent­wick­ler API
Verwalten Sie Ihre IONOS Hosting-Produkte über unsere leis­tungs­star­ken APIs
  • DNS-Ma­nage­ment
  • SSL-Ver­wal­tung
  • API-Do­ku­men­ta­ti­on

Was ist Swagger?

Die Be­schrei­bung von APIs war in der Ver­gan­gen­heit aufgrund von un­ter­schied­li­chen Tech­no­lo­gien und Pro­gram­mier­spra­chen sehr komplex. Ein erster wichtiger Ord­nungs­punkt: Für die Ent­wick­lung von APIs ist mitt­ler­wei­le REST das Pro­gram­mier­pa­ra­dig­ma. Webseiten wie Google, Amazon und Twitter verwenden RESTful APIs. Früher wurden Schnitt­stel­len in der Web Services De­scrip­ti­on Language WSDL be­schrie­ben. Rein technisch lassen sich mit WSDL 2.0 auch REST-APIs be­schrei­ben, was aber unter Ent­wick­lern als sehr um­ständ­lich gilt. Die Web Ap­pli­ca­ti­on De­scrip­ti­on Language (WADL) sollte dieses Problem lösen, konnte aber aufgrund ihrer XML-Struktur nie stan­dar­di­siert werden.

Deshalb hat sich Swagger schnell zur wohl po­pu­lärs­ten Tech­no­lo­gie unter den API-Do­ku­men­ta­tio­nen ent­wi­ckelt. Genauer gesagt zur po­pu­lärs­ten Tech­no­lo­gie für die häufig ein­ge­setz­ten REST-APIs. Swagger wurde von Reverb ent­wi­ckelt, läuft aber mitt­ler­wei­le her­stel­ler­neu­tral als Open Source unter dem Mantel der Linux Foun­da­ti­on bzw. über die Open API In­itia­ti­ve. In Zuge dessen wurde Swagger auch in OpenAPI Spe­ci­fi­ca­ti­on umbenannt – ist aber in­of­fi­zi­ell weiterhin unter dem grif­fi­ge­ren Namen Swagger bekannt.

In einem Vortrag im Rahmen der API Con­fe­rence wurde Swagger am Beispiel von u. A. Spring Boot vor­ge­stellt und seine All­tags­in­te­grie­rung erklärt.

Das Kern­ele­ment von Swagger ist je nach Ein­satz­ge­biet eine JSON- oder eine YAML-Datei. Die Be­nut­zer­ober­flä­che, mit der man die Do­ku­men­ta­tio­nen ganz leicht erstellen kann, basiert auf HTML und Ja­va­Script. Grund­sätz­lich hat Swagger ein sprach­neu­tra­les und ma­schi­nen­les­ba­res Format. Über das User-Interface lässt sich nicht nur die Do­ku­men­ta­ti­on verwalten, sondern mit ihm kann Swagger zum Beispiel auch Ad-hoc-Tests durch­füh­ren.

Ein Vorteil von Swagger wird auch im um­fang­rei­chen Er­wei­te­rungs­mo­dus sichtbar, der durch eine Kern­bi­blio­thek, dem Swagger-Core, un­ter­stützt wird. Die Be­nut­zer­ober­flä­che wird Swagger UI genannt, der Code­ge­nera­tor Swagger Codegen, darüber hinaus gibt es einen Swagger Editor.

Aber die größte Stärke zieht Swagger, wie viele Open-Source-Angebote, aus dem um­fas­sen­den Ökosystem von GitHub. Hier finden Ent­wick­ler Code­ge­nera­to­ren für nahezu alle Pro­gram­mier­spra­chen. Swagger do­ku­men­tiert jede Schnitt­stel­le mit allen In­for­ma­tio­nen.

Die Do­ku­men­ta­ti­ons­da­tei beginnt mit der Angabe der ver­wen­de­ten Spe­zi­fi­ka­ti­ons­ver­si­on, dann folgen die ge­ne­rel­len In­for­ma­tio­nen zum API, klar sortiert unter der Kategorie info. Swagger trennt auch Host, Pfad und URL-Schema und gibt sie einzeln an. Erst danach erfolgt der Mediatype für die gesamte API. Diese Auf­be­rei­tung ist wie ein komplexes Kar­tei­kar­ten­sys­tem.

Erst nach dieser Ka­te­go­ri­sie­rung werden die Inhalte dar­ge­stellt: Pfade, Ope­ra­to­ren und Parameter werden mitsamt der zu­ge­hö­ri­gen Be­schrei­bung auf­be­rei­tet. Da­ten­ty­pen werden extra in einem eigenen Abschnitt verwaltet. Durch das Swagger UI lässt sich das Ganze nicht nur in Textform dar­stel­len, sondern auch grafisch vi­sua­li­sie­ren. Das ist vor allem von Vorteil, wenn direkte Test­an­fra­gen aus dem Browser gesendet werden sollen. Diese Mischung aus perfekter Do­ku­men­ta­ti­on und der gleich­zei­ti­gen Mög­lich­keit, direkte API-Anfragen aus­zu­lö­sen, macht Swagger so wertvoll.

Wofür wird Swagger genutzt?

Für die Ent­wick­lung von APIs ist eine or­dent­li­che, ver­ständ­li­che Do­ku­men­ta­ti­on es­sen­zi­ell. Nur mit ihr können die Schnitt­stel­len von Ent­wick­lern ein­ge­setzt werden. Das gilt noch mehr für öf­fent­li­che APIs: ohne Do­ku­men­ta­ti­on sind sie für die Community un­brauch­bar, lassen sie sich nicht ver­brei­ten und bringen keinen Erfolg.

Swagger ist die derzeit beste Mög­lich­keit, REST-APIs zu do­ku­men­tie­ren, da es nahezu alle Web­ser­vices und In­for­ma­tio­nen rund um die Schnitt­stel­le abbilden kann. Es wächst gleich­mä­ßig mit dem System und do­ku­men­tiert Än­de­run­gen au­to­ma­tisch. Das funk­tio­niert so gut, weil Swagger die Do­ku­men­ta­ti­on des REST-API direkt am Code hin­ter­legt.

Der Aus­gangs­punkt jeder API-Ent­wick­lung ist entweder der Pro­gramm­code – Code First – oder die Schnitt­stel­len­be­schrei­bung – Design First. Befindet man sich in einer Ent­wick­lung, die der Maxime Code First folgt, ist der ver­ein­bar­te Aus­gangs­punkt der Pro­gramm­code. Aus diesem kann Swagger direkt eine Do­ku­men­ta­ti­on ableiten, die un­ab­hän­gig von der ver­wen­de­ten Pro­gram­mier­spra­che und sowohl von Maschinen als auch von Menschen lesbar ist.

Auf der anderen Seite steht das Paradigma Design First. Wie bereits erwähnt sind häufig un­ter­schied­li­che Ent­wick­ler für eine Client- und Ser­ver­sei­te ver­ant­wort­lich. Bei Design First wird die Be­schrei­bung zuerst an­ge­fer­tigt. Die Codes werden an­schlie­ßend einfach mit Swagger generiert. Dafür gibt es Ge­ne­ra­to­ren für alle gängigen Pro­gram­mier­spra­chen und selbst die Vorlagen können nochmals angepasst bis erweitert werden.

Swagger bietet also nahezu au­to­ma­tisch einen kon­sis­ten­ten API-Code. Sollte etwas in der manuellen Pro­gram­mie­rung nicht stimmen, treten Kom­pi­lie­rungs­feh­ler auf, die die Ein­bin­dung in ein Con­ti­nuous-In­te­gra­ti­on-System au­to­ma­tisch sichtbar macht.

Fakt

Große Un­ter­neh­men wie Zalando verfolgen ein API-First-Prinzip und setzen hierbei auf Swagger. Die Ent­wick­ler der Ver­kaufs­platt­form haben die Wich­tig­keit von funk­tio­nie­ren­den Schnitt­stel­len erkannt und stellen sie daher in den Fokus ihrer Auf­merk­sam­keit. Intern werden die APIs zwischen den Services ver­schie­de­ner Teams genutzt, extern gibt es APIs zum Abruf von bei­spiels­wei­se Artikeln oder Be­wer­tun­gen.

Swagger – Ordnung hat nur Vorteile

Die Vorteile von Swagger über­wie­gen so stark, dass man Swagger durchaus als her­vor­ra­gen­de Stan­dard­an­wen­dung für die Schnitt­stel­len­be­schrei­bung bei RESTful APIs be­zeich­nen kann. Wie viele andere Open-Source-An­wen­dun­gen pro­fi­tiert Swagger von einer hohen Ver­brei­tung und damit bedingt einer um­fang­rei­chen Tool-Un­ter­stüt­zung. Das Gremium von Swagger besteht aus Tech-Größen wie Microsoft, IBM und Google, wodurch die OpenAPI Spe­ci­fi­ca­ti­on nach­hal­ti­ge Rü­cken­de­ckung genießt – auch wenn es Al­ter­na­ti­ven gibt: Die Restful API Modelling Language (RAML) basiert bei­spiels­wei­se ebenfalls auf YAML und kann sogar noch kom­ple­xe­re De­fi­ni­tio­nen als Swagger schaffen. Der Ersteller von RAML (Mulesoft) ist aber in­zwi­schen selbst der OpenAPI In­itia­ti­ve bei­getre­ten.

Ein kleiner Nachteil von Swagger ist die Ver­ständ­lich­keit und Les­bar­keit der Do­ku­men­ta­ti­on. Zwar bietet Swagger bereits ein relativ gut auf­be­rei­te­tes Format, dennoch benötigt man etwas Zeit für die Ein­ar­bei­tung. Dass es noch einfacher geht, beweist API Blueprint mit einer Markdown-Syntax.

Ein prak­ti­sches Swagger-Beispiel zur Ein­füh­rung

Auf der Swagger-UI-Website findet man das komplette Swagger-ZIP-Paket. Nach dem Download muss ent­schie­den werden, ob Swagger lokal oder auf einem Server betrieben werden soll.

Achtung: Wenn es lokal laufen soll, benötigt man MAMP. Der entpackte Ordner Swagger UI Master wird dann entweder ins MAMP-Ver­zeich­nis oder auf den Server gelegt. Jetzt braucht man nur noch die URL des Servers bzw. des Lo­cal­hosts im Browser aufrufen und Swagger öffnet sich au­to­ma­tisch und die erste API-Do­ku­men­ta­ti­on startet.

Noch einfacher geht es mit der Web-Version des Swagger-Editors. Dieser lässt sich pro­blem­los im Browser bedienen und man pro­fi­tiert davon, neben dem Text­edi­tor eine grafisch auf­be­rei­te­te Fassung der Do­ku­men­ta­ti­on angezeigt zu bekommen.

swagger: "2.0"
info:
    description: "Dies ist ein Swagger-Beispiel"
    version: "1.0.0"
    title: "Swagger Beispiel"
    termsOfService: "http://swagger.io/terms/"
basePath: "/v2"
tags:
- name: "Beispiel"
    description: "Beispiele für Swagger"
    externalDocs:
        description: "Weitere Informationen"
        url: "http://example.org"
schemes:
- "https"
- "http"
paths:
    /Beispiel:
    /Beispiel/Inhalt:
        get:
            tags:
            - "Beispiel"
            summary: "Beispiel-Element abfragen"
            produces:
            - "application/json"
            parameters: []
            responses:
                "200":
                    description: "successful operation"
                    schema:
                        type: "object"
                        additionalProperties:
                            type: "integer"
                            format: "int32"
            security:
            - api_key: []

An diesem kurzen Auszug eines Swagger-Beispiels kann man schon den ver­ständ­li­chen Aufbau erkennen. Alle In­for­ma­tio­nen sind klar benannt und können un­ab­hän­gig von einer Pro­gram­mier­spra­che ver­stan­den werden.

An­schlie­ßend lässt sich die Do­ku­men­ta­ti­on direkt als YAML-Datei ex­por­tie­ren oder zuerst ins JSON-Format umwandeln. Das ist die Do­ku­men­ta­ti­ons­da­tei, die im Swagger UI gelesen werden kann. Die an­ge­zeig­ten Inhalte zeigen zunächst die Pfade, Schnitt­stel­len und Endpunkte. Danach kommen die Be­schrei­bun­gen, Parameter sowie der Response und seine Be­deu­tun­gen. An den End­punk­ten können die Ad-hoc-Tests über die Swagger Be­nut­zer­ober­flä­che aus­ge­führt werden.

Das Gute an Open Source ist, dass man die Tools kostenlos aus­pro­bie­ren kann. Das gilt im Falle von Swagger für das UI und auch für sämtliche Tools. Man kann sich also selbst ein Bild von den Mög­lich­kei­ten Swaggers machen.

Zum Hauptmenü