mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			209 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| id: features
 | |
| title: /api/client/features
 | |
| ---
 | |
| 
 | |
| > In order to access the client API endpoints you need to identify yourself. Unless you're using the `none` authentication method, you'll need to [create a CLIENT token](/user_guide/api-token) and add an Authorization header using the token.
 | |
| 
 | |
| ### Fetching Feature Toggles {#fetching-feature-toggles}
 | |
| 
 | |
| `GET: http://unleash.host.com/api/client/features`
 | |
| 
 | |
| **HEADERS:**
 | |
| 
 | |
| - UNLEASH-APPNAME: appName
 | |
| - UNLEASH-INSTANCEID: instanceId
 | |
| 
 | |
| This endpoint is the one all clients should use to fetch all available feature toggles from the _unleash-server_. The response returns all active feature toggles and their current strategy configuration. A feature toggle will have _at least_ one configured strategy. A strategy will have a `name` and `parameters` map.
 | |
| 
 | |
| > _Note:_ Clients should prefer the `strategies` property. Legacy properties (`strategy` & `parameters`) will be kept until **version 2** of the format.
 | |
| 
 | |
| This endpoint should never return anything besides a valid _20X or 304-response_. It will also include an `Etag`-header. The value of this header can be used by clients as the value of the `If-None-Match`-header in the request to prevent a data transfer if the client already has the latest response locally.
 | |
| 
 | |
| **Example response:**
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "version": 1,
 | |
|   "features": [
 | |
|     {
 | |
|       "name": "Feature.A",
 | |
|       "type": "release",
 | |
|       "enabled": false,
 | |
|       "stale": false,
 | |
|       "strategies": [
 | |
|         {
 | |
|           "name": "default",
 | |
|           "parameters": {}
 | |
|         }
 | |
|       ],
 | |
|       "strategy": "default",
 | |
|       "parameters": {}
 | |
|     },
 | |
|     {
 | |
|       "name": "Feature.B",
 | |
|       "type": "killswitch",
 | |
|       "enabled": true,
 | |
|       "stale": false,
 | |
|       "strategies": [
 | |
|         {
 | |
|           "name": "ActiveForUserWithId",
 | |
|           "parameters": {
 | |
|             "userIdList": "123,221,998"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "GradualRolloutRandom",
 | |
|           "parameters": {
 | |
|             "percentage": "10"
 | |
|           }
 | |
|         }
 | |
|       ],
 | |
|       "strategy": "ActiveForUserWithId",
 | |
|       "parameters": {
 | |
|         "userIdList": "123,221,998"
 | |
|       }
 | |
|     }
 | |
|   ]
 | |
| }
 | |
| ```
 | |
| 
 | |
| #### Filter feature toggles {#filter-feature-toggles}
 | |
| 
 | |
| Supports three params for now
 | |
| 
 | |
| - `tag` - filters for features tagged with tag
 | |
| - `project` - filters for features belonging to project
 | |
| - `namePrefix` - filters for features beginning with prefix
 | |
| 
 | |
| For `tag` and `project` performs OR filtering if multiple arguments
 | |
| 
 | |
| To filter for any feature tagged with a `simple` tag with value `taga` or a `simple` tag with value `tagb` use
 | |
| 
 | |
| `GET https://unleash.host.com/api/client/features?tag[]=simple:taga&tag[]simple:tagb`
 | |
| 
 | |
| To filter for any feature belonging to project `myproject` use
 | |
| 
 | |
| `GET https://unleash.host.com/api/client/features?project=myproject`
 | |
| 
 | |
| Response format is the same as `api/client/features`
 | |
| 
 | |
| ### Get specific feature toggle {#get-specific-feature-toggle}
 | |
| 
 | |
| `GET: http://unleash.host.com/api/client/features/:featureName`
 | |
| 
 | |
| Used to fetch details about a specific feature toggle. This is mainly provided to make it easy to debug the API and should not be used by the client implementations.
 | |
| 
 | |
| > _Notice_: You will not get a version property when fetching a specific feature toggle by name.
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "name": "Feature.A",
 | |
|   "type": "release",
 | |
|   "enabled": false,
 | |
|   "stale": false,
 | |
|   "strategies": [
 | |
|     {
 | |
|       "name": "default",
 | |
|       "parameters": {}
 | |
|     }
 | |
|   ],
 | |
|   "strategy": "default",
 | |
|   "parameters": {}
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Strategy Constraints {#strategy-constraints}
 | |
| 
 | |
| > This is a unleash-enterprise feature
 | |
| 
 | |
| Strategy definitions may also contain a `constraints` property. Strategy constraints is a feature in Unleash which work on context fields, which is defined as part of the [Unleash Context](../../user_guide/unleash-context.md). The purpose is to define a set of rules where all needs to be satisfied in order for the activation strategy to evaluate to true. A [high level description](https://www.unleash-hosted.com/articles/strategy-constraints) of it is available online.
 | |
| 
 | |
| **Example response:**
 | |
| 
 | |
| The example shows strategy constraints in action. Constraints is a new field on the strategy-object. It is a list of constraints that need to be satisfied.
 | |
| 
 | |
| In the example `environment` needs to be `production` AND `userId` must be either `123` OR `44` in order for the Unleash Client to evaluate the strategy, which in this scenario is “default” and will always evaluate to true.
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "type": "release",
 | |
|   "enabled": true,
 | |
|   "stale": false,
 | |
|   "name": "Demo",
 | |
|   "strategies": [
 | |
|     {
 | |
|       "constraints": [
 | |
|         {
 | |
|           "contextName": "environment",
 | |
|           "operator": "IN",
 | |
|           "values": ["production"]
 | |
|         },
 | |
|         {
 | |
|           "contextName": "userId",
 | |
|           "operator": "IN",
 | |
|           "values": ["123", "44"]
 | |
|         }
 | |
|       ],
 | |
|       "name": "default",
 | |
|       "parameters": {}
 | |
|     }
 | |
|   ]
 | |
| }
 | |
| ```
 | |
| 
 | |
| - **contextName** - is the name of the field to look up on the unleash context.
 | |
| - **values** - is a list of values (string).
 | |
| - **operator** - is the logical action to take on the values Supported operator are:
 | |
|   - **IN** - constraint is satisfied if one of the values in the list matches the value for this context field in the context.
 | |
|   - **NOT_IN** - constraint is satisfied if NONE of the values is the list matches the value for this field in the context.
 | |
| 
 | |
| ### Variants {#variants}
 | |
| 
 | |
| All feature toggles can also take an array of variants. You can read more about [feature toggle variants](/advanced/toggle_variants).
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "version": 1,
 | |
|   "features": [
 | |
|     {
 | |
|       "name": "Demo",
 | |
|       "type": "operational",
 | |
|       "enabled": true,
 | |
|       "stale": false,
 | |
|       "strategies": [
 | |
|         {
 | |
|           "name": "default"
 | |
|         }
 | |
|       ],
 | |
|       "variants": [
 | |
|         {
 | |
|           "name": "red",
 | |
|           "weight": 500,
 | |
|           "weightType": "variable",
 | |
|           "payload": {
 | |
|             "type": "string",
 | |
|             "value": "something"
 | |
|           },
 | |
|           "overrides": [
 | |
|             {
 | |
|               "contextName": "userId",
 | |
|               "values": ["123"]
 | |
|             }
 | |
|           ]
 | |
|         },
 | |
|         {
 | |
|           "name": "blue",
 | |
|           "weight": 500,
 | |
|           "overrides": [],
 | |
|           "weightType": "variable"
 | |
|         }
 | |
|       ]
 | |
|     }
 | |
|   ]
 | |
| }
 | |
| ```
 | |
| 
 | |
| - **payload** - an optional object representing a payload to the variant. Takes two properties if present `type` and `value`.
 | |
| - **overrides** - an optional array of overrides. If any context field matches any of the the defined overrides it means that the variant should be selected.
 |