@decisions/api-helpers
v0.2.0
Published
JavaScript toolkit for REST, etc. for external UIs using Decisions as a back-end.
Downloads
2
Readme
api-helpers
JavaScript toolkit for REST, etc. for clients interacting with a Decisions back-end. Its only goal is to minimize boilerplate for these clients by DRYing up common logic into helper functions.
Helper Functions
This is essentially a collection of helper functions, all of which are opt-in.
- "ApiConfig" contains some configuration that other helper functions depend on. This is essentially a singleton config object.
- "ApiHelpers" contains commands and helpers related to managing a decisions session. Other helper funcitions also depend on this state.
- "AuthApi" contains helper functions to simplify and DRY up logic related to forming URLs for various types of decisions end-points,
as well as some convenience methods for retrieving data via
fetch
.
Usage
_If you are inside a Decisions web host, the helper functions should load auth IDs, etc. for you. _
Otherwise:
Configuration
Tell the API Where to find your Decisions instance
<script>
// create global config variable:
var DecisionsRestConfig = {
cors: false,
restRoot: "/decisions/Primary/"
};
</script>
Alternately, you can put a rest-config.json
at the web host root, but then your UI has to handle the fact that it's loaded asynchronously.
In your app code, tell that config to load:
import { ApiConfig } from "@decisions/api-helpers/ApiConfig";
// ...
ApiConfig.loadConfig();
Create a Session
(This is only necessary outside a Decisions Web Host.)
AuthApi.login(this.state.username, this.state.password)
.then(() => { /* Handle successful login */}))
.catch(() => { /* Handle successful */ });
Use Helper Functions
Use helper functions to generate URLs
import {
getFlowIdUrl,
getWrappedPostFetch
} from "@decisions/api-helpers/ApiHelpers";
//...
/**
* builds the URL with little boilerplate:
*/
const url = getFlowIdUrl("123-flow-4567-uuid-8901");
const body = {/* ... */};
/**
* Make `fetch` API call,
* with a chunk of `Promise` boilerplate tucked away.
*
* @returns a promise "resultPropIWant"
*/
return getWrappedPostFetch(url, body, "resultPropIWant");
Road Map
- Unit tests
- Add support for Decisions Webhooks
- Abstract which API is making the requests
- The
fetch
methods are fairly standard, and opt in. Good start. - Adding modules for other popular tools would be great.
- The