การตั้งค่าสถานะคุณลักษณะได้เปลี่ยนกระบวนทัศน์ของวิธีที่นักพัฒนาแบ็กเอนด์สามารถทดสอบและแก้ไขสิ่งที่พวกเขาสร้างได้ ด้วยธงคุณลักษณะ เราสามารถเปิดและปิดใช้งานคุณลักษณะหรือเปลี่ยนฟังก์ชันการทำงานของบางสิ่งบางอย่างได้ทันทีด้วยการคลิกเพียงครั้งเดียว (ไม่จำเป็นต้องปรับใช้ใหม่)
ในบทช่วยสอนนี้ เราจะดูว่าแฟล็กฟีเจอร์ช่วยให้เราเปิดใช้งานและปิดใช้งานฟีเจอร์/ส่วนหนึ่งของโค้ดทุกครั้งที่เราต้องการจาก UI ได้อย่างไร โดยไม่จำเป็นต้องปรับใช้โค้ดทั้งหมดอีกครั้ง
เพื่อทำความเข้าใจสิ่งต่าง ๆ ให้ลึกซึ้งยิ่งขึ้น เราจะสร้างแอปตั้งแต่เริ่มต้น ดูความสามารถในการตั้งค่าสถานะคุณลักษณะ และใช้เครื่องมือที่เรียกว่า Flagsmith เพื่อจัดการการตั้งค่าสถานะคุณลักษณะที่เราสร้างขึ้นจากแดชบอร์ดเดียว
นี่คือสิ่งที่เราจะกล่าวถึง:
-
ข้อกำหนดเบื้องต้น
-
แฟล็กคุณลักษณะคืออะไร
-
แฟล็กคุณลักษณะสำหรับการพัฒนาแบ็กเอนด์
-
เหตุใดจึงต้องใช้เครื่องมือโอเพ่นซอร์ส
-
มาเขียนโค้ดกันดีกว่า!
-
การเริ่มต้นเครื่องมือ
-
การสร้างจุดสิ้นสุดสำหรับ API
-
วิธีเพิ่มการตั้งค่าสถานะคุณลักษณะ
-
ทำความเข้าใจกับตรรกะของโค้ดแฟล็กคุณลักษณะ
-
วิธีสร้างแฟล็กคุณลักษณะในแดชบอร์ด Flasgsmith
-
แฟล็กคุณลักษณะการจำกัดอัตรา
-
แฟล็กคุณลักษณะเบต้า
-
รับคีย์การเข้าถึง
-
กำลังเรียกใช้ API
-
กำลังอัปเดตแฟล็ก Rate_limit
-
วิธีรวมฟีเจอร์แฟล็กเข้ากับแอป GitHub
-
การทดสอบแอป Flagsmith GitHub
-
-
บทสรุป
ข้อกำหนดเบื้องต้น
-
ติดตั้ง Golang และมีความเข้าใจในระดับปานกลาง
-
อินสแตนซ์ Redis ที่ทำงานอยู่ (อินสแตนซ์ระยะไกลหรือภายในเครื่อง)
-
บัญชี Flagsmith (ฟรี เราจะกล่าวถึงเรื่องนี้ในบทความต่อไป)
แฟล็กคุณลักษณะคืออะไร
Feature Flag เป็นเทคนิคในการพัฒนาที่ช่วยให้ทีมสามารถเปิดหรือปิดคุณสมบัติได้โดยไม่ต้องแก้ไขซอร์สโค้ดหรือปรับใช้ใหม่
เพื่อให้ง่ายขึ้นอีกเล็กน้อย ให้คิดว่ามันเป็นการทำงานที่เหมือนกับคำสั่งแบบมีเงื่อนไข (เช่น คำสั่ง if-else) โดยขึ้นอยู่กับว่าเมื่อใดเป็นจริงหรือเท็จ มันจะกำหนดเส้นทางโค้ดที่จะถูกดำเนินการ
แฟล็กคุณลักษณะสำหรับการพัฒนาแบ็กเอนด์
คุณอาจเคยเห็นธงคุณลักษณะที่ใช้ในส่วนหน้าและเว็บไซต์แล้ว แต่ยังมีอะไรมากกว่านั้นอีกมาก คุณสามารถใช้สิ่งเหล่านี้บนฝั่งเซิร์ฟเวอร์เพื่อปรับเปลี่ยนฟังก์ชันการทำงานของ API ทำสิ่งต่างๆ เช่น การแก้ไข/การตั้งค่าขีดจำกัดอัตรา การเปลี่ยนแปลงฟังก์ชันตำแหน่งข้อมูล API หรือการปิดการทำงานโดยสมบูรณ์ ในฐานะนักพัฒนาแบ็กเอนด์ เราสามารถยกระดับการทดสอบของเราด้วยแฟล็กฟีเจอร์
เพื่อสาธิตสิ่งนี้ เราจะดำเนินการสร้างแอปสาธิต แอปสาธิตได้รับการดูแลจัดการเพื่อแสดงความสามารถในการตั้งค่าสถานะคุณลักษณะตั้งแต่การปรับเปลี่ยนฟังก์ชันการทำงาน (ขีดจำกัดอัตรา) ได้ทันทีไปจนถึงการเพิ่มจุดสิ้นสุดใหม่ให้กับ API สำหรับการทดสอบเบต้าหรือวัตถุประสงค์ในการเปิดตัวครั้งแรก เราจะใช้เครื่องมือโอเพ่นซอร์สทั้งหมดไปพร้อมกัน!
เราจะใช้เครื่องมือโอเพ่นซอร์สเพื่อสร้างแอปนี้ (Golang, Redis และ Flagsmith) โอเพ่นซอร์สนำมาซึ่งความโปร่งใสและความไว้วางใจที่มากขึ้นและส่งเสริมการทำงานร่วมกันกับชุมชนนักพัฒนาแบ็กเอนด์ระดับโลก
ด้วยการผสานรวมเครื่องมือโอเพ่นซอร์ส เราสามารถมองเห็นได้ทั้งหมดในขณะที่เราสร้างและทดสอบ ตัวอย่างเช่น เราจะรวมแฟล็กฟีเจอร์เข้ากับ GitHub ซึ่งช่วยให้เราติดตามวงจรการใช้งานของฟีเจอร์โดยการเชื่อมโยงแฟล็กฟีเจอร์ Flagsmith กับคำขอหรือปัญหา GitHub Pull ซึ่งช่วยให้เราสามารถอัปเดตการเปลี่ยนแปลงฟีเจอร์ของเราได้โดยไม่ต้องติดตามการแก้ไขแต่ละรายการด้วยตนเอง เราสามารถติดตามสถานะของฟีเจอร์ของเราในสภาพแวดล้อมที่แตกต่างกันได้อย่างง่ายดาย
มาเขียนโค้ดกันดีกว่า!
ในบทช่วยสอนนี้ คุณจะเห็นว่าฟังก์ชันการทำงานของแอปเปลี่ยนแปลงอย่างไรก่อนและหลังการทดสอบด้วยกลไกการตั้งค่าสถานะคุณลักษณะ เครื่องมือและเฟรมเวิร์กที่เราจะใช้คือ Golang, Docker, Redis, Flagsmith และ GitHub ตามที่กล่าวไว้ ทุกอย่างเป็นโอเพ่นซอร์สและสร้างบัญชีเพื่อทดสอบได้ฟรี
ในการเริ่มต้น ให้เปิด IDE ที่คุณชื่นชอบ เริ่มต้นโครงการ Golang จากนั้นคัดลอกโค้ดด้านล่างใน 03 ไฟล์. จากนั้นรัน 18 เพื่อติดตั้งการอ้างอิงทั้งหมดที่ต้องการ
มาทำความเข้าใจว่าเกิดอะไรขึ้นในข้อมูลโค้ดด้านล่าง:
package main
import (
"context"
"errors"
"fmt"
"log"
"net/http"
"os"
"strconv"
"github.com/gin-gonic/gin"
"github.com/go-redis/redis_rate/v10"
"github.com/joho/godotenv"
"github.com/redis/go-redis/v9"
)
var (
redisClient *redis.Client
limiter *redis_rate.Limiter
)
func initClients() {
redisClient = redis.NewClient(&redis.Options{
Addr: os.Getenv("REDIS_URL"),
})
limiter = redis_rate.NewLimiter(redisClient)
}
func main() {
err := godotenv.Load()
if err != nil {
log.Printf("Loading environment variable from the host system")
} else {
log.Printf("Loading environment from .env file")
}
initClients()
defer redisClient.Close()
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
err, remainingLimit := rateLimitCall(c.ClientIP())
if err != nil {
c.JSON(
http.StatusTooManyRequests,
gin.H{"error": "Rate Limit Hit"})
} else {
c.JSON(
http.StatusOK,
gin.H{"Your left over API request is": remainingLimit})
}
})
r.GET("/beta", func(c *gin.Context) {
c.JSON(
http.StatusOK,
gin.H{"message": "This is beta endpoint"})
})
r.Run(":" + os.Getenv("PORT"))
}
func rateLimitCall(ClientIP string) (error, int) {
ctx := context.Background()
rateLimitString := os.Getenv("RATE_LIMIT")
RATE_LIMIT, _ := strconv.Atoi(rateLimitString)
res, err := limiter.Allow(ctx, ClientIP, redis_rate.PerHour(RATE_LIMIT))
if err != nil {
panic(err)
}
if res.Remaining == 0 {
return errors.New("You have hit the Rate Limit for the API. Try again later"), 0
}
fmt.Println("remaining request for", ClientIP, "is", res.Remaining)
return nil, res.Remaining
}
การเริ่มต้นเครื่องมือ
func initClients() {
redisClient = redis.NewClient(&redis.Options{
Addr: os.Getenv("REDIS_URL"),
})
limiter = redis_rate.NewLimiter(redisClient)
}
func main() {
err := godotenv.Load()
if err != nil {
log.Printf("Loading environment variable from the host system")
} else {
log.Printf("Loading environment from .env file")
}
initClients()
defer redisClient.Close()
r := gin.Default()
...
})
ที่ด้านบนสุด เราประกาศตัวแปรเพื่อจัดเก็บไคลเอนต์ Redis และตัวจำกัดอัตราเพื่อนำมาใช้ซ้ำและเริ่มต้นใช้งานครั้งเดียว จากนั้นเรากำหนดค่าเริ่มต้นใน 22 .
ใน 35 อันดับแรก เราจะโหลดตัวแปรสภาพแวดล้อมจากระบบหรือไฟล์ .env จากนั้นเราเรียก 47 . สิ่งนี้จะสร้างไคลเอนต์และเก็บไว้ในตัวแปรที่เราสร้างขึ้น
ต่อไป เราสร้าง จิน เราเตอร์ที่จัดการคำขอที่เข้ามาทั้งหมดของเรา นี่คือตัวแปรสภาพแวดล้อมที่เราต้องการใน 54 ของเรา ไฟล์. สำหรับการสาธิตนี้ เราจำเป็นต้องมีอินสแตนซ์ Redis ที่ทำงานเพื่อจัดเก็บข้อมูลทั้งหมดสำหรับฟังก์ชันการจำกัดอัตรา เราสามารถใช้ Docker หรือเครื่องระยะไกลใดก็ได้ เพียงอย่าลืมอัปเดต 67 ตามนั้น ฉันจะใช้นักเทียบท่า
เราอาจก้าวไปข้างหน้าอีกไมล์และรับตัวแปรสภาพแวดล้อมทั้งหมดจากแฟล็กฟีเจอร์ แต่เราจะไม่ทำสิ่งนี้ที่นี่
REDIS_URL=localhost:6379
PORT=8080
RATE_LIMIT=10
การสร้างจุดสิ้นสุดสำหรับ API
r.GET("/ping", func(c *gin.Context) {
err, remainingLimit := rateLimitCall(c.ClientIP())
if err != nil {
c.JSON(
http.StatusTooManyRequests,
gin.H{"error": "Rate Limit Hit"})
} else {
c.JSON(
http.StatusOK,
gin.H{"Your left over API request is": remainingLimit})
}
})
r.GET("/beta", func(c *gin.Context) {
c.JSON(
http.StatusOK,
gin.H{"message": "This is beta endpoint"})
})
r.Run(":" + os.Getenv("PORT"))
จากนั้นเราสร้างสอง GET จุดสิ้นสุด 74 และ 85รหัส> . ทุกครั้งที่มีคนกด 90 จุดสิ้นสุดที่เราเรียกว่า 108 ฟังก์ชั่น ตรวจสอบและกำหนดขีดจำกัดอัตราของคำขอที่เข้ามาจาก ที่อยู่ IP . ทั้งหมดนี้ถูกจัดเก็บไว้ในอินสแตนซ์ Redis ที่เราสร้างขึ้น
ตอนนี้หากผู้ใช้โต้ตอบกับ 117 ตำแหน่งข้อมูล API เป็นครั้งแรก จะสร้างรายการที่มีขีดจำกัด 10 ต่อชั่วโมง . ขีดจำกัดจำนวน 10 มาจาก 126 เราตั้งค่าไว้ และแบบฟอร์มการรีเฟรชรายชั่วโมงจะมาจาก 130 ฟังก์ชั่น
ต่อไป เราจะตรวจสอบว่าผู้ใช้มีขีดจำกัดที่เหลืออยู่หรือไม่ หากใช่ เราจะส่งข้อความกลับพร้อมจำนวนคำขอที่เหลืออยู่ มิฉะนั้น หากถึงขีดจำกัด เราจะส่งข้อความแจ้งให้ทราบ
นอกเหนือจาก 149 ปลายทาง เรามีปลายทางอื่น 154 . มันส่งคืนข้อความง่ายๆ แต่ในภายหลังเราจะดูว่าเราสามารถเปิดและปิดฟังก์ชันการทำงานของตำแหน่งข้อมูลนี้ได้อย่างไร (โดยใช้แฟล็กคุณลักษณะ)
วิธีเพิ่มการตั้งค่าสถานะคุณลักษณะ
ตอนนี้ถึงเวลาเพิ่มความสามารถในการตั้งค่าสถานะคุณลักษณะให้กับแอปของเราแล้ว เราจะใช้แฟลกสมิธ Flagsmith เป็นซอฟต์แวร์โอเพ่นซอร์สที่ช่วยให้เราสร้างและจัดการแฟล็กคุณลักษณะทั่วทั้งแอปพลิเคชันบนเว็บ อุปกรณ์เคลื่อนที่ และฝั่งเซิร์ฟเวอร์
เมื่อใช้ Flagsmith เราสามารถรวมคุณสมบัติไว้ในแฟล็ก แล้วสลับเปิดหรือปิดสำหรับสภาพแวดล้อม ผู้ใช้ หรือกลุ่มผู้ใช้ที่แตกต่างกัน จากนั้นคุณจะสามารถจัดการทั้งหมดได้จากแดชบอร์ด Flagsmith โดยไม่จำเป็นต้องปรับใช้ใหม่
ดังนั้น มาติดตั้งแพ็คเกจ Flagsmith กันโดยใช้คำสั่งด้านล่าง:
go get github.com/Flagsmith/flagsmith-go-client/v3
จากนั้นเราจะนำเข้าแพ็คเกจโดยตั้งชื่อแทนว่า ช่างทำธง . ด้านล่างนี้คือฟังก์ชันการทำงานที่อัปเดตหลังจากที่เราใช้การตั้งค่าสถานะคุณลักษณะกับโค้ดที่มีอยู่ของเรา
มาทำความเข้าใจการเปลี่ยนแปลงที่เราทำที่นี่ (ฉันจะอธิบายด้านล่างข้อมูลโค้ด):
package main
import (
"context"
"errors"
"fmt"
"log"
"net/http"
"os"
flagsmith "github.com/Flagsmith/flagsmith-go-client/v3"
"github.com/gin-gonic/gin"
"github.com/go-redis/redis_rate/v10"
"github.com/joho/godotenv"
"github.com/redis/go-redis/v9"
)
var (
redisClient *redis.Client
limiter *redis_rate.Limiter
flagsmithClient *flagsmith.Client
)
func initClients() {
redisClient = redis.NewClient(&redis.Options{
Addr: os.Getenv("REDIS_URL"),
})
limiter = redis_rate.NewLimiter(redisClient)
flagsmithClient = flagsmith.NewClient(os.Getenv("FLAGSMITH_ENVIRONMENT_KEY"))
}
func main() {
err := godotenv.Load()
if err != nil {
log.Printf("Loading environment variable from the host system")
} else {
log.Printf("Loading environment from .env file")
}
initClients()
defer redisClient.Close()
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
err, remainingLimit := rateLimitCall(c.ClientIP())
if err != nil {
c.JSON(
http.StatusTooManyRequests,
gin.H{"error": "Rate Limit Hit"})
} else {
c.JSON(
http.StatusOK,
gin.H{"Your left over API request is": remainingLimit})
}
})
r.GET("/beta", func(c *gin.Context) {
flags := getFeatureFlags()
isEnabled, _ := flags.IsFeatureEnabled("beta")
if isEnabled {
c.JSON(
http.StatusOK,
gin.H{"message": "This is beta endpoint"})
} else {
c.String(http.StatusNotFound, "404 page not found")
}
})
r.Run(":" + os.Getenv("PORT"))
}
func rateLimitCall(ClientIP string) (error, int) {
ctx := context.Background()
flags := getFeatureFlags()
rateLimitInterface, _ := flags.GetFeatureValue("rate_limit")
RATE_LIMIT := int(rateLimitInterface.(float64))
fmt.Println("Current Rate Limit is", RATE_LIMIT)
res, err := limiter.Allow(ctx, ClientIP, redis_rate.PerHour(RATE_LIMIT))
if err != nil {
panic(err)
}
if res.Remaining == 0 {
return errors.New("You have hit the Rate Limit for the API. Try again later"), 0
}
fmt.Println("remaining request for", ClientIP, "is", res.Remaining)
return nil, res.Remaining
}
func getFeatureFlags() flagsmith.Flags {
ctx := context.Background()
flags, _ := flagsmithClient.GetEnvironmentFlags(ctx)
return flags
}
การทำความเข้าใจลอจิกโค้ดแฟล็กคุณลักษณะ
func getFeatureFlags() flagsmith.Flags {
ctx := context.Background()
flags, _ := flagsmithClient.GetEnvironmentFlags(ctx)
return flags
}
ก่อนอื่น เรามาข้ามไปที่ 168 ใหม่โดยตรงเลย ฟังก์ชั่นที่เราสร้างขึ้นที่ด้านล่าง ฟังก์ชั่นนี้จะส่งคืนแฟล็กทั้งหมดที่เราสร้างบนแดชบอร์ด Flagsmith โดยการเรียก 173 วิธีการบน 184 .
เราเริ่มต้น 193 ภายใน 205 ฟังก์ชั่น ลูกค้า Flagsmith ต้องการรหัสการเข้าถึง (216 function) ที่เราได้จากแดชบอร์ด Flagsmith เช่นเดียวกับที่เราทำกับไคลเอนต์ Redis และ Limter เราจะจัดเก็บไคลเอนต์ไว้ในตัวแปรส่วนกลางเพื่อให้สามารถนำกลับมาใช้ใหม่ได้ คุณจะเข้าใจแดชบอร์ด การสร้างแฟล็ก และการดึงคีย์ในขั้นตอนต่อๆ ไป
func rateLimitCall(ClientIP string) (error, int) {
ctx := context.Background()
flags := getFeatureFlags()
rateLimitInterface, _ := flags.GetFeatureValue("rate_limit")
RATE_LIMIT := int(rateLimitInterface.(float64))
fmt.Println("Current Rate Limit is", RATE_LIMIT)
res, err := limiter.Allow(ctx, ClientIP, redis_rate.PerHour(RATE_LIMIT))
if err != nil {
panic(err)
}
if res.Remaining == 0 {
return errors.New("You have hit the Rate Limit for the API. Try again later"), 0
}
fmt.Println("remaining request for", ClientIP, "is", res.Remaining)
return nil, res.Remaining
}
ตอนนี้มาถึง 229 แทนที่จะรับ 233 จากสภาพแวดล้อม เราได้ค่าจาก 243 ธง (ซึ่งเราจะสร้างในภายหลัง) เราเรียก 255 และรับธง 267 ค่าออกจากแฟล็กทั้งหมด
ด้วยการตั้งค่าเหล่านี้เป็นแฟล็กคุณลักษณะ เราจะสามารถเปลี่ยนขีดจำกัดแบบไดนามิกได้ตลอดเวลาจากแดชบอร์ด เราไม่จำเป็นต้องเปลี่ยนฟังก์ชันการทำงานของโค้ดหรือทำแบบเดิมโดยการเปลี่ยน 276 และรันเซิร์ฟเวอร์อีกครั้งเพื่อให้รับค่าที่อัปเดตใหม่
r.GET("/beta", func(c *gin.Context) {
flags := getFeatureFlags()
isEnabled, _ := flags.IsFeatureEnabled("beta")
if isEnabled {
c.JSON(
http.StatusOK,
gin.H{"message": "This is beta endpoint"})
} else {
c.String(http.StatusNotFound, "404 page not found")
}
})
ตอนนี้มาถึง 281 จุดสิ้นสุด ขึ้นอยู่กับว่าเปิดใช้งานหรือปิดใช้งานแฟล็กเบต้า จุดสิ้นสุดนี้จะให้บริการแบบสอบถาม มิฉะนั้นจะทำหน้าที่เป็นปลายทางที่ไม่สามารถเข้าถึงได้และส่งคืนข้อความแสดงข้อผิดพลาด 404
ในตัวอย่างของเรา ฉันได้เพิ่มข้อความตัวยึดตำแหน่งพื้นฐานเพื่อแสดงวิธีการทำงาน แต่สิ่งนี้จะเปิดโอกาสใหม่ๆ ในการทดสอบและการเปิดตัวครั้งแรก (เบต้า) หาก API มีตำแหน่งข้อมูลใหม่ เราสามารถรวมฟังก์ชันการทำงานไว้ในแฟล็กคุณลักษณะ และทำให้พร้อมใช้งานและไม่พร้อมใช้งานด้วยการคลิกเพียงปุ่มเดียว นอกจากนี้ เรายังทำอะไรได้อีกมากมาย เช่น การกำหนดเวลาและการเผยแพร่ Canary
นอกจากนี้ 294 ของเราด้วย ไฟล์จะมีลักษณะเช่นนี้ เราได้ลบ 308 แล้ว และเพิ่ม 312 .
REDIS_URL=localhost:6379
PORT=8080
FLAGSMITH_ENVIRONMENT_KEY=ser.ZRd***********469
วิธีสร้างแฟล็กคุณลักษณะในแดชบอร์ด Flagsmith
ไปที่แดชบอร์ด Flagsmith เพื่อสร้างธงที่เราใช้ด้านบนและรับรหัสการเข้าถึง หากคุณไม่มีบัญชี Flagsmith คุณสามารถลงทะเบียนได้ฟรีที่นี่
หลังจากที่คุณสมัคร คุณจะได้รับแจ้งให้สร้างองค์กรและโครงการ การแยกโปรเจ็กต์เป็นสิ่งที่ดี เนื่องจากช่วยให้เราแยกตรรกะสำหรับโปรเจ็กต์ต่างๆ ได้ เมื่อเสร็จแล้ว คุณจะเห็นแดชบอร์ด เช่นเดียวกับภาพหน้าจอด้านล่าง
เรามีฟังก์ชันการทำงานมากมายตั้งแต่การผสานรวมไปจนถึงการกำหนดเวลาแฟล็กเพื่อเปรียบเทียบการเปลี่ยนแปลง นอกเหนือจาก Go แล้ว Flagsmith ยังมี SDK มากมาย คุณสามารถคลิกที่ชื่อภาษาที่เขียนได้ จากนั้นระบบจะให้รหัสสำเร็จรูปสำหรับภาษานั้น

แฟล็กคุณลักษณะการจำกัดอัตรา
ตอนนี้ เรามาสร้างแฟล็กคุณลักษณะแรกสำหรับขีดจำกัดอัตรากันดีกว่า คลิกที่ สร้างคุณลักษณะ ปุ่มที่มุมขวาบน หน้าต่างแถบด้านข้างจะเปิดขึ้น ตั้งชื่อ จากนั้นเพื่อให้ธงเปิดอย่างถูกต้องในขณะที่สร้าง เราสามารถเลือก เปิดใช้งานตามค่าเริ่มต้น ป>
ในส่วนค่า เราต้องตั้งค่าแฟล็ก สามารถใช้รูปแบบต่างๆ เช่น Txt, JSON, XML และอื่นๆ เนื่องจากค่าคุณลักษณะของเราเป็นข้อความธรรมดา เช่น 20, 30 เป็นต้น เราจะเลือก Txt (ค่าเริ่มต้น) และตั้งค่าขีดจำกัดแบบสุ่ม โดยเราจะเลือก 20 .
คุณยังสามารถให้แท็กและคำอธิบายได้ แท็กจะมีประโยชน์เมื่อกรองแฟล็กคุณลักษณะออก ตัวอย่างเช่น เราสามารถสร้างแท็ก 326 เพื่อกรองแฟล็กคุณลักษณะทั้งหมดที่เกี่ยวข้องกับแบ็กเอนด์ คำอธิบายเป็นคำอธิบายโดยย่อว่าการตั้งค่าสถานะในอนาคตนี้ทำอะไรเมื่อเปิดใช้งาน (และจะช่วยให้มีความเข้าใจในอนาคต)
ภาพหน้าจอด้านล่างแสดงให้เห็นว่าการกรอกรายละเอียดจะเป็นอย่างไร จากนั้น คลิกที่ สร้างคุณลักษณะ ปุ่มเพื่อสร้างแฟล็ก

การตั้งค่าสถานะคุณลักษณะเบต้า
ตอนนี้เรามาสร้างวินาที 335 ธงคุณลักษณะ มันจะเป็นกระบวนการเดียวกับกระบวนการแรก แต่ในขั้นตอนนี้ เราไม่จำเป็นต้องตั้งค่าสถานะใดๆ และปล่อยคอลัมน์นั้นว่างไว้ เมื่อเราสร้างแฟล็กทั้งสองแล้ว แดชบอร์ดของเราจะมีลักษณะเช่นนี้ โดยจะแสดงชื่อแฟล็ก ค่า สถานะปัจจุบัน (มุมมอง) และอื่นๆ

การรับรหัสการเข้าถึง
หากต้องการรับคีย์การเข้าถึง ให้คลิกที่ คีย์ SDK จากแถบด้านข้าง และคลิก สร้างคีย์สภาพแวดล้อมฝั่งเซิร์ฟเวอร์ ปุ่มเพื่อสร้างคีย์ เนื่องจากแอปของเราเป็นแบบฝั่งเซิร์ฟเวอร์ จึงควรใช้แอปนั้นเพียงอย่างเดียว จากนั้นคัดลอกและวางคีย์นั้นลงในค่าที่อยู่ใน 343 สำหรับ 359 กุญแจ.

การเรียกใช้ API
ตอนนี้ทุกอย่างได้รับการตั้งค่าแล้ว ดังนั้นกลับไปที่ IDE และรันเซิร์ฟเวอร์โดยดำเนินการ 360 คำสั่งในเทอร์มินัล เราจะเห็นข้อความนี้ในเทอร์มินัล ในกรณีที่คุณพบข้อผิดพลาดใดๆ เพียงตรวจสอบว่าแพ็คเกจได้รับการติดตั้งอย่างถูกต้อง ตั้งค่าตัวแปรอย่างถูกต้อง และแอปเข้าถึงอินสแตนซ์ Redis

ตอนนี้ถ้าเราไปที่ localhost:8080/ping เราก็จะได้รับข้อความ 370 . ขีดจำกัดคือ 20 เราทำคำขอหนึ่งรายการแล้ว และที่เหลือคือ 19 รายการ

กำลังอัปเดต 380 ตั้งค่าสถานะ
มาอัปเดต 391 กันเถอะ ค่าสถานะเป็น 10 และดูว่าเกิดอะไรขึ้น โดยไปที่แดชบอร์ด Flagsmith อีกครั้ง และคลิกที่ชื่อธง แถบเมนูด้านข้างจะเปิดขึ้น อัปเดตค่าเป็น 10 และคลิกที่ อัปเดตค่าคุณลักษณะ ปุ่ม.
เรายังสามารถกำหนดเวลาการอัปเดตได้ ตัวอย่างเช่น สิ่งนี้อาจมีประโยชน์เมื่อเราคาดว่าปริมาณการรับส่งข้อมูลจะเพิ่มขึ้นอย่างรวดเร็วในช่วงเวลาหนึ่ง และลดขีดจำกัดต่อผู้ใช้เพื่อลดการโหลดของเซิร์ฟเวอร์

หากตอนนี้คุณไปที่ localhost:8080/ping คุณจะได้รับข้อความ 408 – เนื่องจากขีดจำกัดทั้งหมดคือ 10 และเราได้ร้องขอไปแล้วสองครั้ง

ตอนนี้เรามาทดสอบ 417 กัน จุดสิ้นสุด ไปที่ localhost:8080/beta แล้วเราจะเห็นข้อความ 428 .

ตอนนี้กลับไปที่แดชบอร์ด Flagsmith แล้วสลับสวิตช์เพื่อปิดใช้งานการตั้งค่าสถานะนี้ ตอนนี้ไปที่ URL คุณจะได้รับข้อความ 404 เหมือนกับว่าปลายทางนี้ไม่เคยมีอยู่

ตอนนี้เราได้ตั้งค่าฟังก์ชันการทำงานและสาธิตความสามารถในการตั้งค่าสถานะฟีเจอร์แล้ว มาดูกันว่าเราจะผสานรวมแอป Flasgsmith GitHub ได้อย่างไร
วิธีรวมแฟล็กฟีเจอร์เข้ากับแอป GitHub
ขั้นแรก ตรวจสอบให้แน่ใจว่าคุณได้ผลักดันแอปของคุณไปที่ GitHub แล้ว หลังจากนั้น ให้ติดตั้งแอป GitHub Flasgsmith บน repo ของคุณจาก GitHub Marketplace
ด้วยการผสานรวม GitHub และ Falagsmith เราจะสามารถดูการอัปเดตเกี่ยวกับแฟล็ก/คุณสมบัติฟีเจอร์ของคุณเป็นความคิดเห็นในปัญหา GitHub และคำขอดึง สิ่งนี้ช่วยให้เราติดตามฟีเจอร์ต่างๆ ได้อย่างง่ายดาย ตั้งแต่การสร้างปัญหาไปจนถึงการรวม PR และปรับใช้การเปลี่ยนแปลง

จากนั้นเลือกองค์กรของคุณและที่เก็บที่คุณต้องการติดตั้งแอป คุณสามารถติดตั้งบน repos ทั้งหมดของคุณหรือเลือกอันใดอันหนึ่ง
เมื่อคุณติดตั้ง คุณจะถูกนำไปยังแดชบอร์ด Flagmsith โดยอัตโนมัติเพื่อกำหนดค่าและดำเนินการผสานรวมให้เสร็จสมบูรณ์ ข้อมูลส่วนใหญ่จะถูกเติมไว้ล่วงหน้า ดังนั้น คุณเพียงแค่ต้องเลือกและเพิ่มโปรเจ็กต์ จากนั้นจึงบันทึกการกำหนดค่า

เมื่อคุณกดปุ่มบันทึกปุ่มการกำหนดค่า มันจะเปลี่ยนเส้นทางคุณกลับไปยังแดชบอร์ดหลักของ Flagsmith ที่เราเคยทำงานอยู่
ตอนนี้เรามาเชื่อมโยงหนึ่งในแฟล็กที่มีอยู่กับปัญหา GitHub/คำขอดึง (เพิ่ม PR/ปัญหาจำลองเพื่อทดสอบ) หรือคุณสามารถสร้างแฟล็กใหม่เพื่อทดสอบได้ มาดำเนินการต่อด้วยแฟล็กเบต้าที่เราสร้างไว้แล้วสำหรับ 434 จุดสิ้นสุด
หากต้องการเชื่อมโยงธงกับปัญหาที่มีอยู่หรือคำขอดึง ให้คลิกที่ชื่อธง จากนั้นเมนูด้านข้างจะปรากฏขึ้นจากด้านขวา จากนั้นเลือกแท็บ 'ลิงก์' จากนั้นเลือกตัวเลือก Pull Request และเลือก Pull Request ที่คุณต้องการเชื่อมโยง ปัญหาและคำขอดึงทั้งหมดของคุณที่เชื่อมโยงกับการตั้งค่าสถานะนี้จะมองเห็นได้ด้านล่าง:

หากต้องการตรวจสอบว่าเชื่อมโยงธงสำเร็จแล้ว ให้คลิกไฮเปอร์ลิงก์ที่มีไอคอนลูกศรด้านล่าง ชื่อ ส่วนหัวของคอลัมน์ มันจะนำทางคุณไปยังปัญหาเฉพาะนั้น/คำขอดึงบน GitHub คุณจะเห็นว่าแอป Flagsmith GitHub ได้แสดงความคิดเห็นด้านล่างพร้อมรายละเอียดทั้งหมด เช่น สภาพแวดล้อม ค่าที่เปิดใช้งาน และอื่นๆ

การทดสอบแอป Flagsmith GitHub
หลังจากนี้ เมื่อคุณทำการเปลี่ยนแปลงการตั้งค่าแฟล็ก เช่น การเปิด/ปิดแฟล็ก หรือการเปลี่ยนค่า บอทจะแสดงความคิดเห็นพร้อมรายละเอียดที่อัปเดตทั้งหมด
มาทดสอบโดยปิดแฟล็ก ทันทีที่คุณปิดแฟลชจากแดชบอร์ด บอทควรแสดงความคิดเห็นว่าตอนนี้แฟล็กถูกปิดใช้งานแล้ว:

แค่นั้นแหละ. ด้วยเหตุนี้การผสานรวม Flagsmith เข้ากับ GitHub จึงเป็นเรื่องง่าย
บทสรุป
โดยสรุป ตอนนี้คุณรู้แล้วว่าคุณสามารถใช้ประโยชน์จากแฟล็กฟีเจอร์ในฐานะนักพัฒนาแบ็กเอนด์เพื่อเปลี่ยนแปลงฟังก์ชันการทำงานของแอปของคุณได้ทันที
เพื่อยกระดับสิ่งต่าง ๆ ไปอีกระดับ เราได้รวมแอปสาธิตของเราเข้ากับแอป Flagsmith GitHub เพื่อให้สามารถอัปเดตอยู่เสมอด้วยการเปลี่ยนแปลงสถานะของแฟล็กคุณลักษณะของเราในคำขอดึงข้อมูล/ปัญหาโดยไม่ต้องอัปเดตด้วยตนเอง
ลองตรวจดู Flagsmith repo ที่นี่ และอย่าลืมมอบดาวให้กับแต่ละโปรเจ็กต์เหล่านี้เพื่อแสดงการสนับสนุนของคุณ คุณยังสามารถเข้าร่วมชุมชนที่น่าทึ่งเพื่อรับการสนับสนุนทางเทคนิคได้
คุณสามารถเชื่อมต่อกับฉัน - Pradumna Saraf บนโซเชียลได้ที่นี่
เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น