1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-12-28 00:06:53 +01:00
unleash.unleash/docs/client-specification.md

121 lines
3.9 KiB
Markdown
Raw Normal View History

2017-01-11 15:51:24 +01:00
# Client Specification 1.0
This document describes the client contract.
## The basics
All client implementations should strive to have a simple and consistent user API.
It should be a simple method, called isEnabled, to check if a feature toggle is enabled
or not. The method should return a `boolean` value, true or false.
```
unleash.isEnabled("myAwesomeToggle")
```
The basic `isEnabled` method should also accept a default value. This should be used if
the client does not know anything about that that toggle name. If the user does not specify
a default value, false should be returned for unknown feature toggles.
Example:
```
boolean value = unleash.isEnabled("unknownFeatureToggle", false);
//value==false because default value was used.
```
### Implementation of isEnabled
A feature toggle is defined as:
```json
{
"name": "Feature.B",
"description": "lorem ipsum",
"enabled": true,
"strategies": [
{
"name": "ActiveForUserWithId",
"parameters": {
"userIdList": "123,221,998"
}
},
{
"name": "GradualRolloutRandom",
"parameters": {
"percentage": "10"
}
}
],
"strategy": "ActiveForUserWithId",
"parameters": {
"userIdList": "123,221,998"
}
}
```
A simple demo of the isEnable function in JavaScript-style (most implementation will probalby be more functional):
```javascript
function isEnabled(name, defaultValue) {
const toggle = toggleRepository.get(name);
let enabled = false;
if ( !toggle ) {
return defaultValue;
} else if ( ! toggle.isEnabled) {
return false;
} else {
for(let i=0;i<toggle.strategies.length;i++) {
let strategyDef = toggle.strategies[i];
let strategyImpl = strategyImplRepository.get(strategyDef.name);
if(strategyImpl.isEnabled) {
return true;
}
}
return false;
}
}
```
## Actication Strategies
2017-03-16 21:14:34 +01:00
Activation strategies are defined and configured in the unleash-service. It is up to the client
to provide the actual implementation of each actication strategy.
Unleash also ships with a few built-in strategies and it is expected that client SDK's implement
these. Read more about these [activation strategies](activation-strategies.md). For the built-in
strategies to work as expected the client should also allow the user to define a
[unleash-context](unleash-context.md). The context should be possible to pass in as part of
the `isEnabled` call.
### Extenstion points
Client implementation should also provide a defined interface to make it easier for
the user to implement their own activation strategies, and register those in the unleash client.
2017-01-11 15:51:24 +01:00
## Fetching feature toggles (polling)
The client implementation should fetch toggles in the background, as regular polling.
In thread based environment (e.g. Java) this needs to be done on a sparate thread.
The default poll interval should be **15 seconds**, and it should be configurable.
## Client registration
Client implementation should at initialization register with the unleash-server.
2017-03-16 21:14:34 +01:00
The should send a registration as specified in the [api documentation](api/metrics-api.md#client-registration).
2017-01-11 15:51:24 +01:00
The registration must include all fields specified.
## Metrics
2017-03-16 21:14:34 +01:00
Clients are expectedd to send metrics back to the api regualry. The metrics is a list of used toggles and how
many times they evaluated to true or false in the current period.
[metrics-api](api/metrics-api.md).
2017-01-11 15:51:24 +01:00
## Backup feature toggles
2017-03-16 21:14:34 +01:00
The SDK also persists the latest known state to a local file at the instance where the client is running.
It will persist a local copy every time the client detects changes from the API. Having a local backup of
the latest known state minimises the consequence of clients not being able to to talk to Unleash API at
startup. This is required because network is unreliable.
2017-01-11 15:51:24 +01:00