INTEGRITY Dokumentace

Go SDK

SDK pro Go poskytuje serverového poskytovatele kompatibilního s OpenFeature pro aplikace v Go. Vyhodnocuje příznaky přes HTTP a nepodporuje binding Cloudflare Workers.

Instalace

Nainstalujte pomocí go get:

go get github.com/cloudflare/flagship/sdks/go

Nastavení

Nakonfigurujte poskytovatele pomocí ID aplikace Flagship, ID účtu Cloudflare a API token s oprávněním Flagship Evaluate nebo Flagship App Evaluate.

package main

import (
	"context"
	"log"

	flagship "github.com/cloudflare/flagship/sdks/go"
	"github.com/open-feature/go-sdk/openfeature"
)

func main() {
	ctx := context.Background()

	provider, err := flagship.NewProvider(flagship.Options{
		AppID:     "<APP_ID>",
		AccountID: "<ACCOUNT_ID>",
		AuthToken: "<API_TOKEN>",
	})
	if err != nil {
		log.Fatal(err)
	}

	if err := openfeature.SetProviderAndWait(provider); err != nil {
		log.Fatal(err)
	}
	defer openfeature.Shutdown()

	client := openfeature.NewDefaultClient()
	evalCtx := openfeature.NewEvaluationContext("user-42", map[string]any{
		"plan": "enterprise",
	})

	enabled, err := client.BooleanValue(ctx, "new-checkout", false, evalCtx)
	if err != nil {
		log.Fatal(err)
	}

	log.Println("new-checkout:", enabled)
}

Typy příznaků

SDK pro Go podporuje všechny serverové typy příznaků OpenFeature.

enabled, _ := client.BooleanValue(ctx, "new-checkout", false, evalCtx)
variant, _ := client.StringValue(ctx, "homepage-hero", "control", evalCtx)
rate, _ := client.FloatValue(ctx, "sample-rate", 0.1, evalCtx)
limit, _ := client.IntValue(ctx, "upload-limit", 10, evalCtx)
config, _ := client.ObjectValue(ctx, "ui-config", map[string]any{"theme": "light"}, evalCtx)

Použijte *ValueDetails metody, pokud potřebujete důvod, variantu, metadata nebo chybové kódy.

Cachování odpovědí

Poskytovatel může ukládat vyhodnocení do mezipaměti, aby se předešlo síťovému round-tripu u opakovaných dvojic flag/context. Ukládání do mezipaměti je ve výchozím stavu vypnuté a zapíná se nastavením CacheTTL:

provider, err := flagship.NewProvider(flagship.Options{
	AppID:        "<APP_ID>",
	AccountID:    "<ACCOUNT_ID>",
	AuthToken:    "<API_TOKEN>",
	CacheTTL:     30 * time.Second, // values may be up to this stale
	CacheMaxSize: 1000,             // LRU-evicted beyond this many entries
})

Každý záznam v mezipaměti je klíčován klíčem příznaku, jeho typem a celým kontextem vyhodnocení, takže odlišné kontexty nikdy nesdílejí stejnou hodnotu z mezipaměti. Zásah do mezipaměti vrátí reason == openfeature.CachedReason.

Vypnuté příznaky, chyby a neshody typů se nikdy neukládají do mezipaměti. Platnost záznamu je řízena hodnotou TTL, takže změna příznaku ve Flagship se projeví až po jeho vypršení.

Mezipaměť je vázaná na instanci poskytovatele, chráněná mutexem pro souběžné použití a vymazává se při Shutdown.

Možnosti konfigurace

Možnost Popis
AppID ID aplikace Flagship.
AccountID Vyžadováno s AppID.
BaseURL Přepsání základní URL adresy. Výchozí hodnota je https://api.cloudflare.com.
AuthToken Přidá Authorization: Bearer <token> ke každému požadavku.
Headers Statické hlavičky. Explicitní Authorization přepisuje AuthToken.
HeadersFactory Dynamické hlavičky pro jednotlivé požadavky. Hodnoty přepisují Headers a AuthToken.
HTTPClient Vlastní HTTP klient.
Timeout Časový limit na jeden pokus. Výchozí hodnota je 5 sekund.
Retries Počet opakování při dočasných chybách. Výchozí hodnota je 1, maximálně 10.
DisableRetries Opakování se vypnou při nastavení na true.
RetryDelay Prodleva mezi opakováními. Výchozí hodnota je 1 sekunda, maximální hodnota je 30 sekund.
CacheTTL Při hodnotě větší než 0 zapíná ukládání odpovědí do mezipaměti v paměti. Uložené hodnoty mohou být zastaralé až o tuto dobu.
CacheMaxSize Maximální počet položek v mezipaměti. Nad tímto limitem se položky vyřazují metodou LRU. Výchozí hodnota je 1000, pokud CacheTTL je nastaven.
Logging Zapne ladicí a chybové logování. Ve výchozím nastavení je vypnuto.
Logger Volitelné slog-kompatibilní logger. Používá výchozí slog logger, pokud není nastaveno.
Hooks OpenFeature hooks na úrovni poskytovatele.

Kontext vyhodnocení

Atributy kontextu se odesílají jako parametry URL dotazu. Podporované hodnoty jsou řetězce, číselné typy, booleovské hodnoty a time.Time. nil hodnoty se přeskočí. Mapy, řezy, struktury a další komplexní hodnoty vrací INVALID_CONTEXT prostřednictvím OpenFeature a nevyvolávají HTTP požadavek.