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。
生命週期:封存、還原、清除
Section titled “生命週期:封存、還原、清除”刪除 flag 是可逆的,但有個限度。封存會把它從你的應用程式移除:在每一台在線裝置上,這個 flag 會在大約一分鐘內停止解析,由你的程式碼的預設值接手。已封存的 flag 可以在保留期間內完整還原,或在保留期過後永久清除。封存清單就在每個專案裡,和它所持有的 flag 放在一起。
如果一個 flag 已經 90 天沒有人動過,儀表板會把它標為過時:這是一個提醒你封存的推力,絕不會自動封存。你忘掉的 flag,是你的程式碼庫仍在付出代價的複雜度。
- 鎖定對象:規則、區隔與百分比發布
- 環境與專案:flag 住在哪裡
- Flag 如何送達你的應用程式:裝置實際收到什麼