Я пытаюсь расширить существующее приложение Python 3 для включения REST API. Я искал несколько дней, пытаясь выяснить, как сделать REST API подкомпонентом существующего приложения, но руководства, которые я нахожу для таких вещей, как Flask, Eve и т. Д., Не показывают, как запустить производство. API, если непосредственно не запущено само приложение API.
Я успешно добавил REST API Flask в свое приложение, и оно отвечает, как и ожидалось. Тем не менее, он работает таким образом, что не поддерживается и предположительно небезопасен, по крайней мере, по словам разработчиков. Когда я запускаю свое приложение, появляется предупреждающее сообщение о том, что вместо этого я должен использовать сервер WSGI:
* Serving Flask app "api" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
По общему признанию, я новичок в этом, поэтому я не уверен, что это значит или если / как это будет работать в моей ситуации. По сути, я пытаюсь сделать это:
import api as API
class Stuff(object):
def setup(self):
...
self.apiThread = API(...)
def run(self):
...
self.apiThread.start()
Приложение большое, сложное, зрелое и стабильное, поэтому я не могу и / или не знаю, как заставить его работать в качестве подкомпонента приложения API, такого как this :
from werkzeug.wrappers import Request, Response
@Request.application
def application(request):
return Response('Hello, World!')
if __name__ == '__main__':
from werkzeug.serving import run_simple
run_simple('localhost', 4000, application)
Я видел руководства типа этого , которые помогли мне в некоторой степени понять внутренности веб-сервера, но я пока не могу найти производственное решение, которое имеет смысл для меня. Должен ли я реализовать класс, подобный тому, что показан на page 2 , и затем создать его экземпляр в потоке, как я показал в моем примере Stuff
class? Будет ли это работать правильно, или я все еще что-то упустил?
Любое руководство будет с благодарностью.
Редактировать: gunicorn
предложения кажутся общими и правильными для многих случаев использования - возможно, в том числе и моего - но я пока не понимаю, почему. Информация на странице gunicorn
говорит об этом в первой строке:
If you want to deploy your Flask application to a WSGI server...
Я уже застрял, потому что я не создал приложение колбу. Я использую флеш-сервер в потоке как очень незначительную часть гораздо большего приложения. Я не понимаю, как перевернуть это, так сказать.