私は、複数のドメインを介して提供されるGoogle App Engine Python標準環境でFlaskを使用してAPIを構築しています。Google App Engine APIの名前空間マネージャーの範囲は何ですか?
APIは、データの保存とデータの取得に使用できます。
クラウドデータストアのマルチテナント性を使用して、APIにアクセスするドメインによって決定される名前空間内のデータのみを格納または取得したいと考えています。
私が見ることができる唯一の方法は、google.appengine.api.namespace_manager
を使用して、要求時またはI/O時のコンテキストマネージャで名前空間を設定することです。
私はこのコンテキストマネージャ書きました:
@contextmanager
def multitenancy_namespace(namespace):
original_namespace = namespace_manager.get_namespace()
if namespace:
new_namespace = to_namespace_safe_url(namespace)
namespace_manager.set_namespace(new_namespace)
yield
namespace_manager.set_namespace(original_namespace)
をそして期待どおりに動作します。
私の心配はnamespace_manager
の範囲です。私はこれについてのドキュメントを見つけることができませんでした。私のAPIは、スレッドとnamespace_manager.set_namespace(...)
によって設定されるように、名前空間がグローバルであると仮定すると、> 1000人のユーザが同時に使用される場合
、私はいくつかの衝突を期待 - データが間違った名前空間に格納されている別の要求が最初の要求の後set_namespace
と呼ばれるので、最初の要求がI/Oを実行する前に行われました。
namespace
のスコープは少なくとも私のFlaskアプリケーションには十分である個々のスレッドに限定されていると私に伝えられるスレッドテストhereを書きました。
ただし、はですnamespace_manager
のコンテキスト? set_namespace
は実際に何をしていますか?名前空間の設定はどこに保存されていますか?名前空間の衝突がになる可能性のあるユースケースはありますか?
明らかに、ドキュメントのようなものは見当たりませんでした。説明してくれてありがとう! – Charles
ちょっとややこしい。このメソッドのコメントは確かに保証されています: "" "現在のHTTPリクエストのデフォルト名前空間を設定してください。" –