web-dev-qa-db-de.com

swaggerui kann am besten wissen, wo sich der Host befindet

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?

14
pm100

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

3
pm100

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.

dynamisches Beispiel

if (typeof this.Host === 'undefined' || this.Host === '') {
  this.Host = location.Host;
}
if (location.port) {
  this.Host = this.Host + ':' + location.port;
}
5
Fitch

In neueren Versionen von Swagger UI ist dies beispielsweise in onComplete möglich:

window.swaggerUi.api.setHost("your.Host:4242");

4
Teyras

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.

3
Chris Crewdson

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".

2
vm001uec

So habe ich das mit dem Java-Client gemacht:

DefaultApi api = new DefaultApi();
api.getApiClient().setBasePath("http://localhost:8080");
//call the API
0
Eduardo Andrade

Es gibt zwei Möglichkeiten, denen Sie folgen können:

  1. Laden Sie die index.html und ersetzen Sie "" https://petstore.swagger.io/v2/swagger.json "durch die URL, unter der Ihre swagger.json hostet.
    Sie können die lokale Datei swagger.json auf demselben Server verfügbar machen.
    Wenn Sie diesen Ansatz befolgen, stellen Sie sicher, dass Sie am Ende der obigen Schritte statische Dateien einfügen.
    Wenn Sie swagger.json nicht als API verfügbar machen möchten, kopieren Sie die Datei sawgger.json in den dist-Ordner von swagger. Die index.html und die swagger.json müssen sich dazu im selben Repository befinden. Es befindet sich in der index.html des dist-Ordners von swagger-ui-dist.
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;
      };
  1. Zweitens: Host-Parameter in der Datei swagger.yaml/swagger.json machen es entweder leer
    "Host":""
    oder Host-Parameter weglassen.
    Swagger nimmt den Host des Servers als Host, auf dem die Swagger-Benutzeroberfläche gehostet wird.
0

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.

swagger doc

In der Swagger-Ui wird der Standardwert verwendet. Das Feld ist jedoch ein Eingabefeld, sodass es zur Laufzeit angepasst werden kann.

 enter image description here

0