не удалось запустить сервер, сгенерированный swagger codegen - PullRequest
0 голосов
/ 17 апреля 2020

Я учусь разрабатывать успокоительный API для службы машинного обучения. Я использовал openapi spe c для определения своей спецификации API, и я попытался использовать flask rest для этого. Тем не менее, я считаю этот средний пост релевантным для моего намерения, поэтому я скачал исходный код и попытался запустить сервер локально, но оконечная точка сервера не удалась. Я мог запустить другое приложение flask на той же конечной точке, но этот проект не работает, даже если я следовал его инструкциям. Я создал свой open api spec файл, поэтому хочу изучить и понять этот средний пост при локальном запуске сервера. Может кто-нибудь указать мне, что происходит этот средний исходный код сообщения ? любое быстрое решение, чтобы выяснить, как запустить сервер локально? спасибо

за меня, простое приложение flask работает и может запускать его на конечной точке сервера.

from flask import Flask
app = Flask(__name__)


@app.route('/')
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run()

Я хочу запустить сервер из этого API с OpenAPI , потому что я хочу использовать ту же структуру для разработки моего API. Кто-нибудь может указать мне, почему я не могу запустить сервер? Любая идея?

обновление

в этот средний пост , все артефакты, сгенерированные генератором кода openapi и структурированные с помощью openapi spe c файл, поэтому возможность запуска сервера из его исходного кода поможет мне понять, как продолжить мой рабочий процесс.

1 Ответ

2 голосов
/ 17 апреля 2020

Примеры в указанном вами хранилище поставляются с docker файлами. Вы можете использовать Docker для быстрого раскрутки сервера.

cd api_tutorial/openapi/photo_album/codegen_server
docker build . -t codegen_server
docker run codegen_server

Однако это не работает.

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/runpy.py", line 193, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.8/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/usr/src/app/openapi_server/__main__.py", line 3, in <module>
    import connexion
  File "/usr/local/lib/python3.8/site-packages/connexion/__init__.py", line 3, in <module>
    from .apis import AbstractAPI  # NOQA
  File "/usr/local/lib/python3.8/site-packages/connexion/apis/__init__.py", line 1, in <module>
    from .abstract import AbstractAPI  # NOQA
  File "/usr/local/lib/python3.8/site-packages/connexion/apis/abstract.py", line 16, in <module>
    from ..operations import OpenAPIOperation, Swagger2Operation
  File "/usr/local/lib/python3.8/site-packages/connexion/operations/__init__.py", line 1, in <module>
    from .abstract import AbstractOperation  # noqa
  File "/usr/local/lib/python3.8/site-packages/connexion/operations/abstract.py", line 11, in <module>
    from ..decorators.response import ResponseValidator
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/response.py", line 12, in <module>
    from .validation import ResponseBodyValidator
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/validation.py", line 9, in <module>
    from werkzeug import FileStorage
ImportError: cannot import name 'FileStorage' from 'werkzeug' (/usr/local/lib/python3.8/site-packages/werkzeug/__init__.py)

Как указано на this Github проблема, эта проблема связана с connexion и не возникает с версией 2.6.0. Итак, давайте обновим requirements.txt для использования этой версии.

connexion == 2.6.0

Создайте и запустите снова с docker и вуаля, все должно работать.

docker run codegen_server
 * Serving Flask app "__main__" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)

Вы также можете запустить сервер без Docker, перейдя в каталог root и выполнив.

python -m openapi_server

Что, собственно, и делает docker, как мы видим в Dockerfile.

...

ENTRYPOINT ["python3"]
CMD ["-m", "openapi_server"]
...