【问题标题】:Best practice for running an Angular app which calls a Flask RESTful API运行调用 Flask RESTful API 的 Angular 应用程序的最佳实践
【发布时间】:2017-12-30 16:30:25
【问题描述】:

this tutorial 中,他们使用烧瓶创建了一个 API,您可以将其发布到该 API,它会给出响应。

然后它会告诉您创建一个调用 API 的 Angular 应用程序。

这将如何在 apache 服务器上工作?

本教程没有提到这一点,但我尝试在 apache 上使用 WSGI,它可以运行可以使用

重定向到 Angular 应用程序的烧瓶文件
@app.route('/')
def index():  
    return render_template('index.html',content=content)

这是部署 Angular 和 Flask 应用程序的典型方式吗?烧瓶调用角度 index.html 似乎很奇怪,有没有办法以较低的耦合度做到这一点?

使用 Flask 作为 RESTful API 并在同一服务器上运行 Angular 的标准是什么?

【问题讨论】:

    标签: apache angular flask flask-restful


    【解决方案1】:

    Flask是一个Web框架,在WSGI协议中起到WSGI应用的作用。它需要一个 WSGI 服务器与 http 客户端进行协商,然后调用您的 WSGI 应用程序来处理 http 请求。虽然 Flask 附带一个小型 WSGI 服务器用于开发,但您应该在生产中使用像 gunicorn 这样的 WSGI 服务器。

    Angular 应用由静态文件组成,应该由 http 服务器提供服务。 Nginx 是最好的静态文件 http 服务器。但是为了简单起见,Flask plus WSGI server 可以为你提供这些静态文件。所以你会看到

    烧瓶正在调用 angular index.html

    当涉及到您的问题时

    这是部署 Angular 和 Flask 应用的典型方式吗?

    这是一种典型的开发方式,但不是生产方式。

    有没有办法以较低的耦合度做到这一点? 使用 Flask 作为 RESTful API 并在同一服务器上运行 Angular 的标准是什么?

    1. 通过 Nginx 提供 Angular 文件。
    2. 使用 gunicorn 或其他 WSGI 服务器为 Flask 应用程序提供服务。
    3. 使用 Nginx 作为 WSGI 服务器的代理也是一个很好的做法。

    有什么问题吗?

    【讨论】:

    • 感谢您的回复!如果这是标准的生产实践,我肯定会选择最后一个选项。为 Flask 应用程序提供服务的 WSGI 服务器可以与 Nginx 服务器一起在同一台机器(ubuntu)上运行吗?我认为我的步骤是 1)将 Nginx 设置为 WSGI 的代理 2)将 Nginx 配置为服务器 Flask 应用程序 3)还将 Nginx 配置为服务器 Angular 文件......这是对的吗?
    • @EricNelson 嗨,我认为您的第 2 步)应该更正。 将 Gunicorn 配置为通过侦听 localhost 上的非 80 端口来为 Flask 应用程序提供服务。一般来说,Nginx 会监听 80 和 proxy-pass 到 Gunicorn 的端口,这样它们就可以在同一台服务器上运行。这种部署是 Python 网络中最流行的一种,我已经这样做了很多年。您可以找到有关使用 Gunicorn here 部署 Flask 应用程序的官方指南。
    • 嗨@mononoke,使用apache而不是nginx怎么样?无论如何它会起作用吗?有什么优缺点吗?
    • 嗨@FrancescoPegoraro,Apache Web 服务器也可以工作,因为它可以serve static files 并充当reverse proxy。不幸的是,我对 Apache 的经验很少,所以我不能直接告诉你优缺点。然而,人们普遍认为 NGINX 在高并发方面具有更好的性能,尤其是在服务静态文件方面。详细对比可以参考here。谢谢。
    【解决方案2】:

    无论您使用哪种 JS 框架进行 Web 开发,javascript 都必须在 HTML 文件中提供。这里 Flask 有两个角色,一个是提供 HTML 文件(可能还有静态文件,如 js、css 和图像),另一个是提供所有其余的 api 端点。我不认为这种设置有什么问题。但是对于生产环境,您可以使用 nginx 或任何 Web 服务器来提供静态文件,并且只使用烧瓶来提供 REST api 调用。如果您的网站流量不是很大,那么仅通过 Flask 提供所有服务也可以。

    【讨论】:

    • “仅使用烧瓶服务于 REST api 调用”是什么意思?我认为我总是需要像 apache2 或 nginx 这样的服务器来使用 WSGI 并将请求定向到烧瓶应用程序。
    猜你喜欢
    • 2019-03-24
    • 2014-03-18
    • 2013-01-06
    • 2020-07-11
    • 2013-03-14
    • 2020-08-22
    • 1970-01-01
    • 2014-02-24
    • 2012-10-08
    相关资源
    最近更新 更多