cap-remote-service-rest
v0.1.1
Published
Generic implementation to invoke remote REST services in a CAP app
Downloads
63
Readme
Remote REST Service Implementation for SAP Cloud Application Programming Model
This library contains a generic implementation to invoke remote REST services in a CAP Node.js app. REST (or REST-like) APIs described in OpenAPI can be imported as CDS service models. The app interacts with the remote API using the well-known CAP APIs.
Installation
The remote REST service implementation can be installed via NPM:
npm install cap-remote-service-rest
Configuration
You can generate a CDS service model from an OpenAPI document using the CAP development kit @sap/cds-dk
:
cds import Petstore.json
Each schema in OpenAPI is imported as type and each service path as unbound function (for GET endpoints) or action (everything else). See more details in the CAP release notes.
Create a new Javascript file, add a class and make it inheriting from RestRemoteService
. This service implementation translates OData action and function requests into REST HTTP requests that are sent to the remote system using CAP's remote service API.
const { RestRemoteService } = require("cap-remote-service-rest");
class PetstoreService extends RestRemoteService {}
module.exports = PetstoreService;
Define this class as service implementation for your imported service model in the cds.requires
section of .cdsrc.json
or package.json
:
{
"cds": {
"requires": {
"Petstore": {
"kind": "rest",
"model": "srv/external/PetstoreService",
"impl": "srv/external/PetstoreService.js"
}
}
}
}
Runtime
To invoke the remote REST service you can simply connect to the CDS service and invoke its unbound action or functions:
const srv = await cds.connect.to("Petstore");
const results = await srv.send("pet_findByStatus", { status: ["available"] });
Customization
Optionally, you can customize the headers and query parameters of the request towards the remote API by overwriting the appropriate methods in the service class, for instance to add an API key:
class PetstoreService extends RestRemoteService {
/**
* @param headers a plain Javascript object
*/
customizeHeaders(headers) {
headers["api_key"] = "secret";
}
/**
* @param queryParams an `URLSearchParam` object
*/
customizeQueryParams(queryParams) {
queryParams.set("api_key", "secret");
}
}