php_dvp
php_dvp

Reputation: 133

Loopback Connector REST API

How to create an external API on Loopback?

I want to get the external API data and use it on my loopback application, and also pass the input from my loopback to external API and return result or response.

Upvotes: 3

Views: 3053

Answers (2)

conradj
conradj

Reputation: 2620

Loopback has the concept of non-database connectors, including a REST connector. From the docs:

LoopBack supports a number of connectors to backend systems beyond databases.

These types of connectors often implement specific methods depending on the underlying system. For example, the REST connector delegates calls to REST APIs while the Push connector integrates with iOS and Android push notification services.

If you post details on the API call(s) you want to call then I can add some more specific code samples for you. In the mean time, this is also from the documentation:

datasources.json

MyModel": {
  "name": "MyModel",
  "connector": "rest",
  "debug": false,
  "options": {
    "headers": {
      "accept": "application/json",
      "content-type": "application/json"
    },
    "strictSSL": false
  },
  "operations": [
    {
      "template": {
        "method": "GET",
        "url": "http://maps.googleapis.com/maps/api/geocode/{format=json}",
        "query": {
          "address": "{street},{city},{zipcode}",
          "sensor": "{sensor=false}"
        },
        "options": {
          "strictSSL": true,
          "useQuerystring": true
        },
        "responsePath": "$.results[0].geometry.location"
      },
      "functions": {
        "geocode": ["street", "city", "zipcode"]
      }
    }
  ]
}

You could then call this api from code with:

app.dataSources.MyModel.geocode('107 S B St', 'San Mateo', '94401', processResponse);

Upvotes: 5

Robins Gupta
Robins Gupta

Reputation: 3153

You gonna need https module for calling external module inside loopback.

Suppose you want to use the external API with any model script file. Let the model name be Customer

Inside your loopback folder. Type this command and install https module.

$npm install https --save

common/models/customer.js

var https = require('https');

Customer.externalApiProcessing = function(number, callback){
   var data = "https://rest.xyz.com/api/1";
   https.get(
     data,
     function(res) {
        res.on('data', function(data) {
          // all done! handle the data as you need to

          /*
             DO SOME PROCESSING ON THE `DATA` HERE
          */
enter code here
          //Finally return the data. the return type should be an object.
          callback(null, data);
        });
     }
   ).on('error', function(err) {
       console.log("Error getting data from the server.");
       // handle errors somewhow
       callback(err, null);
   }); 
  }




//Now registering the method
Customer.remoteMethod(
    'extenalApiProcessing', 
    {
      accepts: {arg: 'number', type: 'string', required:true},
      returns: {arg: 'myResponse', type: 'object'}, 
      description: "A test for processing on external Api and then sending back the response to /externalApiProcessing route"
    }
)

common/models/customer.json

 ....
 ....
 //Now add this line in the ACL property.
 "acls": [

    {
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW",
      "property": "extenalApiProcessing"
    }
  ]

Now explore the api at /api/modelName/extenalApiProcessing

By default its a post method.

For more info. Loopback Remote Methods

Upvotes: 1

Related Questions