From 49343d5d9d30d7f04838b3b194e0681c0153e34c Mon Sep 17 00:00:00 2001 From: Alvin Bryan Date: Sun, 15 Dec 2024 20:03:17 +0000 Subject: [PATCH] WIP --- .../javascript/diagram.png | Bin 0 -> 56973 bytes .../implementing-feature-flags-js.md | 260 ++++++++++++++++++ website/sidebars.ts | 5 + 3 files changed, 265 insertions(+) create mode 100644 website/docs/feature-flag-tutorials/javascript/diagram.png create mode 100644 website/docs/feature-flag-tutorials/javascript/implementing-feature-flags-js.md diff --git a/website/docs/feature-flag-tutorials/javascript/diagram.png b/website/docs/feature-flag-tutorials/javascript/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..f1e609d2b6e755e43fe49ff48bd20cc021fdc8bf GIT binary patch literal 56973 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 U)iFp2*#^8Y_O5m}ZG+PP1GV@&vj6}9 literal 0 HcmV?d00001 diff --git a/website/docs/feature-flag-tutorials/javascript/implementing-feature-flags-js.md b/website/docs/feature-flag-tutorials/javascript/implementing-feature-flags-js.md new file mode 100644 index 0000000000..d161af6a02 --- /dev/null +++ b/website/docs/feature-flag-tutorials/javascript/implementing-feature-flags-js.md @@ -0,0 +1,260 @@ +--- +title: How to Implement Feature Flags in JavaScript +description: "How to use Unleash feature flags with plain JavaScript." +slug: /feature-flag-tutorials/javascript +--- + +import VideoContent from '@site/src/components/VideoContent.jsx'; + +Hello! In this tutorial we'll show you how to add feature flags to a plain JavaScript app, using [Unleash](https://www.getunleash.io/) and the official [Unleash Browser SDK](/reference/sdks/javascript-browser). With Unleash, an open-source feature flag service, you can add feature flags to your application and release new features faster. + +In this tutorial, we'll make a basic website all about... Corgis! We'll use the [dog.ceo API 🐶](https://dog.ceo/) with HTML, CSS, JS to retrive some images of Queen Elisabeth's favourite dogs. We'll use feature flags to decide whether to show some corgi fun facts alongside the images. + +## Prerequisites + +For this tutorial, you'll need the following: + +- Git +- Docker and Docker Compose +- A modern browser + +![architecture diagram for our implementation](./diagram.png) + +The Unleash Server is a **Feature Flag Control Service**, which manages your feature flags and lets you retrieve flag data. Unleash has a UI for creating and managing projects and feature flags. You can perform the same actions straight from your CLI or server-side app using the [Unleash API](/reference/api/unleash). + +## Install a local feature flag provider + +In this section, we'll install Unleash, run the instance locally, log in, and create a feature flag. If you prefer, you can use other tools instead of Unleash, but you'll need to update the code accordingly. + +Use Git to clone the Unleash repository and Docker to build and run it. Open a terminal window and run the following commands: + +``` +git clone https://github.com/unleash/unleash.git +cd unleash +docker compose up -d +``` + +You will now have Unleash installed onto your machine and running in the background. You can access this instance in your web browser at [http://localhost:4242](http://localhost:4242). + +Log in to the platform using these credentials: + +``` +Username: admin +Password: unleash4all +``` + +Click **New feature flag** to create a new feature flag. + +![Create a new feature flag](/img/go-new-feature-flag.png) + +Call it `show-info` and enable it in the `development` environment. + +Everything's now set up on the Unleash side. Let's go to the code now. + +## Make a basic HTML website + +Open a new tab in your terminal, and create a new folder (outside of the unleash folder). + +```sh +mkdir unleash-js +cd unleash-js +touch index.html +``` + +Add our HTML: + +```html + + + + + + Corgi Cuteness + + + + +

+

🐾 Corgi Cuteness 🐾

+ Adorable Corgi +

+ +
+ + + + +``` + +Open the file in your browser + +## Add the GraphQL endpoint + +The point of this tutorial is to mimic a real-world scenario where, based on a boolean feature flag, you would migrate from a REST API to a GraphQL one. So far, we've just used REST. + +Let's create a static feature flag, for now, just to test that we can call both versions successfully. Update `main.go`: + +```go +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "log" + "net/http" +) + +type Country struct { + Name string `json:"name"` + Capital string `json:"capital"` +} + +func main() { + // Define a static feature flag + isGraphQL := true + + var country Country + if isGraphQL { + // Call the GraphQL API + query := `{"query": "query { country(code: \"NO\") { name capital } }"}` + req, err := http.NewRequest("POST", "https://countries.trevorblades.com/", bytes.NewBuffer([]byte(query))) + if err != nil { + log.Fatal(err) + } + req.Header.Set("Content-Type", "application/json") + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + log.Fatal(err) + } + defer resp.Body.Close() + + body, _ := io.ReadAll(resp.Body) + var response struct { + Data struct { + Country Country `json:"country"` + } `json:"data"` + } + json.Unmarshal(body, &response) + + country = response.Data.Country + fmt.Println("Hello GraphQL") + } else { + // Call the REST API + resp, err := http.Get("https://restcountries.com/v2/alpha/no") + if err != nil { + log.Fatal(err) + } + defer resp.Body.Close() + + body, _ := io.ReadAll(resp.Body) + var countries []Country + json.Unmarshal(body, &countries) + country = countries[0] + } + + fmt.Printf("Country: %s, Capital: %s\n", country.Name, country.Capital) +} +``` + +Run the code again: + +```sh +go run main.go +``` + +You should see `Hello GraphQL`, followed by `Country: Norway, Capital: Oslo` in your terminal. + +## 5. Add Unleash to your Go app + +Now, let's connect our project to Unleash so that you can toggle that feature flag at runtime. If you wanted to, you could also do a [gradual rollout](/feature-flag-tutorials/use-cases/gradual-rollout) or use the flag for [A/B testing](/feature-flag-tutorials/use-cases/a-b-testing). + +You'll need 2 things: + +- The URL of your Unleash instance's API. It's `http://localhost:4242/api/` for your local version. +- The API token we created on our Unleash instance, feel free to create another one if you can't find it. + +With these 2, you can initialize your Unleash client as follows: + +```go +unleash.Initialize( + unleash.WithUrl("http://localhost:4242/api/"), + unleash.WithAppName("country_go"), + unleash.WithCustomHeaders(http.Header{"Authorization": {"YOUR_API_KEY"}}), +) +``` + +Now, let's add our client to our project, grab the feature flag from Unleash, and update our conditional statement. Don't forget to also update the config with your API key: + +```diff +package main + +import ( + "encoding/json" + "fmt" + "io" + "log" + "net/http" + ++ "github.com/Unleash/unleash-client-go/v4" +) + +// ... rest of the types ... + +func main() { ++ // Initialize Unleash client ++ unleash.Initialize( ++ unleash.WithUrl("http://localhost:4242/api/"), ++ unleash.WithAppName("country_go"), ++ unleash.WithCustomHeaders(http.Header{"Authorization": {"YOUR_API_KEY"}}), ++ ) ++ ++ unleash.WaitForReady() + ++ isGraphQL := unleash.IsEnabled("graphql-api") +- // Define a static feature flag +- isGraphQL := true + + // ... rest of the code ... +} +``` + +See additional use cases in our [Server-Side SDK with Go](https://docs.getunleash.io/reference/sdks/go) documentation. + +## 6. Verify the toggle experience + +Now that we've connected our project to Unleash and grabbed our feature flag, we can verify that if you disable that flag in your development environment, you stop seeing the `Hello GraphQL` message and only get the country information from the REST API. + +> **Note:** An update to a feature flag may take 30 seconds to propagate. + +## Conclusion + +All done! Now you know how to add feature flags with Unleash in Go. You've learned how to: + +- Toggle between a REST and a GraphQL endpoint based on a feature flag +- Install Unleash and create/enable a feature flag +- Grab the value of a feature flag with the Go SDK + +Feel free to have a look at our [Go Examples page](/feature-flag-tutorials/golang/examples) for more. + +Thank you diff --git a/website/sidebars.ts b/website/sidebars.ts index 7427613642..5774bd37da 100644 --- a/website/sidebars.ts +++ b/website/sidebars.ts @@ -283,6 +283,11 @@ const sidebars: SidebarsConfig = { }, ], }, + { + type: 'doc', + label: 'JavaScript', + id: 'feature-flag-tutorials/javascript/implementing-feature-flags-js', + }, { type: 'doc', label: 'Serverless',