Как изменить путь к файлу swagger.json по умолчанию? - PullRequest
0 голосов
/ 19 мая 2018

Я создал указанную настройку Ngnix-Consul Docker https://github.com/nginxinc/NGINX-Demos/tree/master/consul-template-demo.

И создал множество микросервисов.Таким образом, все микросервисы доступны только после добавления имени службы, например,

http://example.com/service_name/get_data

Все работает нормально, тогда я хотел добавить swagger для всех микросервисов, поэтому попробовал с помощью фрагмента ниже. Я могу получить доступ к swagger ui, используя

http://example.com/service_name/ui

Но проблема в том, что я не могу загрузить swagger.json в этот пользовательский интерфейс, поскольку он пытается получить доступ к swagger.json по URL ниже

http://example.com/swagger.json

, но файл jsonна

http://example.com/service_name/swagger.json    

Как я могу изменить путь по умолчанию для swagger.json?

Приложения в микросервисах создаются в python-flask. Я попробовал ниже фрагмент

swagger: "2.0"
    info:
      description: "Add service"
      version: "1.0.0"
      title: "Add Service"
      contact:
        email: "abc@efg.com"
      license:
        name: "s1.0"
        url: "http://sample.com"
    host: "abc.efg.com"
    tags:
    - name: "add service"
      description: "service"
    - name: "delete service"
      description: "data"
    schemes:
    - "http"
    paths:
      /service_name/get_data:

и даже я попытался добавить basePath в файл swagger.yaml, тогда он даже не открыл swaggerui

swagger: "2.0"
    info:
      description: "Add service"
      version: "1.0.0"
      title: "Add Service"
      contact:
        email: "abc@efg.com"
      license:
        name: "s1.0"
        url: "http://sample.com"
    host: "abc.efg.com"
    basePath: "service_name"
    tags:
    - name: "add service"
      description: "service"
    - name: "delete service"
      description: "data"
    schemes:
    - "http"
    paths:
      /get_data:

Обновление:

from flask import Flask
import connexion

app = Flask(__name__)
app = connexion.App(__name__)
app.add_api('swagger.yaml')

//apis

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8090, debug=True)

Ответы [ 2 ]

0 голосов
/ 21 июня 2018

У меня была похожая проблема.Решением для меня было отключить перезапись пути на уровне NGINX, чтобы микросервис получал полный URL:

До:

Request: 
http://example.com/service_name/get_data

Service sees:
/get_data

После:

Request: 
http://example.com/service_name/get_data

Service sees:
/service_name/get_data

Только тогда вы можете указать basePath как " имя_службы " в файле swagger.yaml:

swagger: "2.0"
    info:
      description: "Add service"
      version: "1.0.0"
      title: "Add Service"
    host: "abc.efg.com"
    basePath: "service_name"
0 голосов
/ 08 июня 2018

Если файл swagger.json является статическим в конфигурации NGINX, вы можете сделать правило псевдонима следующим образом:

location ^~ /swagger.json {
    alias /path_to/swagger.json;
}
...