Wenn ich meine swagger.json-Datei erstelle, weiß ich nicht, welchen Host ich verwenden soll. Ich kann jedoch herausfinden, wann meine Seite, die swaggerui hostet, geladen wird (in der Tat möchte ich dem Benutzer eine Auswahlmöglichkeit anbieten). Ich hoffte auf Optionen. Host auf der Config für das SwaggerUI-Objekt - ich sehe keine. Gibt es eine bestehende Methode, die ich nicht finden kann, oder muss ich mich einfach durch den Code hacken und diese Funktion hinzufügen?
zwei Wege
Ändern Sie swagger.js so, dass die Host-Option akzeptiert wird. swagger-UI übergibt Optionen an swagger-js, damit dies funktioniert. Ich habe Swagger-js mit diesem Fix angesprochen
Die zweite Wahl ist, dass die Swagger-UI einen 'spec'-Parameter akzeptiert. Dies bedeutet, dass die Hosting-Seite die Datei swagger.json laden kann, JSON.parse, die Host-Seite festgelegt und an den swaggerUi-Konstruktor übergeben wird. Dies ist schwieriger für den Anrufer, erfordert jedoch keine Codeänderungen für Swagger
Swagger verfügt über eine integrierte Json-Definition für die Host-Konfiguration oder kann mehrere Eingaben akzeptieren.
{
"swagger": "2.0",
"info": {
"title": "Why API",
"description": "Don't make that mistake again",
"version": "0.0.1"
},
"Host": "127.0.0.1:3000",
"schemes": [
"https"
]
}
Oder
"Host": "test.mydomain.com:3000",
"schemes": [
"https"
],
Oder Sie haben einen dynamischen Host, indem Sie eine Variable definieren und einen Hostnamen oder einen Rechnernamen oder andere Umgebungsvariablen aufrufen.
if (typeof this.Host === 'undefined' || this.Host === '') {
this.Host = location.Host;
}
if (location.port) {
this.Host = this.Host + ':' + location.port;
}
In neueren Versionen von Swagger UI ist dies beispielsweise in onComplete möglich:
window.swaggerUi.api.setHost("your.Host:4242");
Ich mache das, weil das in Dokument geladene Dokument nur ein JSON-Objekt ist:
var swaggerDoc = require('./api/swagger.json');
if (process.env.NODE_ENV === 'development') {
swaggerDoc.Host="localhost:" + process.env.PORT
}
// Initialize the Swagger middleware
swaggerTools.initializeMiddleware(swaggerDoc, function (middleware) {
// Other initialization
}
Auf diese Weise verschmutzen Sie Ihre API-Spezifikation nicht mit der Konfiguration der Entwicklungsumgebung.
Wenn Sie es auf demselben App-Server hosten, entfernen Sie einfach den Host-Schlüssel aus dem json und geben Sie den relativen Pfad im Schlüssel "basePath" an. als - "basePath": "/ rest/createcampaign".
So habe ich das mit dem Java-Client gemacht:
DefaultApi api = new DefaultApi();
api.getApiClient().setBasePath("http://localhost:8080");
//call the API
Es gibt zwei Möglichkeiten, denen Sie folgen können:
const ui = SwaggerUIBundle({
spec: location.Host,
url: "swagger.json",
dom_id: "#swagger-ui",
deepLinking: true,
presets: [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset],
plugins: [SwaggerUIBundle.plugins.DownloadUrl],
layout: "StandaloneLayout"
});
// End Swagger UI call region
window.ui = ui;
};
"Host":""
wenn Sie OpenApi 3.0 verwenden
Variablen können beliebige Werte haben oder auf eine Aufzählung beschränkt sein. In jedem Fall ist ein Standardwert erforderlich, der verwendet wird, wenn der Client keinen Wert angibt.
In der Swagger-Ui wird der Standardwert verwendet. Das Feld ist jedoch ein Eingabefeld, sodass es zur Laufzeit angepasst werden kann.