2017-06-08 1 views
0

Context: Konvertieren von Swagger aus aktueller REST Dokumentation in 1.2-Spezifikation auf 2,0apikey als Abfrage param in Swagger UI 2.0

Umwelt: Java 8, Prahlerei-Maven-Plugin 3.0.1, Prahlerei Anmerkungen (com .wordnik)

Wo ich stecke: Ich konnte die REST-API-Dokumentation erfolgreich generieren. REST-APIs benötigen jedoch einen ApiKey als Abfrageparameter. In 1.2-Spezifikation wurde dieses Mehr in index.html

den folgenden Ausschnitt mit
function addApiKeyAuthorization() { 
    var key = $('#input_apiKey')[0].value; 
    log("key: " + key); 
    if(key && key.trim() != "") { 
     log("added key " + key); 
     //window.authorizations.add("api_key", new ApiKeyAuthorization("api_key", key, "query")); 
     window.authorizations.add("apiKey", new ApiKeyAuthorization("apiKey", key, "header")); 
    } 
    } 

    $('#input_apiKey').change(function() { 
    addApiKeyAuthorization(); 
    }); 

    // if you have an apiKey you would like to pre-populate on the page for demonstration purposes... 

    var apiKey = "ABCD"; 
    $('#input_apiKey').val(apiKey); 
    addApiKeyAuthorization(); 

jedoch für 2.0-Spezifikation, meine Suche auf die folgenden Änderungen in der YAML-Datei geführt.

securityDefinitions: 
UserSecurity: 
    type: apiKey 
    in: header 
    name:myApiKey 

Die aktuelle index.html hat folgende in Fensterfunktion:

window.onload = function() { 
    // Build a system 
    const ui = SwaggerUIBundle({ 
    url: "http://someCoolsite.com/swagger.json", 
    dom_id: '#swagger-ui', 
    presets: [ 
     SwaggerUIBundle.presets.apis, 
     SwaggerUIStandalonePreset 
    ], 
    plugins: [ 
     SwaggerUIBundle.plugins.DownloadUrl 
    ], 
    layout: "StandaloneLayout" 
    }) 
    window.ui = ui 
} 

Antwort

0

Nach weiterer Exploration, ich habe Antwort auf meine Frage oben gefunden.

Erstens: Meine index.html ist wie folgt:

<script> 
$(function(){ 
    window.onload = function() { 
    // Build a system 
    const ui = SwaggerUIBundle({ 
    url: "http://www.webhostingsite.com/swagger.json", 
    dom_id: '#swagger-ui', 
    presets: [ 
     SwaggerUIBundle.presets.apis, 
     SwaggerUIStandalonePreset 
    ], 
    plugins: [ 
     SwaggerUIBundle.plugins.DownloadUrl 
    ], 
    layout: "StandaloneLayout" 
    }) 
    window.ui = ui 
} 
window.onFailure = function(data) { 
    log("Unable to Load SwaggerUI"); 
} 

function addApiKeyAuthorization() { 
    var key = $('#input_apiKey')[0].value; 
    log("key: " + key); 
    if(key && key.trim() != "") { 
    log("added key " + key); 
    //window.authorizations.add("api_key", new ApiKeyAuthorization("api_key", key, "query")); 
    window.authorizations.add("apiKey", new ApiKeyAuthorization("apiKey", key, "query")); 
    } 
} 

$('#input_apiKey').change(function() { 
    addApiKeyAuthorization(); 
}); 
}); 

Dann habe ich meine swagger.json aktualisiert, wie unten zu sein:

{ 
    "swagger" : "2.0", 
    "securityDefinitions": { 
    "apiKey": { 
    "type": "apiKey", 
    "name": "apiKey", 
     "in": "query" 
    } 
    }, 
    "host" : "<api base path>", 
    "basePath" : "/v1", 
    "security": [{"apiKey": []}]", //Global security (applies to all operations) 
    ....... 

Drittens: Hosted-Index. html und swagger.json auf AWS S3 für das statische Webhosting.

Der Teil, wo ich falsch ging, war, "security": [{"apiKey": []}]".

Ich machte "security":{"apiKey":[]} die ganze Zeit vergessend, dass Wert von "Sicherheit" ist eine Liste.

Hoffe, das hilft.