Client SDKs can be autogenerated (see serviser-sdk plugin) for web services built with the serviser framework.
Here, we go through integration of generated service SDKs with your other (serviser
based) services.
config.js
services: {
user: { //service name
public: { //app name within the service
host: 'localhost:3000',
protocol: 'http', //optional - defaults to http(s) depending on `ssl` option value
ssl: false,
npm: 'user-public-sdk' //npm package which exports the client SDK module
}
}
}
Initialization
const UserServiceSDK = require('user-public-sdk')['v1.0'];
const service = new Service(config);
const remoteServiceMgr = service.getRemoteServiceManager();
//1. Looks for `services.user.public.npm` option value in config
//2. Loads `user-public-sdk` npm module
//3. Initializes the SDK, saves it into internal register and returns the SDK object
remoteServiceMgr.buildRemoteService('user:public:v1.0', {/*sdk constructor options*/});
//Manual initialization is an alternative for the `buildRemoteService` call above
const sdk = new UserServiceSDK({
errors: { // map custom Error constructors to request response codes
400: RequestError,
500: ServiceError
//accepts also all `axios` options
}
});
remoteServiceMgr.add('user:public', sdk);
Accessing the SDKs
router.buildRoute({/*options*/}).main(function(req, res) {
const remoteServiceMgr = this.app.service.getRemoteServiceManager();
return remoteServiceMgr.get('user:public:v1.0').getUser({
data: {username: 'happie'}
}).then(function(response){
});
//or
router.App.service.getRemoteServiceManager()//....
});