我可以在具有Api的同一个FastApi中使用角度应用程序吗?

问题描述

我有一个在FastApi框架中开发的Api。 我有一个名为FastApi的Angular应用程序。 由于多种原因,如果我可以在FastApi中将角度应用程序部署为简单的Web应用程序,那就太好了(网络名称,参数,泊坞窗映像等)。这样,我可以以“ localhost”的身份访问Api,而Api可以是“私有”。

这可能吗?

谢谢你, 乔斯·克鲁兹(JoséCruz)

解决方法

我不知道它是否可以帮助你,但它对我有用。

我警告你,这不是一个好的做法,但在我应用它的上下文中解决了我的问题。

我有一个小型 Angular 应用程序,它登录并验证重定向到 FastAPI 的 Redoc 和 Swagger 文档。

我建立了一个包含静态文件的目录并将角度构建放在里面。在 FastAPI 中,我创建了一个端点读取并提供 index.html 文件。

为了让 Angular 看到文件,我通过传递 --base-href 标志指向挂载的静态目录来构建 Angular。

代码如下:

project/
    static/
        index.html
        ... (files app angular)

    main.py

ma​​in.py

from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles


app = FastAPI()

app.mount("/static",StaticFiles(directory="static"),name="static")


@app.get('/')
def get_app_angular():

    with open('static/index.html','r') as file_index:
        html_content = file_index.read()
    return HTMLResponse(html_content,status_code=200)

构建 APP Angular:

ng build --base-href static/ --prod

,

不,据我所知这是不可能的。就像说两种不同的语言一样。使用JSON文件,您也许可以共享配置,但不能共享更多。

也许是在底层(python和nodejs都是用C或C ++编写),您可以绑定它们,但是这样做比单独生成两个单独的容器要多得多的开销。

此外,将API和前端分开是一种很好的做法,它使您可以以更简单的形式执行更改/更新,并在出现高峰时扩展一个服务。另外,由于两个容器实际上是分开的并且由容器固定,因此提高了安全性。分成一个,并不一定会危及第二个(我说这是因为它取决于您存储的访问信息以及您授予前者的权限)。