@tshio/redux-api-endpoint-middleware v2.0.1
Endpoint middleware
Installation
Using yarn:
$ yarn add @tshio/redux-api-endpoint-middlewareUsing npm:
$ npm install --save @tshio/redux-api-endpoint-middlewareThen, to enable endpointMiddleware, use applyMiddleware:
import { applyMiddleware, createStore } from 'redux';
import { apiMiddleware } from 'redux-api-middleware';
import createEndpointMiddleware from '@tshio/redux-api-endpoint-middleware';
import { appReducer } from 'app/app.reducer';
const endpointMiddleware = createEndpointMiddleware();
const middlewares = [endpointMiddleware, apiMiddleware];
const store = createStore(appReducer, applyMiddleware(...middlewares));Configuration
By default all endpoints will be prefixed with the API url take from environment variable REACT_APP_API_URL.
In order to change it, the configuration object with property apis.default.apiUrl has to be passed to the endpointMiddleware
factory:
const endpointMiddleware = createEndpointMiddleware({
apis: {
default: {
apiUrl: process.env.MY_API,
},
},
});Endpoints starting with http:// and https:// won't be prefixed. In order to change the list of the prefixes that
should be excluded the configuration object should have property excluded with desired list:
const endpointMiddleware = createEndpointMiddleware({
excluded: ['http://', 'https://', '/i18n/'],
});When you have to connect to more than one API in your application, you can define a list of APIs (with URL and custom params) in configuration:
const endpointMiddleware = createEndpointMiddleware({
apis: {
default: {
apiUrl: process.env.MY_API,
headers: {
'X-Api-Version': '1',
},
},
microServiceOne: {
apiUrl: 'http://microservice-1.example.com',
customParam: {
foo: 'bar',
},
},
microServiceTwo: {
apiUrl: 'http://microservice-2.example.com',
customParam: {
foo: 'bar',
},
},
},
});and then you can select defined API directly in action (by api property):
export const fetchUsers = () => ({
[RSAA]: {
method: 'GET',
types: [FETCH_USERS_REQUEST, FETCH_USERS_SUCCESS, FETCH_USERS_FAILURE],
api: 'microServiceOne',
},
});It will be equal to:
export const fetchUsers = () => ({
[RSAA]: {
method: 'GET',
types: [FETCH_USERS_REQUEST, FETCH_USERS_SUCCESS, FETCH_USERS_FAILURE],
endpoint: 'http://microservice-1.example.com/',
customParam: {
foo: 'bar',
},
},
});