跳到內容

Flag 與種類

Flag 是一個有名字的決定,由你的應用程式請 FortressFlag 來做:這台裝置該看到新的結帳流程嗎?購買按鈕上該放哪一句文案?重試幾次之後放棄?這一頁給你其餘文件都會用到的詞彙。

Flag 屬於一個專案,並在每個環境各有一個值

Section titled “Flag 屬於一個專案,並在每個環境各有一個值”

每個 flag 都屬於一個專案,並以它的鍵來識別:一個像 new-checkout 這樣的小寫短名稱。鍵是你的程式碼要求的東西,而且建立之後不可變更:你已出貨的應用程式把鍵寫死在程式碼裡,改名會弄壞它們。flag 的顯示名稱隨時可以改;鍵是永久的。

Flag 沒有一個值,它在每個環境各有一個值。new-checkout 可以同時在 dev 開啟、在 staging 發布中、在 production 關閉。你對每個環境的切換和鎖定都是各自獨立的。

每個 flag 都有一個種類,在建立時選定,之後不可變更:

種類 值 適合
布林 true / false 緊急開關、功能閘門、發布
字串 具名文字變體 文案實驗、演算法選擇、主題
數字 具名數值變體 上限、逾時、門檻

種類不可變更的理由和鍵一樣:你的程式碼透過帶型別的呼叫(isEnabled、stringValue、numberValue)讀取 flag,一個在已出貨的應用程式底下改了種類的 flag,對它來說會變得毫無意義。

字串和數字 flag 提供的是變體:有名字的值,例如 control → "buy-now" 和 treatment → "start-free"。名字是給你和你的儀表板看的;你的使用者的裝置只會收到值。變體名稱永遠不會離開管理平面。

預設值,以及預設值背後的預設值

Section titled “預設值,以及預設值背後的預設值”

有兩種不同的東西都叫預設值,值得把它們分清楚:

  • flag 的預設值是沒有任何鎖定規則命中時,環境提供的內容。對布林 flag 來說就是它的開/關狀態;對多變體 flag 來說就是你選為預設的那個變體。
  • 你的程式碼的預設值是你在呼叫處傳入的值:isEnabled("new-checkout", default: false)。這是回退鏈的最底層:當你的應用程式從未連上 FortressFlag,或者這個 flag 在那個環境不存在(或沒有可提供的值)時,應用程式用的就是它。

一個全新、還沒選定預設變體的多變體 flag 什麼都不提供,在你決定之前,由你的程式碼的預設值回答。這是刻意的:一個你還沒設定完的 flag,應該表現得像一個不存在的 flag。

刪除 flag 是可逆的,但有個限度。封存會把它從你的應用程式移除:在每一台在線裝置上,這個 flag 會在大約一分鐘內停止解析,由你的程式碼的預設值接手。已封存的 flag 可以在保留期間內完整還原,或在保留期過後永久清除。封存清單就在每個專案裡,和它所持有的 flag 放在一起。

如果一個 flag 已經 90 天沒有人動過,儀表板會把它標為過時:這是一個提醒你封存的推力,絕不會自動封存。你忘掉的 flag,是你的程式碼庫仍在付出代價的複雜度。