router-fetcher
Maps services names, namespaces and methods defined in the API's schemas, to endpoints and HTTP methods for APIs's calls from any service.
Instalation
npm install @janiscommerce/router-fetcher
Configuration
Router-Fetcher
uses a setting JSON file.
It's located in path/to/root/[MS_PATH]/config/.janiscommercerc.json
Needs the following fields
-
routerConfig
,object
with URL to get Endpoints and Schemas.
Example
In path/to/root/[MS_PATH]/config/.janiscommercerc.json.
{
"routerConfig": {
"endpoint": "http://valid-router:7999/api/endpoint",
"schema": "http://valid-router:7999/api/services/{serviceName}/schema"
}
}
API
-
new RouterFetcher()
Router-Fetcher Constructors
-
getEndpoint(service, namespace, method, httpMethod)
Get the endpoint data doing one request to the router.
-
service
:- type
String
- The name of the microservice.
- type
-
namespace
- type
String
- The namespace of the microservice.
- type
-
method
- type
String
- The method of microservice.
- type
-
httpMethod
- type
String
- Verb of the request.
- type
Returns a
Promise
ofRouterResponse
object -
-
getSchema(service)
Get the schema data of a service doing one request to the router.
-
service
:- type
String
- The name of the microservice.
- type
Returns a
Promise
ofRouterResponse
object -
Response Object
Response of Router for endpoints
-
RouterResponse
-
endpoint
- type:
String
- The endpoint of microservice.
- type:
-
httpMethod
- type:
String
- The httpMethod of endpoint.
- type:
-
For Schemas
requests, the response will be an object
with the OpenAPI specification
Errors
The errors are informed with a RouterFetcherError
.
-
RouterFetcherError
:-
code
:- type:
Number
- The status code of the error
- type:
-
message
:- type:
String
- The status message of the response.
- type:
-
name
:- type:
String
- value:
-
RouterFetcherError
. If the response code is >= 400. - Other, Request Library Error.
-
- type:
-
Codes
The codes are the following:
Code | Description |
---|---|
2 | Schema not found |
3 | Invalid Router Config Path |
4 | Endpoint not found |
5 | Request Library Errors |
Usage
Make a request to "SAC" microservice with the namespace "claim-type" and method "list" and get its endpoints.
const RouterFetcher = require('@janiscommerce/router-fetcher');
const routerFetcher = new RouterFetcher();
try {
const response = await routerFetcher.getEndpoint('sac', 'claim-type', 'list');
/*
Response example
{
"endpoint": "https://sac.janis.in/claim-types",
"httpMethod: "GET"
}
*/
} catch (err) {
/*
Error Response Example:
{
name: 'RouterFetcherError'
message: 'Endpoint not found',
code: 3
}
*/
if (err.name === `RouterFetcherError`) {
// The code of the router response is >= 400.
} else {
// Fatal error of request library https://www.npmjs.com/package/request
}
}
Make a request to "SAC" microservice and obtain its schemas.
const RouterFetcher = require('@janiscommerce/router-fetcher');
const routerFetcher = new RouterFetcher();
try {
const response = await routerFetcher.getSchema('sac');
/*
Response example
{
servers: ["core"],
tags: ["sac"],
paths: {
/sac/claim-type/list:
x-janis-namespace: claim-type,
x-janis-method: "list",
get: {
responses: {
'200': description: OK,
'400': description: Invalid parameters,
'401': description: Invalid authentication,
'403': description: Invalid permissions
}
}
}
}
*/
} catch(err) {
/*
Error Response Example:
{
name: 'RouterFetcherError'
message: 'Schema not found',
code: 2
}
*/
if(err.name === `RouterFetcherError`) {
// The code of the router response is >= 400.
} else {
// Fatal error of request library https://www.npmjs.com/package/request
}
}