社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

是否可以在现有应用程序中嵌入python rest api?

Anthony • 5 年前 • 1472 次点击  

我正在尝试扩展现有的python 3应用程序,以包含rest api。我已经搜索了几天,试图找出如何使rest api成为现有应用程序的子组件,但是我在flask、eve等方面找到的指南并没有说明如何运行生产api,除非api应用程序本身是直接运行的。

我已经成功地将flask rest api添加到我的应用程序中,它按预期响应。然而,至少据开发人员说,它的运行方式是不受支持的,而且据称是不安全的。当我运行应用程序时,会生成一条警告消息,建议我改用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)

我见过这样的导游 this 这在某种程度上帮助我理解了web服务器的本质,但我还找不到一个对我有意义的生产解决方案。我是否应该实现一个类 page 2 然后在一个线程中实例化它,如我在示例中所示 Stuff 班级?那能正常工作吗?还是我还缺什么?

任何指导都将不胜感激。

编辑: gunicorn 对于许多用例来说,建议似乎是常见且正确的——可能包括我的——但是我还不明白为什么。关于 喷枪 佩奇在第一行这样说:

If you want to deploy your Flask application to a WSGI server...

我已经卡住了,因为我还没有建立一个烧瓶应用程序。我在一个线程中运行一个flask服务器,作为一个更大的应用程序的一个非常小的部分。可以这么说,我不明白该怎么扭转局面。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/42926
 
1472 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Maurice
Reply   •   1 楼
Maurice    6 年前

您的选择取决于您所说的“使其成为现有应用程序的子组件”是什么意思。

目前你有一个完全独立的应用,你可以使用像Gunicorn这样的通用应用服务器运行它( this article might help this 以及[由@roganjosh提到]。

如果你想扩展你成熟的应用程序来包含这些,解决方案主要取决于你正在使用的现有应用程序和框架-如果你添加更多细节,我会尽力帮助你。

Nobilis
Reply   •   2 楼
Nobilis    6 年前

nginx 一起 gunicorn flask 是python世界中常见的组合。 Here 对于为什么不想使用基本开发服务器(以及 here 是一个关于设置的简短教程)。你对自己的目标有点模糊,所以很难为你的案例推荐一些非常具体的东西,但这是一种安全的、经过战斗测试的、广受支持的方法。

您可以启动api服务器,只需要根据需要导入和调用应用程序的各个flask路由(例如 /reload route可以调用任何对重新加载应用程序配置有意义的方法)。

一个更好的方法是分别运行api服务器和应用程序,并使用一些传统的ipc在它们之间建立通信通道,或者根据您的需要,比如 zeromq (实例) here )