apiKey как параметр запроса в пользовательском интерфейсе Swagger 2.0

Контекст: преобразование Swagger из текущей документации REST в спецификации 1.2 в версию 2.0.

Среда: Java 8, swagger-maven-plugin 3.0.1, аннотации swagger (com.wordnik)

На чем я застрял: мне удалось успешно создать документацию REST API. Однако для REST API требуется ключ ApiKey в качестве параметра запроса. В спецификации 1.2 это было добавлено с помощью следующего фрагмента в index.html.

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();

Однако для спецификации 2.0 мой поиск привел к следующим изменениям в файле yaml.

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

Текущий index.html имеет следующую оконную функцию:

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
}

person mmraj    schedule 08.06.2017    source источник


Ответы (1)


После дальнейших исследований я нашел ответ на свой вопрос выше.

Во-первых: мой index.html выглядит следующим образом:

<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();
});
});

Then, I updated my swagger.json to be as below:

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

Третье: размещение index.html и swagger.json на AWS S3 для статического веб-хостинга.

Часть, где я ошибся, была "security": [{"apiKey": []}]".

Я все время делал "security":{"apiKey":[]}, забывая, что значение «безопасности» — это список.

Надеюсь это поможет.

person mmraj    schedule 12.06.2017