Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

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

ในบทช่วยสอนนี้ เราจะดูว่าแฟล็กฟีเจอร์ช่วยให้เราเปิดใช้งานและปิดใช้งานฟีเจอร์/ส่วนหนึ่งของโค้ดทุกครั้งที่เราต้องการจาก 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 มากมาย คุณสามารถคลิกที่ชื่อภาษาที่เขียนได้ จากนั้นระบบจะให้รหัสสำเร็จรูปสำหรับภาษานั้น

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

แฟล็กคุณลักษณะการจำกัดอัตรา

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

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

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

ภาพหน้าจอด้านล่างแสดงให้เห็นว่าการกรอกรายละเอียดจะเป็นอย่างไร จากนั้น คลิกที่ สร้างคุณลักษณะ ปุ่มเพื่อสร้างแฟล็ก

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

การตั้งค่าสถานะคุณลักษณะเบต้า

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

การรับรหัสการเข้าถึง

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

การเรียกใช้ API

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

กำลังอัปเดต 380 ตั้งค่าสถานะ

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

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

ตอนนี้เราได้ตั้งค่าฟังก์ชันการทำงานและสาธิตความสามารถในการตั้งค่าสถานะฟีเจอร์แล้ว มาดูกันว่าเราจะผสานรวมแอป Flasgsmith GitHub ได้อย่างไร

วิธีรวมแฟล็กฟีเจอร์เข้ากับแอป GitHub

ขั้นแรก ตรวจสอบให้แน่ใจว่าคุณได้ผลักดันแอปของคุณไปที่ GitHub แล้ว หลังจากนั้น ให้ติดตั้งแอป GitHub Flasgsmith บน repo ของคุณจาก GitHub Marketplace

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

จากนั้นเลือกองค์กรของคุณและที่เก็บที่คุณต้องการติดตั้งแอป คุณสามารถติดตั้งบน repos ทั้งหมดของคุณหรือเลือกอันใดอันหนึ่ง

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

เมื่อคุณกดปุ่มบันทึกปุ่มการกำหนดค่า มันจะเปลี่ยนเส้นทางคุณกลับไปยังแดชบอร์ดหลักของ Flagsmith ที่เราเคยทำงานอยู่

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

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

การทดสอบแอป Flagsmith GitHub

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

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

สร้าง API ที่ปรับขนาดได้ด้วยแฟล็กฟีเจอร์โดยใช้เครื่องมือโอเพ่นซอร์ส

แค่นั้นแหละ. ด้วยเหตุนี้การผสานรวม Flagsmith เข้ากับ GitHub จึงเป็นเรื่องง่าย

บทสรุป

โดยสรุป ตอนนี้คุณรู้แล้วว่าคุณสามารถใช้ประโยชน์จากแฟล็กฟีเจอร์ในฐานะนักพัฒนาแบ็กเอนด์เพื่อเปลี่ยนแปลงฟังก์ชันการทำงานของแอปของคุณได้ทันที

เพื่อยกระดับสิ่งต่าง ๆ ไปอีกระดับ เราได้รวมแอปสาธิตของเราเข้ากับแอป Flagsmith GitHub เพื่อให้สามารถอัปเดตอยู่เสมอด้วยการเปลี่ยนแปลงสถานะของแฟล็กคุณลักษณะของเราในคำขอดึงข้อมูล/ปัญหาโดยไม่ต้องอัปเดตด้วยตนเอง

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

คุณสามารถเชื่อมต่อกับฉัน - Pradumna Saraf บนโซเชียลได้ที่นี่

เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น