跳到內容

Python 快速入門

幾分鐘之內,你的 Python 服務就會在行程內評估 feature flags:每次檢查不走網路、你的請求路徑上沒有延遲,一次輪詢服務你的行程處理的每一個請求。

零相依:SDK 是純標準函式庫,在 Python 3.11 及之後的版本上執行。在 asyncio 應用程式裡它的運作方式也一樣:評估是一次普通的記憶體內讀取,所以沒有任何東西需要 await。

這個 SDK 放在 GitHub 上的公開儲存庫裡,直接從那裡安裝,並固定在發布版本:

Terminal window
pip install "git+https://github.com/FortressFlag/FortressFlag_SDK_python@v1.0.0"

省略 @v1.0.0 就會改為追蹤 development 分支,試一個修正時很方便,但不是你在正式環境想要的。

2. 伺服器金鑰:貨真價實的機密

Section titled “2. 伺服器金鑰:貨真價實的機密”

這個 SDK 使用伺服器金鑰(ffs_…),它和行動與 Web SDK 隨附出貨的用戶端金鑰正好相反:它可以下載你的完整 ruleset,包含鎖定規則。把它完全當成資料庫密碼來對待:環境變數或機密管理器,永遠不放進程式碼、永遠不放進儲存庫、永遠不放進日誌。兩類金鑰,並排比較。

import os
import fortressflag
try:
client = fortressflag.create(
fortressflag.Configuration(key=os.environ["FF_SERVER_KEY"])
)
except fortressflag.MalformedKeyError:
# SDK 唯一會引發例外的地方:格式錯誤的金鑰,在任何東西開始提供之前。
raise SystemExit(1)
client.start(timeout=15.0) # 在第一份 ruleset 到達(或期限到了)時返回
# ... 你的服務執行;flag 檢查現在是記憶體內的函式呼叫。

start 永遠不會引發例外:如果第一次抓取無法及時完成,用戶端會在它的背景執行緒上持續重試,而你的呼叫者在此期間拿到他們的回退值。輪詢器是一個 daemon 執行緒:它永遠不會阻止你的直譯器退出。

enabled = client.bool_value(
"new-checkout",
fortressflag.Context(
key="user-42", # 你的穩定內容鍵:使用者 id、工作階段 id,由你決定
tags={"cohort": "beta"},
),
False, # flag 未知或從未抓取到任何東西時的回退值
)

client.string_value 和 client.number_value 的用法一樣。內容 key 是百分比發布分桶的依據:始終傳入同一個識別碼,每位使用者就會得到穩定的分群。那是你的資料:SDK 永遠不驗證、不儲存、也不記錄它。

就這樣,你的服務正在本地評估 flag。儀表板的變更會在大約一分鐘內送達每一個行程。

bool_value、string_value 和 number_value 永遠會回答,永遠不會引發例外:flag 出問題絕不能拖垮你的服務。重新啟動的行程在第一次抓取完成之前提供你呼叫處的回退值(或者在設定裡指定 cache_path,把最後一份 ruleset 持久化到你選的檔案,重新啟動就會立即從它恢復)。就連被撤銷的金鑰也不會弄壞任何東西:SDK 會繼續用它最後下載的 ruleset 評估,直到你交給它一把新金鑰。