Node JS

Exemple d’aplicació que consumeix l’API en NodeJS.

En aquest cas es realitza un consum del recurs de l’API https://api.meteo.cat/referencia/v1/municipis. Un cop s’obté una resposta, mostra per consola l’Status code, el Content-Type i part del contingut de la resposta (en aquest cas la resposta sencera són les metadades de tots els municipis de Catalunya, de manera que es pinta el nom i el codi del primer municipi de la llista). Per aquest exemple s’ha utilitzat el client HTTPS natiu de NodeJS (el paquet https) per tal de reduir el nombre de dependències externes, però es poden utilitzar altres llibreries com per exemple request.

Per tal d’executar-lo, en tenim prou utilitzant l’intèrpret de NodeJS (e.g. en Linux i suposant que el nom de l’arxiu és app.js):

$ node app.js
//app.js
var https = require('https');

var options = {
  host: 'api.meteo.cat',
  path: '/referencia/v1/municipis',
  headers : {
    "x-api-key": "xxxxxxx"
  }
};

var callback = function(response) {
 
  var bodyChunks = [];
 
  response.on('data', function(chunk) {
    bodyChunks.push(chunk);
  }).on('end', function() {
    var body = Buffer.concat(bodyChunks);
    var bodyAsObject = JSON.parse(body);
 
    console.log('Status: ' + response.statusCode); // Status: 200
    console.log('Content-Type: ' + response.headers["content-type"]); // Content-Type: application-json
    console.log('Municipi: ' + bodyAsObject[0].nom); // Municipi: Abella de la Conca
    console.log('Codi: ' + bodyAsObject[0].codi); // Codi: 
  })
}

var request = https.get(options, callback);

request.on('error', function(e) {
  console.log('ERROR: ' + e.message);
});

Importem el client HTTPS de NodeJS

//app.js
var https = require('https');

Fixem els diferents paràmetres de la petició:

  • host i path: defineixen el recurs que es consumeix
  • headers: capçaleres de la petició, on és obligatori afegir el camp ‘x-api-key’ amb l’API Key del client com a valor.
var options = {
  host: 'api.meteo.cat',
  path: '/referencia/v1/municipis',
  headers : {
    "x-api-key": "xxxxxxx"
  }
};

Definim la callback per gestionar les dades de la consulta al recurs (podeu trobar els comentaris al codi)

var callback = function(response) {
 
  var bodyChunks = [];
 
  response.on('data', function(chunk) {
    // Cada cop que rebem dades de la petició les posem en un vector
    bodyChunks.push(chunk);
  }).on('end', function() {
    // Un cop la petició està finalitzada, concatenem totes les dades que hem rebut
    var body = Buffer.concat(bodyChunks);
    // Passem les dades de JSON a un objecte Javascript
    var bodyAsObject = JSON.parse(body);
 
    // Processem les dades (en aquest cas tan sols mostrem per consola algunes dades de la resposta)
    console.log('Status: ' + response.statusCode); // Status: 200
    console.log('Content-Type: ' + response.headers["content-type"]); // Content-Type: application-json
    console.log('Municipi: ' + bodyAsObject[0].nom); // Municipi: Abella de la Conca
    console.log('Codi: ' + bodyAsObject[0].codi); // Codi: 
  })
}

Finalment executem la petició amb el mètode https.get, passant com a paràmetres l’objecte options i la callback definida anteriorment (ja que el mètode és asíncron). També definim el comportament en cas d’error.

var request = https.get(options, callback);

request.on('error', function(e) {
  console.log('ERROR: ' + e.message);
});