ফিচার ফ্ল্যাগিং কীভাবে ব্যাকএন্ড ডেভেলপাররা তাদের তৈরি করা জিনিসগুলি পরীক্ষা এবং সংশোধন করতে পারে তার দৃষ্টান্ত পরিবর্তন করেছে। বৈশিষ্ট্য ফ্ল্যাগগুলির সাহায্যে, আমরা একটি বৈশিষ্ট্য সক্ষম এবং অক্ষম করতে পারি বা এক ক্লিকে উড়তে থাকা কিছুর কার্যকারিতা পরিবর্তন করতে পারি (পুনরায় স্থাপনের প্রয়োজন নেই)।
এই টিউটোরিয়ালে, আমরা দেখব কীভাবে ফিচার ফ্ল্যাগ আমাদেরকে সাহায্য করে একটি ফিচার/কোডের একটি অংশ যখনই আমরা চাই তখনই UI থেকে, পুরো কোডটি পুনরায় ব্যবহার করার প্রয়োজন ছাড়াই।
জিনিসগুলি আরও গভীরভাবে বোঝার জন্য, আমরা স্ক্র্যাচ থেকে একটি অ্যাপ তৈরি করব, বৈশিষ্ট্য ফ্ল্যাগিং ক্ষমতাগুলি দেখব এবং একটি একক ড্যাশবোর্ড থেকে আমাদের তৈরি বৈশিষ্ট্য ফ্ল্যাগগুলি পরিচালনা করতে ফ্ল্যাগস্মিথ নামে একটি টুল ব্যবহার করব৷
আমরা যা কভার করব তা এখানে:
-
পূর্বশর্ত
-
একটি বৈশিষ্ট্য পতাকা কি?
-
ব্যাকএন্ড ডেভেলপমেন্টের জন্য ফিচার পতাকা
-
কেন ওপেন সোর্স টুল ব্যবহার করবেন?
-
আসুন কোড করি!
-
টুল শুরু করা হচ্ছে
-
API
এর জন্য শেষ পয়েন্ট তৈরি করা -
কিভাবে ফিচার ফ্ল্যাগিং যোগ করবেন
-
ফিচার ফ্ল্যাগ কোড লজিক বোঝা
-
কিভাবে Flasgsmith ড্যাশবোর্ডে ফিচার ফ্ল্যাগ তৈরি করবেন
-
রেট লিমিটিং ফিচার ফ্ল্যাগ
-
বিটা বৈশিষ্ট্য পতাকা
-
অ্যাক্সেস কী পাওয়া যাচ্ছে
-
API চালানো হচ্ছে
-
রেট_লিমিট ফ্ল্যাগ আপডেট করা হচ্ছে
-
কিভাবে GitHub অ্যাপের সাথে ফিচার ফ্ল্যাগ একত্রিত করবেন
-
ফ্ল্যাগস্মিথ গিটহাব অ্যাপ পরীক্ষা করা হচ্ছে
-
-
উপসংহার
পূর্বশর্ত
-
গোলং ইনস্টল করা হয়েছে এবং এটির একটি মাঝারি স্তরের বোঝাপড়া।
-
একটি চলমান রেডিস ইনস্ট্যান্স (দূরবর্তী বা স্থানীয় উদাহরণ)
-
ফ্ল্যাগস্মিথ অ্যাকাউন্ট (এটি বিনামূল্যে। আমরা পরে নিবন্ধে এটি কভার করব।)
একটি বৈশিষ্ট্য পতাকা কি?
ফিচার ফ্ল্যাগ হল ডেভেলপমেন্টের একটি কৌশল যা টিমগুলিকে সোর্স কোড পরিবর্তন বা পুনঃনিয়োগ না করেই বৈশিষ্ট্যগুলি চালু বা বন্ধ করতে দেয়৷
এটিকে আরও সহজ করার জন্য, এগুলিকে কন্ডিশনাল স্টেটমেন্টের মতো কার্যকরী বাছাই হিসাবে ভাবুন (উদাহরণস্বরূপ, যদি-অন্যথায় বিবৃতি):যখন কিছু সত্য বা মিথ্যা হয় তার উপর ভিত্তি করে, এটি কার্যকর করা হবে এমন কোড পাথ নির্ধারণ করে।
ব্যাকএন্ড ডেভেলপমেন্টের জন্য ফিচার ফ্ল্যাগ
আপনি ফ্রন্টএন্ড এবং ওয়েবসাইটগুলিতে ব্যবহৃত বৈশিষ্ট্য ফ্ল্যাগগুলি দেখে থাকতে পারেন তবে তাদের আরও অনেক কিছু রয়েছে। আপনি এগুলিকে একটি API-এর কার্যকারিতা পরিবর্তন করতে, হারের সীমা সংশোধন/সেট করার মতো জিনিসগুলি করতে, API এন্ডপয়েন্টের কার্যকারিতা পরিবর্তন করতে বা সম্পূর্ণরূপে বন্ধ করতে ব্যবহার করতে পারেন৷ ব্যাকএন্ড ডেভেলপার হিসেবে, আমরা ফিচার ফ্ল্যাগ দিয়ে আমাদের টেস্টিং সমতল করতে পারি।
এটি প্রদর্শন করার জন্য, আমরা একটি ডেমো অ্যাপ তৈরির মাধ্যমে যাব। ডেমো অ্যাপটি বিটা টেস্টিং বা প্রাথমিক রোলিং উদ্দেশ্যে এপিআই-এ একটি নতুন এন্ডপয়েন্ট যোগ করার জন্য ফ্লাইতে কার্যকারিতা (রেট লিমিট) পরিবর্তন করা থেকে ফিচার ফ্ল্যাগিং ক্ষমতা দেখানোর জন্য তৈরি করা হয়েছে। আমরা পথ ধরে সম্পূর্ণরূপে ওপেন-সোর্স টুল ব্যবহার করব!
আমরা এই অ্যাপটি তৈরি করতে ওপেন সোর্স টুল ব্যবহার করব (গোলাং, রেডিস এবং ফ্ল্যাগস্মিথ)। ওপেন সোর্স আরও স্বচ্ছতা এবং বিশ্বাস নিয়ে আসে এবং ব্যাকএন্ড ডেভেলপারদের বিশ্ব সম্প্রদায়ের সাথে সহযোগিতাকে উৎসাহিত করে।
ওপেন সোর্স টুলগুলিকে একীভূত করার মাধ্যমে, আমরা নির্মাণ এবং পরীক্ষা করার সাথে সাথে আমরা সম্পূর্ণ দৃশ্যমানতা পাই। উদাহরণস্বরূপ, আমরা গিটহাবের সাথে ফিচার ফ্ল্যাগগুলিকে একীভূত করব, যা আমাদের একটি ফিচারের লাইফ সাইকেল ট্র্যাক করতে দেয় একটি ফ্ল্যাগস্মিথ ফিচার পতাকাকে একটি গিটহাব পুল রিকোয়েস্ট বা ইস্যুর সাথে লিঙ্ক করে। এটি আমাদের প্রতিটি পরিবর্তনকে ম্যানুয়ালি ট্র্যাক না করে আমাদের বৈশিষ্ট্যগুলির পরিবর্তনগুলির সাথে আপডেট থাকতে দেয়৷ আমরা সহজেই বিভিন্ন পরিবেশে আমাদের বৈশিষ্ট্যগুলির অবস্থা ট্র্যাক করতে পারি৷
আসুন কোড করি!
এই টিউটোরিয়ালে, আপনি দেখতে পাবেন কীভাবে একটি অ্যাপের কার্যকারিতা ফিচার ফ্ল্যাগিং মেকানিজমের সাথে পরীক্ষার আগে এবং পরে পরিবর্তিত হয়। আমরা যে টুলস এবং ফ্রেমওয়ার্কগুলি ব্যবহার করব তা হল গোলং, ডকার, রেডিস, ফ্ল্যাগস্মিথ এবং গিটহাব। যেমন আলোচনা করা হয়েছে, সবগুলিই ওপেন সোর্স এবং পরীক্ষা করার জন্য একটি অ্যাকাউন্ট তৈরি করতে বিনামূল্যে৷
৷
শুরু করতে, আপনার প্রিয় IDE খুলুন, একটি গোলং প্রকল্প শুরু করুন, এবং তারপর main.go-এ নীচের কোডটি অনুলিপি করুন ফাইল তারপর go mod tidy চালান এটির প্রয়োজনীয় সমস্ত নির্ভরতা ইনস্টল করতে।
আসুন নীচের কোড স্নিপেটে কী ঘটছে তা বুঝুন:
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 সংরক্ষণ করার জন্য ভেরিয়েবল ঘোষণা করি এবং রেট লিমিটার ক্লায়েন্টদের পুনরায় ব্যবহার করতে এবং একবার শুরু করার জন্য। তারপর আমরা সেগুলিকে initClients()-এ আরম্ভ করি .
main()-এ , প্রথমে, আমরা সিস্টেম বা .env ফাইল থেকে এনভায়রনমেন্ট ভেরিয়েবল লোড করি। তারপর আমরা initClients() কল করি . এটি ক্লায়েন্ট তৈরি করবে এবং তাদের আমাদের তৈরি ভেরিয়েবলে সংরক্ষণ করবে।
এরপরে, আমরা একটি Gin তৈরি করি রাউটার যা আমাদের সমস্ত আগত অনুরোধগুলি পরিচালনা করে। এগুলি হল আমাদের .env-এ আমাদের প্রয়োজনীয় পরিবেশ ভেরিয়েবল ফাইল এই ডেমোর জন্য, রেট-সীমিত কার্যকারিতার জন্য সমস্ত ডেটা সঞ্চয় করার জন্য আমাদের একটি রেডিস ইন্সট্যান্স দরকার। আমরা ডকার বা যেকোনো দূরবর্তী মেশিন ব্যবহার করতে পারি - শুধু REDIS_URL আপডেট করতে ভুলবেন না সেই অনুযায়ী আমি ডকার ব্যবহার করতে যাচ্ছি।
আমরা এক মাইল এগিয়ে যেতে পারি এবং বৈশিষ্ট্য ফ্ল্যাগগুলি থেকে সমস্ত পরিবেশের ভেরিয়েবল পেতে পারি, তবে আমরা এখানে এটি করব না।
REDIS_URL=localhost:6379
PORT=8080
RATE_LIMIT=10
এপিআই-এর জন্য এন্ডপয়েন্ট তৈরি করা
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 তৈরি করি শেষ পয়েন্ট, /ping এবং /beta . প্রতিবার কেউ /ping হিট করে শেষ বিন্দুকে আমরা rateLimitCall() বলি ফাংশন এটি একটি IP ঠিকানা থেকে আগত অনুরোধের হার সীমা পরীক্ষা করে এবং সেট করে . এই সব আমরা তৈরি Redis উদাহরণে সংরক্ষিত হয়.
সুতরাং, এখন যদি ব্যবহারকারী /ping এর সাথে ইন্টারঅ্যাক্ট করে থাকেন প্রথমবারের জন্য API এন্ডপয়েন্ট, 10 প্রতি ঘন্টা সীমা সহ একটি এন্ট্রি তৈরি করবে . সীমা সংখ্যা 10 RATE_LIMIT থেকে আসে আমরা সেট করি, এবং প্রতি ঘণ্টায় রিফ্রেশ ফর্মটি আসে redis_rate.PerHour(RATE_LIMIT) থেকে ফাংশন।
এর পরে, আমরা ব্যবহারকারীর একটি অবশিষ্ট সীমা আছে কিনা তা পরীক্ষা করি। যদি হ্যাঁ, আমরা তাদের অবশিষ্ট অনুরোধের সংখ্যা সহ একটি বার্তা ফেরত দেব। অন্যথায়, যদি তারা লিমিট ক্যাপকে আঘাত করে, আমরা তাদের এটি জানিয়ে একটি বার্তা ফেরত দিই।
/ping ছাড়াও এন্ডপয়েন্ট, আমাদের আরেকটি এন্ডপয়েন্ট /beta আছে . এটি একটি সাধারণ বার্তা ফেরত দেয়, কিন্তু পরে আমরা দেখতে পাব কীভাবে (ফিচার ফ্ল্যাগ ব্যবহার করে) আমরা এই এন্ডপয়েন্টের কার্যকারিতা সম্পূর্ণরূপে চালু এবং বন্ধ করতে পারি।
কিভাবে ফিচার ফ্ল্যাগিং যোগ করবেন
এখন আমাদের অ্যাপে বৈশিষ্ট্য ফ্ল্যাগিং ক্ষমতা যুক্ত করার সময়। আমরা ফ্ল্যাগস্মিথ ব্যবহার করতে যাচ্ছি। ফ্ল্যাগস্মিথ হল একটি ওপেন সোর্স সফ্টওয়্যার যা আমাদের সহজেই ওয়েব, মোবাইল এবং সার্ভার-সাইড অ্যাপ্লিকেশন জুড়ে বৈশিষ্ট্য পতাকা তৈরি এবং পরিচালনা করতে দেয়৷
ফ্ল্যাগস্মিথ ব্যবহার করে, আমরা বৈশিষ্ট্যগুলিকে একটি পতাকায় মুড়ে দিতে পারি এবং তারপরে বিভিন্ন পরিবেশ, ব্যবহারকারী বা ব্যবহারকারীর অংশগুলির জন্য সেগুলিকে চালু বা বন্ধ করতে পারি। এবং তারপরে আপনি ফ্ল্যাগস্মিথ ড্যাশবোর্ড থেকে সেগুলিকে পুনরায় কাজে লাগানোর প্রয়োজন ছাড়াই পরিচালনা করতে সক্ষম হবেন৷
সুতরাং, আসুন নীচের কমান্ডটি চালিয়ে ফ্ল্যাগস্মিথ প্যাকেজটি ইনস্টল করি:
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
}
প্রথমে, আসুন সরাসরি নতুন getFeatureFlags()-এ চলে যাই ফাংশন আমরা নীচে তৈরি করেছি। এই ফাংশনটি GetEnvironmentFlags() কল করে ফ্ল্যাগস্মিথ ড্যাশবোর্ডে আমাদের তৈরি করা সমস্ত পতাকা ফিরিয়ে দেবে flagsmithClient এ পদ্ধতি .
আমরা flagsmithClient শুরু করেছি initClients() এর ভিতরে ফাংশন ফ্ল্যাগস্মিথ ক্লায়েন্টের অ্যাক্সেস কী প্রয়োজন (NewClient() ফাংশন) যা আমরা ফ্ল্যাগস্মিথ ড্যাশবোর্ড থেকে পেতে পারি। আমরা যেমন 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
}
এখন rateLimitCall() এ আসছে RATE_LIMIT পাওয়ার পরিবর্তে ফাংশন পরিবেশ থেকে, আমরা rate_limit থেকে মান পাই পতাকা (যা আমরা পরে তৈরি করব)। আমরা getFeatureFlags() কল করি এবং পতাকা পান rate_limit সমস্ত পতাকা থেকে মূল্যবান।
এগুলিকে ফিচার ফ্ল্যাগ হিসাবে সেট করে, আমরা ড্যাশবোর্ড থেকে যে কোনো সময় গতিশীলভাবে সীমা পরিবর্তন করতে পারি। আমাদের কোডের কার্যকারিতা পরিবর্তন করতে হবে না বা RATE_LIMIT পরিবর্তন করে ঐতিহ্যগতভাবে করতে হবে না মান এবং সার্ভার পুনরায় চালানো যাতে এটি নতুন আপডেট করা মান ধরে।
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")
}
})
এখন /beta এ আসছে এন্ডপয়েন্ট, বিটা ফ্ল্যাগ সক্রিয় বা নিষ্ক্রিয় কিনা তার উপর ভিত্তি করে, এই এন্ডপয়েন্ট প্রশ্নটি পরিবেশন করবে। অন্যথায়, এটি একটি অ-পৌছানযোগ্য এন্ডপয়েন্ট হিসাবে কাজ করবে এবং একটি 404 ত্রুটি বার্তা প্রদান করবে৷
আমাদের উদাহরণে, এটি কীভাবে কাজ করবে তা দেখানোর জন্য আমি একটি মৌলিক স্থানধারক বার্তা যোগ করেছি, তবে এটি পরীক্ষা এবং প্রাথমিক প্রকাশের (বিটা) ক্ষেত্রে নতুন সম্ভাবনার খোলে। যদি এপিআই-এর একটি নতুন এন্ডপয়েন্ট থাকে, তাহলে আমরা ফিচার পতাকায় কার্যকারিতা মুড়ে দিতে পারি এবং একটি বোতামের একক ক্লিকে এটি উপলব্ধ এবং অনুপলব্ধ করতে পারি। এছাড়াও, আমরা শিডিউলিং এবং ক্যানারি রিলিজের মতো আরও অনেক কিছু করতে পারি।
এছাড়াও, আমাদের .env ফাইল এই মত দেখাবে। আমরা RATE_LIMIT সরিয়ে দিয়েছি এবং FLAGSMITH_ENVIRONMENT_KEY যোগ করা হয়েছে .
REDIS_URL=localhost:6379
PORT=8080
FLAGSMITH_ENVIRONMENT_KEY=ser.ZRd***********469
ফ্ল্যাগস্মিথ ড্যাশবোর্ডে কীভাবে ফিচার ফ্ল্যাগ তৈরি করবেন
আসুন আমরা উপরে যে পতাকাগুলি ব্যবহার করেছি তা তৈরি করতে এবং অ্যাক্সেস কী পেতে ফ্ল্যাগস্মিথ ড্যাশবোর্ডে যাই। আপনার যদি ফ্ল্যাগস্মিথ অ্যাকাউন্ট না থাকে তবে আপনি এখানে বিনামূল্যে সাইন আপ করতে পারেন।
আপনি সাইন আপ করার পরে আপনাকে একটি সংস্থা এবং একটি প্রকল্প তৈরি করতে বলা হবে। প্রকল্প পৃথকীকরণ ভাল, কারণ এটি আমাদের বিভিন্ন প্রকল্পের জন্য যুক্তি বিচ্ছিন্ন করতে সাহায্য করে। একবার আপনি হয়ে গেলে, আপনি একটি ড্যাশবোর্ড দেখতে পাবেন, ঠিক নীচের স্ক্রিনশটের মতো৷
৷পরিবর্তনের তুলনা করার জন্য আমাদের কাছে ইন্টিগ্রেশন থেকে শুরু করে ফ্ল্যাগ নির্ধারণ করার জন্য প্রচুর কার্যকারিতা রয়েছে। Go ছাড়াও, Flagsmith অনেক SDK প্রদান করে। আপনি যেখানে ভাষার নাম লেখা আছে সেখানে ক্লিক করতে পারেন এবং এটি আপনাকে সেই ভাষার জন্য কিছু বয়লারপ্লেট কোড দেবে৷

রেট লিমিটিং ফিচার ফ্ল্যাগ
এখন, রেট সীমার জন্য আমাদের প্রথম বৈশিষ্ট্য পতাকা তৈরি করা যাক। বৈশিষ্ট্য তৈরি করুন-এ ক্লিক করুন৷ উপরের ডান কোণায় বোতাম। একটি সাইডবার উইন্ডো খুলবে। নাম সেট করুন, তারপর তৈরি করার সময় পতাকাটিকে সঠিকভাবে চালু করতে, আমরা ডিফল্টরূপে সক্ষম নির্বাচন করতে পারি।
মান বিভাগে, আমাদের পতাকা মান সেট করতে হবে। এটি Txt, JSON, XML ইত্যাদি ফরম্যাট নিতে পারে। যেহেতু আমাদের বৈশিষ্ট্যের মান হল সাধারণ পাঠ্য যেমন 20, 30, এবং তাই, আমরা Txt (ডিফল্ট একটি) নির্বাচন করব এবং একটি এলোমেলো সীমা সেট করব – আমরা 20 এর সাথে যাব .
আপনি ট্যাগ এবং বিবরণ দিতে পারেন. ফিচার ফ্ল্যাগগুলি ফিল্টার করার সময় ট্যাগগুলি সহায়ক হতে পারে৷ উদাহরণস্বরূপ, আমরা একটি ট্যাগ backend তৈরি করতে পারি ব্যাকএন্ড সম্পর্কিত সমস্ত বৈশিষ্ট্য ফ্ল্যাগ ফিল্টার করতে। বর্ণনাটি একটি সংক্ষিপ্ত ব্যাখ্যা যা এই নির্দিষ্ট ভবিষ্যত পতাকাটি সক্ষম হলে কী করে (এবং ভবিষ্যতে বোঝার জন্য সাহায্য করবে)।
নীচের স্ক্রিনশটটি বিশদগুলি পূরণ করার পরে এটি কীভাবে দেখাবে তা দেখায়। তারপর, বৈশিষ্ট্য তৈরি করুন-এ ক্লিক করুন৷ পতাকা তৈরি করতে বোতাম।

বিটা বৈশিষ্ট্য পতাকা
এখন একটি সেকেন্ড তৈরি করা যাক, beta বৈশিষ্ট্য পতাকা। এটি প্রথমটির মতো একই প্রক্রিয়া হবে, তবে এটিতে, আমাদের কোনও পতাকা মান সেট করতে হবে না এবং সেই কলামটি খালি রাখতে হবে না। একবার আমরা উভয় পতাকা তৈরি করলে, আমাদের ড্যাশবোর্ডটি এরকম দেখাবে। এটি পতাকার নাম, মান, বর্তমান অবস্থা (দর্শন) এবং আরও অনেক কিছু দেখায়৷

অ্যাক্সেস কী পাওয়া
অ্যাক্সেস কী পেতে, SDK কী-এ ক্লিক করুন সাইডবার থেকে, এবং সার্ভার-সাইড এনভায়রনমেন্ট কী তৈরি করুন ক্লিক করুন একটি কী তৈরি করতে বোতাম। যেহেতু আমাদের অ্যাপটি সার্ভার-সাইড, শুধুমাত্র এটি ব্যবহার করা ভালো। তারপর সেই কীটিকে .env-এ রাখা মানটিতে অনুলিপি করে পেস্ট করুন FLAGSMITH_ENVIRONMENT_KEY-এর জন্য কী।

এপিআই চালানো হচ্ছে
এখন সবকিছু সেট করা হয়েছে, তাই আসুন IDE-তে ফিরে যাই এবং go run main.go এক্সিকিউট করে সার্ভার চালাই। টার্মিনালে কমান্ড। আমরা টার্মিনালে এই বার্তাটি দেখতে পাব। আপনি যদি কোনো ত্রুটির সম্মুখীন হন, তবে প্যাকেজগুলি সঠিকভাবে ইনস্টল করা আছে কিনা, ভেরিয়েবলগুলি সঠিকভাবে সেট করা হয়েছে এবং অ্যাপটি Redis ইনস্ট্যান্স অ্যাক্সেস করে কিনা তা পরীক্ষা করে দেখুন৷

এখন যদি আমরা localhost:8080/ping পরিদর্শন করি , আমরা {"Your left over API request is":19} একটি বার্তা পাব . সীমা ছিল 20, আমরা এখন একটি অনুরোধ করেছি, এবং বাকি 19।

rate_limit আপডেট করা হচ্ছে পতাকা
চলুন rate_limit আপডেট করি পতাকা মান 10 এবং দেখুন কি হয়. এটি করতে, আবার ফ্ল্যাগস্মিথ ড্যাশবোর্ডে যান এবং পতাকার নামের উপর ক্লিক করুন। একটি সাইড মেনু বার খুলবে। মানটিকে 10-এ আপডেট করুন এবং ফিচার মান আপডেট করুন-এ ক্লিক করুন বোতাম।
আমরা আপডেটের সময়সূচীও করতে পারি। উদাহরণস্বরূপ, এটি কার্যকর হতে পারে যখন আমরা একটি নির্দিষ্ট সময়সীমায় ট্র্যাফিক বৃদ্ধির আশা করি এবং সার্ভার লোড কমাতে ব্যবহারকারী প্রতি সীমা কমিয়ে দেই।

আপনি যদি এখন localhost:8080/ping এ যান , আপনি একটি বার্তা পাবেন {"Your left over API request is":8} - কারণ মোট সীমা 10 এবং আমরা ইতিমধ্যে দুইবার অনুরোধ করেছি।

এখন /beta পরীক্ষা করা যাক শেষ বিন্দু লোকালহোস্টে যান:8080/বিটা, এবং আমরা একটি বার্তা দেখতে পাব {"message":"This is beta endpoint"} .

এখন ফ্ল্যাগস্মিথ ড্যাশবোর্ডে ফিরে যান এবং এই পতাকাটি নিষ্ক্রিয় করতে সুইচটি টগল করুন। এখন URL-এ যান। আপনি একটি 404 বার্তা পাবেন যেমন এই এন্ডপয়েন্ট কখনোই বিদ্যমান ছিল না।

এখন যেহেতু আমরা কার্যকারিতা সেট আপ করেছি এবং বৈশিষ্ট্য ফ্ল্যাগিং ক্ষমতাগুলিকে ডেমো করেছি, আসুন দেখি কিভাবে আমরা Flasgsmith GitHub অ্যাপকে সংহত করতে পারি৷
কিভাবে GitHub অ্যাপের সাথে ফিচার ফ্ল্যাগ একত্রিত করবেন
প্রথমে, নিশ্চিত করুন যে আপনি আপনার অ্যাপটিকে GitHub-এ পুশ করেছেন। এর পরে, গিটহাব মার্কেটপ্লেস থেকে আপনার রেপোতে GitHub Flasgsmith অ্যাপটি ইনস্টল করুন৷
গিটহাব এবং ফ্যালাগস্মিথকে একীভূত করার মাধ্যমে, আমরা গিটহাব ইস্যু এবং পুল অনুরোধগুলিতে মন্তব্য হিসাবে আপনার বৈশিষ্ট্য পতাকা/বৈশিষ্ট্যের আপডেটগুলি দেখতে পারি। এটি আমাদের সহজেই বৈশিষ্ট্যগুলিকে ট্র্যাক করতে দেয়, একটি সমস্যা তৈরি করা থেকে শুরু করে একটি PR মার্জ করা এবং পরিবর্তনগুলি স্থাপন করা।

তারপরে আপনার সংস্থা এবং সংগ্রহস্থলগুলি নির্বাচন করুন যেখানে আপনি অ্যাপটি ইনস্টল করতে চান। আপনি এটি আপনার সমস্ত রেপোতে ইনস্টল করতে পারেন বা একটি নির্দিষ্ট নির্বাচন করতে পারেন৷
আপনি এটি ইনস্টল করার সাথে সাথে, কনফিগার এবং ইন্টিগ্রেশন সম্পূর্ণ করতে আপনাকে ফ্ল্যাগমিথ ড্যাশবোর্ডে স্বয়ংক্রিয়ভাবে পুনঃনির্দেশিত করা হবে। বেশির ভাগ ডেটাই প্রি-পপুলেটেড থাকবে, তাই আপনাকে শুধু একটি প্রোজেক্ট নির্বাচন করে যোগ করতে হবে এবং তারপর কনফিগারেশন সেভ করতে হবে।

একবার আপনি সংরক্ষণ করুন কনফিগারেশন বোতাম টিপুন , এটি আপনাকে মূল ফ্ল্যাগস্মিথ ড্যাশবোর্ডে পুনঃনির্দেশিত করবে যেখানে আমরা আগে কাজ করছিলাম৷
এখন আসুন GitHub সমস্যা/টান অনুরোধের সাথে বিদ্যমান পতাকাগুলির মধ্যে একটি লিঙ্ক করি (এটি পরীক্ষা করার জন্য একটি ডামি পিআর/ইস্যু উত্থাপন করুন), অথবা আপনি পরীক্ষা করার জন্য একটি নতুন পতাকা তৈরি করতে পারেন। চলুন বিটা পতাকা নিয়ে এগিয়ে যাই যা আমরা ইতিমধ্যেই beta এর জন্য তৈরি করেছি শেষবিন্দু।
একটি বিদ্যমান সমস্যা বা একটি টান অনুরোধের সাথে পতাকা লিঙ্ক করতে, পতাকার নামের উপর ক্লিক করুন, এবং একটি সাইড মেনু ডান দিক থেকে পপ আপ হবে। তারপর, 'লিঙ্ক' ট্যাবটি নির্বাচন করুন। তারপরে পুল অনুরোধ বিকল্পটি নির্বাচন করুন এবং আপনি যে পুল অনুরোধটি লিঙ্ক করতে চান তা চয়ন করুন। এই পতাকার সাথে লিঙ্ক করা আপনার সমস্ত সমস্যা এবং পুল অনুরোধগুলি নীচে দৃশ্যমান:

পতাকাটি সফলভাবে লিঙ্ক করা হয়েছে তা যাচাই করতে, নাম-এর নীচে তীর চিহ্ন সহ হাইপারলিঙ্কে ক্লিক করুন কলাম শিরোনাম এটি আপনাকে গিটহাবের সেই নির্দিষ্ট ইস্যু/পুল অনুরোধে নেভিগেট করবে। আপনি দেখতে পাচ্ছেন যে ফ্ল্যাগস্মিথ গিটহাব অ্যাপ সমস্ত বিবরণ সহ নীচে মন্তব্য করেছে, যেমন পরিবেশ, সক্ষম মান এবং আরও অনেক কিছু৷

ফ্ল্যাগস্মিথ গিটহাব অ্যাপ পরীক্ষা করা হচ্ছে
এর পরে, আপনি যখন পতাকা সেটিংসে কোনো পরিবর্তন করবেন, যেমন পতাকা চালু/বন্ধ করা বা মান পরিবর্তন করা, বট সমস্ত আপডেট বিবরণ সহ মন্তব্য করবে।
পতাকা বন্ধ করে পরীক্ষা করা যাক। আপনি ড্যাশবোর্ড থেকে ফ্ল্যাশ বন্ধ করার সাথে সাথে, বটটি মন্তব্য করবে যে পতাকাটি এখন অক্ষম করা হয়েছে:

এটাই। এভাবেই GitHub-এর সাথে ফ্ল্যাগস্মিথকে একীভূত করা সহজ।
উপসংহার
সংক্ষেপে বলা যায়, আপনি এখন জানেন কিভাবে আপনি ব্যাকএন্ড ডেভেলপার হিসেবে আপনার অ্যাপের কার্যকারিতা পরিবর্তন করতে ফিচার ফ্ল্যাগ ব্যবহার করতে পারেন।
জিনিসগুলিকে পরবর্তী স্তরে নিয়ে যাওয়ার জন্য, আমরা ফ্ল্যাগস্মিথ গিটহাব অ্যাপের সাথে আমাদের ডেমো অ্যাপকে একীভূত করেছি যাতে এটি ম্যানুয়ালি আপডেট না করেই পুল রিকোয়েস্ট/ইস্যুতে আমাদের ফিচার ফ্ল্যাগের স্থিতির পরিবর্তনের সাথে আপডেট থাকতে পারে।
এখানে ফ্ল্যাগস্মিথ রেপো দেখুন এবং আপনার সমর্থন দেখানোর জন্য এই প্রতিটি প্রকল্পকে একটি তারকা দিতে ভুলবেন না। আপনি প্রযুক্তিগত সহায়তা পেতে তাদের আশ্চর্যজনক সম্প্রদায়ে যোগ দিতে পারেন৷
আপনি আমার সাথে সংযোগ করতে পারেন - প্রদ্যুম্না সরফ, এখানে সোশ্যালে।
বিনামূল্যে কোড শিখুন. freeCodeCamp-এর ওপেন সোর্স পাঠ্যক্রম 40,000-এরও বেশি লোককে ডেভেলপার হিসেবে চাকরি পেতে সাহায্য করেছে। শুরু করুন