Fastapi 取决于

问题描述 投票:0回答:1

据我所知,我所要求的是不可能的,所以也许你可以为我提供一些最佳实践,那就太棒了!

所以我正在使用一个为客户端和服务器端(fastapi)使用而构建的包。该方法建立与 SQL 数据库的连接。它看起来类似于这个:

def connect(environment = ENV):
   doSomething()

ENV是一个预先确定的常量,但在某些情况下我需要访问客户端的不同环境(迁移、数据质量比较等,不是真正用于日常使用,但有时我仍然需要这个),但不是服务器端。

如果我想与fastapi依赖一起使用,我也可以在fastapi中传递环境,然后写入不同环境的db中。这有点问题,因为在服务器端,每个容器应该只写入自己的环境。

python dependency-injection fastapi
1个回答
0
投票

你都说了:

This is kinda problematic, because on the serverside, each container should only write into its own environment.

每个容器应该有自己的数据库,并且只能访问自己的数据库。当然,有些数据模型非常复杂,难以建模,有些甚至无法在微服务环境中建模。

您应该重构系统架构以允许此类用例。

我认为两种可能的选择如下:

选项1

只有一个微服务就可以覆盖所有可能的环境。它将使用应用程序逻辑(即您的代码)来了解请求应转发到哪个环境,然后从数据库、表或列值池中访问正确的数据库(取决于环境的建模方式,这取决于你,超出了这个问题的范围)

选项2

拥有一个中间件代理,可以将流量路由/重定向到正确的微服务(类似于 url 中的路径,允许确定性地检查请求应该去哪里)。

例如,访问

/url/path/ENV/my/object
应足以确定请求应转发到哪个微服务。

备注

应用不是很清晰,在不了解需要使用不同环境的情况下很难提供解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.