Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Redis

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Việc gắn cờ tính năng đã thay đổi mô hình về cách các nhà phát triển phụ trợ có thể kiểm tra và sửa đổi những thứ họ xây dựng. Với cờ tính năng, chúng tôi có thể bật và tắt một tính năng hoặc thay đổi chức năng của một thứ gì đó một cách nhanh chóng chỉ bằng một cú nhấp chuột (không cần triển khai lại).

Trong hướng dẫn này, chúng ta sẽ xem cách các cờ tính năng giúp chúng ta bật và tắt một tính năng/một phần mã bất cứ khi nào chúng ta muốn từ giao diện người dùng mà không cần phải triển khai lại toàn bộ mã.

Để hiểu sâu hơn, chúng tôi sẽ xây dựng một ứng dụng từ đầu, xem xét khả năng gắn cờ tính năng và sử dụng công cụ có tên Flagsmith để quản lý các cờ tính năng đã tạo từ một trang tổng quan duy nhất.

Đây là nội dung chúng tôi sẽ đề cập:

  • Điều kiện tiên quyết

  • Cờ tính năng là gì?

  • Cờ tính năng để phát triển phụ trợ

  • Tại sao nên sử dụng công cụ nguồn mở?

  • Hãy viết mã!

    • Đang khởi tạo công cụ

    • Tạo điểm cuối cho API

    • Cách thêm gắn cờ tính năng

    • Hiểu logic mã của Cờ tính năng

    • Cách tạo cờ tính năng trong Bảng điều khiển Flasgsmith

    • Cờ tính năng giới hạn tỷ lệ

    • Cờ tính năng Beta

    • Lấy khóa truy cập

    • Chạy API

    • Cập nhật cờ rate_limit

    • Cách tích hợp cờ tính năng với ứng dụng GitHub

    • Kiểm tra ứng dụng Flagsmith GitHub

  • Kết luận

Điều kiện tiên quyết

  • Đã cài đặt Golang và có hiểu biết ở mức độ trung bình về nó.

  • Một phiên bản Redis đang chạy (Phiên bản từ xa hoặc cục bộ)

  • Tài khoản Flagsmith (Miễn phí. Chúng tôi sẽ đề cập đến vấn đề này sau trong bài viết.)

Cờ tính năng là gì?

Cờ tính năng là một kỹ thuật đang được phát triển cho phép các nhóm bật hoặc tắt tính năng mà không cần sửa đổi mã nguồn hoặc triển khai lại.

Để đơn giản hơn một chút, hãy coi chúng hoạt động giống như các câu lệnh có điều kiện (ví dụ:câu lệnh if-else):dựa trên thời điểm điều gì đó đúng hay sai, nó sẽ xác định đường dẫn mã sẽ được thực thi.

Cờ tính năng cho phát triển phụ trợ

Bạn có thể đã thấy các cờ tính năng được sử dụng trong giao diện người dùng và trang web, nhưng chúng còn có nhiều tính năng hơn thế nữa. Bạn có thể sử dụng chúng ở phía máy chủ để sửa đổi chức năng của API, thực hiện những việc như sửa đổi/đặt giới hạn tốc độ, thay đổi chức năng của điểm cuối API hoặc tắt hoàn toàn nó. Với tư cách là nhà phát triển phụ trợ, chúng tôi có thể nâng cấp thử nghiệm của mình bằng cờ tính năng.

Để chứng minh điều này, chúng ta sẽ tiến hành xây dựng một ứng dụng demo. Ứng dụng demo được quản lý để hiển thị khả năng gắn cờ tính năng từ sửa đổi chức năng (giới hạn tốc độ) nhanh chóng đến thêm điểm cuối mới vào API cho mục đích thử nghiệm beta hoặc mục đích triển khai ban đầu. Chúng tôi sẽ sử dụng hoàn toàn các công cụ nguồn mở trong quá trình thực hiện!

Chúng tôi sẽ sử dụng các công cụ nguồn mở để xây dựng ứng dụng này (Golang, Redis và Flagsmith). Nguồn mở mang lại sự minh bạch và tin cậy hơn, đồng thời khuyến khích cộng tác với cộng đồng các nhà phát triển phụ trợ toàn cầu.

Bằng cách tích hợp các công cụ nguồn mở, chúng tôi có được khả năng hiển thị đầy đủ khi xây dựng và thử nghiệm. Ví dụ:chúng tôi sẽ tích hợp cờ tính năng với GitHub, cho phép chúng tôi theo dõi vòng đời của một tính năng bằng cách liên kết cờ tính năng Flagsmith với Yêu cầu hoặc sự cố kéo GitHub. Điều này cho phép chúng tôi luôn cập nhật những thay đổi đối với các tính năng của mình mà không cần phải theo dõi từng sửa đổi theo cách thủ công. Chúng tôi có thể dễ dàng theo dõi trạng thái các tính năng của mình trên nhiều môi trường khác nhau.

Hãy viết mã!

Trong hướng dẫn này, bạn sẽ thấy chức năng của ứng dụng thay đổi như thế nào trước và sau khi thử nghiệm bằng cơ chế gắn cờ tính năng. Các công cụ và khung mà chúng tôi sẽ sử dụng là Golang, Docker, Redis, Flagsmith và GitHub. Như đã thảo luận, tất cả đều là nguồn mở và miễn phí tạo tài khoản để kiểm tra.

Để bắt đầu, hãy mở IDE yêu thích của bạn, khởi tạo dự án Golang, sau đó sao chép mã bên dưới vào main.go tập tin. Sau đó chạy go mod tidy để cài đặt tất cả các phần phụ thuộc cần thiết.

Hãy cùng hiểu điều gì đang xảy ra trong đoạn mã dưới đây:

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
}

Khởi tạo công cụ

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()
 ...
 })

Ở trên cùng, chúng tôi khai báo các biến để lưu trữ các ứng dụng khách Redis và Rate limiter để sử dụng lại và khởi tạo chúng một lần. Sau đó, chúng tôi khởi tạo chúng trong initClients() .

Trong main() , trước tiên, chúng tôi tải các biến môi trường từ hệ thống hoặc tệp .env. Sau đó chúng tôi gọi initClients() . Điều này sẽ tạo ứng dụng khách và lưu trữ chúng trong các biến mà chúng tôi đã tạo.

Tiếp theo, chúng ta tạo Gin bộ định tuyến xử lý tất cả các yêu cầu đến của chúng tôi. Đây là các biến môi trường chúng ta cần trong .env tập tin. Đối với bản demo này, chúng tôi cần một phiên bản Redis đang chạy để lưu trữ tất cả dữ liệu cho chức năng giới hạn tốc độ. Chúng ta có thể sử dụng Docker hoặc bất kỳ máy từ xa nào – chỉ cần nhớ cập nhật REDIS_URL tương ứng. Tôi sẽ sử dụng Docker.

Chúng tôi cũng có thể đi trước một dặm và lấy tất cả các biến môi trường từ cờ tính năng, nhưng chúng tôi sẽ không làm điều này ở đây.

REDIS_URL=localhost:6379
PORT=8080
RATE_LIMIT=10

Tạo điểm cuối cho 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"))

Sau đó, chúng tôi tạo hai GET điểm cuối, /ping/beta . Mỗi khi có ai đó chạm tới /ping điểm cuối chúng tôi gọi là rateLimitCall() chức năng. Nó kiểm tra và đặt giới hạn tốc độ của các yêu cầu gửi đến từ địa chỉ IP . Tất cả điều này được lưu trữ trong phiên bản Redis mà chúng tôi đã tạo.

Vì vậy, bây giờ nếu người dùng đã tương tác với /ping Điểm cuối API lần đầu tiên sẽ tạo một mục nhập có giới hạn 10 mỗi giờ . Số giới hạn 10 đến từ RATE_LIMIT chúng tôi đặt và biểu mẫu làm mới hàng giờ xuất phát từ redis_rate.PerHour(RATE_LIMIT) chức năng.

Tiếp theo, chúng tôi kiểm tra xem người dùng có giới hạn còn lại hay không. Nếu có, chúng tôi sẽ gửi lại tin nhắn với số lượng yêu cầu còn lại. Ngược lại, nếu họ đạt đến giới hạn giới hạn, chúng tôi sẽ gửi lại thông báo cho họ biết điều này.

Ngoài /ping điểm cuối, chúng ta có điểm cuối khác /beta . Nó trả về một thông báo đơn giản nhưng sau này chúng ta sẽ xem cách (sử dụng cờ tính năng) chúng ta có thể bật và tắt hoàn toàn chức năng của điểm cuối này như thế nào.

Cách thêm gắn cờ tính năng

Bây giờ là lúc thêm khả năng gắn cờ tính năng vào ứng dụng của chúng ta. Chúng tôi sẽ sử dụng Flagsmith. Flagsmith là một phần mềm nguồn mở cho phép chúng ta dễ dàng tạo và quản lý các cờ tính năng trên các ứng dụng web, thiết bị di động và phía máy chủ.

Bằng cách sử dụng Flagsmith, chúng tôi có thể gói các tính năng trong một lá cờ rồi bật hoặc tắt chúng cho các môi trường, người dùng hoặc phân khúc người dùng khác nhau. Sau đó, bạn sẽ có thể quản lý tất cả chúng từ trang tổng quan Flagsmith mà không cần triển khai lại.

Vì vậy, hãy cài đặt gói Flagsmith bằng cách chạy lệnh bên dưới:

go get github.com/Flagsmith/flagsmith-go-client/v3

Sau đó, chúng tôi nhập gói bằng cách đặt bí danh flagsmith . Dưới đây là chức năng được cập nhật sau khi chúng tôi áp dụng tính năng gắn cờ cho mã hiện có của mình.

Hãy cùng tìm hiểu những thay đổi mà chúng tôi đã thực hiện ở đây (tôi sẽ giải thích đoạn mã bên dưới):

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
}

Tìm hiểu logic mã cờ tính năng

func getFeatureFlags() flagsmith.Flags {
 ctx := context.Background()
 flags, _ := flagsmithClient.GetEnvironmentFlags(ctx)
 return flags
}

Đầu tiên, hãy chuyển thẳng sang getFeatureFlags() mới chức năng chúng tôi đã tạo ở phía dưới. Hàm này sẽ trả về tất cả các cờ mà chúng tôi đã tạo trên bảng điều khiển Flagsmith bằng cách gọi GetEnvironmentFlags() phương pháp trên flagsmithClient .

Chúng tôi đã khởi tạo flagsmithClient bên trong initClients() chức năng. Khách hàng Flagsmith cần có khóa truy cập (NewClient() function) mà chúng ta có thể lấy từ bảng điều khiển Flagsmith. Như chúng tôi đã làm với khách hàng Redis và Limter, chúng tôi sẽ lưu trữ khách hàng trong một biến toàn cục để có thể sử dụng lại. Bạn sẽ hiểu trang tổng quan, tạo cờ và lấy khóa ở các bước sau.

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
}

Hiện đang đến với rateLimitCall() thay vì nhận RATE_LIMIT từ môi trường, chúng tôi nhận được giá trị từ rate_limit cờ (mà chúng ta sẽ tạo sau). Chúng tôi gọi getFeatureFlags() và nhận cờ rate_limit giá trị từ tất cả các cờ.

Bằng cách đặt những điều này làm cờ tính năng, chúng tôi có thể tự động thay đổi giới hạn bất cứ lúc nào từ trang tổng quan. Chúng ta không cần thay đổi chức năng của mã hoặc thực hiện theo cách truyền thống bằng cách thay đổi RATE_LIMIT giá trị và chạy lại máy chủ để nó nhận được các giá trị cập nhật mới.

 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")
 }
 })

Hiện đang đến với /beta điểm cuối, dựa trên việc cờ beta được bật hay tắt, điểm cuối này sẽ phân phát truy vấn. Nếu không, nó sẽ hoạt động như một điểm cuối không thể truy cập và trả về thông báo lỗi 404.

Trong ví dụ của chúng tôi, tôi đã thêm một thông báo giữ chỗ cơ bản để cho biết nó sẽ hoạt động như thế nào, nhưng điều này mở ra những khả năng mới trong quá trình thử nghiệm và phát hành lần đầu (beta). Nếu API có điểm cuối mới, chúng tôi có thể bao bọc chức năng trong cờ tính năng và làm cho nó khả dụng và không khả dụng chỉ bằng một cú nhấp chuột. Ngoài ra, chúng tôi có thể làm nhiều việc hơn như lên lịch và phát hành theo kiểu hoàng yến.

Ngoài ra, .env của chúng tôi tập tin sẽ trông như thế này. Chúng tôi đã xóa RATE_LIMIT và thêm FLAGSMITH_ENVIRONMENT_KEY .

REDIS_URL=localhost:6379
PORT=8080
FLAGSMITH_ENVIRONMENT_KEY=ser.ZRd***********469

Cách tạo cờ tính năng trong Bảng điều khiển Flasgsmith

Hãy đi tới bảng điều khiển Flagsmith để tạo các cờ mà chúng tôi đã sử dụng ở trên và lấy khóa truy cập. Nếu chưa có tài khoản Flagsmith, bạn có thể đăng ký miễn phí tại đây.

Sau khi đăng ký, bạn sẽ được nhắc tạo một tổ chức và một dự án. Việc tách dự án là tốt vì nó giúp chúng ta tách biệt logic cho các dự án khác nhau. Sau khi hoàn tất, bạn sẽ thấy một trang tổng quan giống như ảnh chụp màn hình bên dưới.

Chúng tôi có vô số chức năng từ tích hợp đến lập lịch gắn cờ để so sánh các thay đổi. Ngoài Go, Flagsmith còn cung cấp nhiều SDK. Bạn có thể nhấp vào nơi viết tên ngôn ngữ và nó sẽ cung cấp cho bạn một số mã soạn sẵn cho ngôn ngữ đó.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Cờ tính năng giới hạn tỷ lệ

Bây giờ, hãy tạo cờ tính năng đầu tiên cho giới hạn tốc độ. Nhấp vào Tạo tính năng nút ở góc trên bên phải. Một cửa sổ thanh bên sẽ mở ra. Đặt tên, sau đó để cờ bật đúng chiều khi tạo, chúng ta có thể chọn Bật theo mặc định.

Trong phần giá trị, chúng ta cần đặt giá trị cờ. Nó có thể có các định dạng như Txt, JSON, XML, v.v. Vì giá trị đặc trưng của chúng tôi là văn bản đơn giản như 20, 30, v.v. nên chúng tôi sẽ chọn Txt (giá trị mặc định) và đặt giới hạn ngẫu nhiên – chúng tôi sẽ sử dụng 20 .

Bạn cũng có thể đưa ra các thẻ và mô tả. Thẻ có thể hữu ích khi lọc Cờ tính năng. Ví dụ:chúng ta có thể tạo thẻ backend để lọc ra tất cả các cờ tính năng liên quan đến Phần cuối. Mô tả này là lời giải thích ngắn gọn về chức năng của cờ cụ thể trong tương lai này khi nó được bật (và sẽ giúp bạn hiểu rõ hơn về sau).

Ảnh chụp màn hình bên dưới cho thấy nó trông như thế nào sau khi điền thông tin chi tiết. Sau đó, nhấp vào Tạo tính năng nút để tạo cờ.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Cờ tính năng beta

Bây giờ hãy tạo thứ hai, beta cờ tính năng Quá trình này sẽ tương tự như quy trình đầu tiên, nhưng trong quy trình này, chúng ta không cần đặt bất kỳ giá trị cờ nào và để trống cột đó. Khi chúng tôi tạo cả hai cờ, trang tổng quan của chúng tôi sẽ trông như thế này. Nó hiển thị tên cờ, giá trị, trạng thái hiện tại (chế độ xem), v.v.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Lấy khóa truy cập

Để lấy Khóa truy cập, hãy nhấp vào Khóa SDK từ thanh bên và nhấp vào Tạo khóa môi trường phía máy chủ nút để tạo khóa. Vì ứng dụng của chúng tôi nằm ở phía máy chủ nên chỉ nên sử dụng ứng dụng đó. Sau đó sao chép và dán khóa đó vào giá trị được đặt trong .env cho FLAGSMITH_ENVIRONMENT_KEY chìa khóa.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Chạy API

Bây giờ mọi thứ đã được thiết lập, vì vậy hãy quay lại IDE và chạy máy chủ bằng cách thực thi go run main.go lệnh trong thiết bị đầu cuối. Chúng ta sẽ thấy thông báo này trong thiết bị đầu cuối. Trong trường hợp bạn gặp bất kỳ lỗi nào, chỉ cần kiểm tra xem các gói đã được cài đặt đúng chưa, các biến đã được đặt chính xác chưa và ứng dụng có truy cập vào phiên bản Redis hay không.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Bây giờ nếu chúng ta truy cập localhost:8080/ping , chúng ta sẽ nhận được tin nhắn {"Your left over API request is":19} . Giới hạn là 20, chúng tôi hiện đã thực hiện một yêu cầu và yêu cầu còn lại là 19.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Cập nhật rate_limit Cờ

Hãy cập nhật rate_limit giá trị cờ thành 10 và xem điều gì sẽ xảy ra. Để làm như vậy, hãy truy cập lại bảng điều khiển Flagsmith và nhấp vào tên lá cờ. Một thanh menu bên sẽ mở ra. Cập nhật giá trị thành 10 và nhấp vào Cập nhật giá trị tính năng nút.

Chúng tôi cũng có thể lên lịch cập nhật. Ví dụ:điều này có thể hữu ích khi chúng tôi dự đoán lưu lượng truy cập sẽ tăng đột biến ở một khung thời gian nhất định và giảm giới hạn cho mỗi người dùng để giảm tải máy chủ.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Nếu bây giờ bạn truy cập localhost:8080/ping , bạn sẽ nhận được tin nhắn {"Your left over API request is":8} – vì tổng giới hạn là 10 và chúng tôi đã yêu cầu hai lần rồi.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Bây giờ chúng ta hãy kiểm tra /beta điểm cuối. Truy cập localhost:8080/beta và chúng ta sẽ thấy thông báo {"message":"This is beta endpoint"} .

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Bây giờ hãy quay lại bảng điều khiển Flagsmith và bật công tắc để tắt cờ này. Bây giờ hãy truy cập URL. Bạn sẽ nhận được thông báo 404 như thể điểm cuối này chưa từng tồn tại.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Bây giờ chúng ta đã thiết lập chức năng và demo khả năng gắn cờ tính năng, hãy xem cách chúng ta có thể tích hợp Ứng dụng Flasgsmith GitHub.

Cách tích hợp cờ tính năng với ứng dụng GitHub

Trước tiên, hãy đảm bảo bạn đã đẩy ứng dụng của mình lên GitHub. Sau đó, cài đặt Ứng dụng GitHub Flasgsmith trên kho lưu trữ của bạn từ GitHub Marketplace.

Bằng cách tích hợp GitHub và Falagsmith, chúng tôi có thể xem các bản cập nhật về cờ/tính năng tính năng của bạn dưới dạng nhận xét trong Vấn đề GitHub và Yêu cầu kéo. Điều này cho phép chúng tôi dễ dàng theo dõi các tính năng, từ việc tạo sự cố đến hợp nhất PR và triển khai các thay đổi.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Sau đó chọn tổ chức của bạn và kho lưu trữ nơi bạn muốn cài đặt ứng dụng. Bạn có thể cài đặt nó trên tất cả các kho lưu trữ của mình hoặc chọn một kho lưu trữ cụ thể.

Khi cài đặt, bạn sẽ tự động được chuyển hướng đến bảng điều khiển Flagmsith để định cấu hình và hoàn tất quá trình tích hợp. Hầu hết dữ liệu sẽ được điền trước nên bạn chỉ cần chọn và thêm dự án, sau đó lưu cấu hình.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Sau khi bạn nhấn nút Lưu Nút cấu hình , nó sẽ chuyển hướng bạn trở lại trang tổng quan chính của Flagsmith nơi chúng tôi đã làm việc trước đây.

Bây giờ, hãy liên kết một trong các cờ hiện có với vấn đề/yêu cầu kéo GitHub (đưa ra một PR/vấn đề giả để kiểm tra nó) hoặc bạn có thể tạo một cờ mới để kiểm tra. Hãy tiếp tục với cờ beta mà chúng tôi đã tạo cho beta điểm cuối.

Để liên kết cờ với sự cố hiện có hoặc yêu cầu kéo, hãy nhấp vào tên cờ và menu bên sẽ bật lên từ bên phải. Sau đó, chọn tab 'Liên kết'. Sau đó chọn tùy chọn Yêu cầu kéo và chọn Yêu cầu kéo bạn muốn liên kết. Tất cả các Vấn đề và Yêu cầu kéo được liên kết với cờ này đều hiển thị bên dưới:

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Để xác minh rằng cờ đã được liên kết thành công, hãy nhấp vào siêu liên kết có biểu tượng mũi tên bên dưới Tên tiêu đề cột. Nó sẽ điều hướng bạn đến Vấn đề/Yêu cầu kéo cụ thể đó trên GitHub. Bạn có thể thấy Ứng dụng Flagsmith GitHub đã nhận xét bên dưới với tất cả thông tin chi tiết, chẳng hạn như môi trường, giá trị được bật, v.v.

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Thử nghiệm ứng dụng Flagsmith GitHub

Sau này, khi bạn thực hiện bất kỳ thay đổi nào đối với cài đặt cờ, chẳng hạn như bật/tắt cờ hoặc thay đổi giá trị, bot sẽ nhận xét với tất cả các chi tiết được cập nhật.

Hãy kiểm tra bằng cách tắt cờ. Ngay sau khi bạn tắt đèn flash từ Trang tổng quan, bot sẽ nhận xét rằng cờ hiện đã bị tắt:

Xây dựng API có thể mở rộng với Cờ tính năng bằng Công cụ nguồn mở

Thế thôi. Đó là cách tích hợp Flagsmith với GitHub một cách đơn giản.

Kết luận

Tóm lại, giờ đây bạn đã biết cách tận dụng cờ tính năng với tư cách là nhà phát triển phụ trợ để thay đổi chức năng của ứng dụng một cách nhanh chóng.

Để đưa mọi thứ lên một tầm cao mới, chúng tôi đã tích hợp ứng dụng demo của mình với ứng dụng Flagsmith GitHub để ứng dụng có thể luôn cập nhật những thay đổi về trạng thái cờ tính năng của chúng tôi trên Yêu cầu/Vấn đề kéo mà không cần phải cập nhật chúng theo cách thủ công.

Hãy xem repo Flagsmith tại đây và đừng quên tặng cho mỗi dự án này một ngôi sao để thể hiện sự ủng hộ của bạn. Bạn cũng có thể tham gia cộng đồng tuyệt vời của họ để nhận được hỗ trợ kỹ thuật.

Bạn có thể kết nối với tôi - Pradumna Saraf, trên mạng xã hội tại đây.

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu