Skip to content

robertwitt/cap-remote-service-rest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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");
  }
}

About

Generic implementation to invoke remote REST services in a CAP app

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published