Code

Chiamare una REST API con Node.js

28 Maggio 2012 - 3 minuti di lettura

In questo articolo a cura di Giulio Roggero verrà spiegato come effettuare una chiamata REST usando codice Node.js senza utilizzare pacchetti già pronti.

Precisamente, verrà mostrato il codice per gestire sia GET che POST utilizzando solo il package HTTPS e Facebook come server di test.

Node.js

Questo linguaggio sta rivoluzionando il modo di programmare le piattaforme software.

Basato sul Google V8 JavaScript Engine permette di scrivere codice lato server in JavaScript.

Ci sono diversi benefici nell’utilizzare Node.js: manipolare JSON nativamente, scrivere back-end e front-end nello stesso linguaggio e pensare in modo asincrono by-design e non come una forzatura.

Esempio di gestione delle chiamate GET e POST in HTTPS

Ecco un esempio di codice scritto in Node.js per effettuare chiamate GET e POST. L’unico package usato è HTTPS.

Si importa il package:

var https = require('https');

Per la chiamata HTTP GET:

// options for GET
var optionsget = {
  host : 'graph.facebook.com', // here only the domain name
  // (no http/https !)
  port : 443,
  path : '/youscada', // the rest of the url with parameters if needed
  method : 'GET' // do GET
};
console.info('Options prepared:');
console.info(optionsget);
console.info('Do the GET call');

Gestione della request per la GET:

var reqGet = https.request(optionsget, function(res) {
  console.log("statusCode: ", res.statusCode);
  // uncomment it for header details
  // console.log("headers: ", res.headers);
  res.on('data', function(d) {
    console.info('GET result:\n');
    process.stdout.write(d);
    console.info('\n\nCall completed');
  });
});
reqGet.end();
reqGet.on('error', function(e) {
  console.error(e);
});

Per la chiamata HTTP POST, prima creiamo il JSON:

jsonObject = JSON.stringify({
  "message" : "The web of things is approaching, let do some tests to be ready!",
  "name" : "Test message posted with node.js",
  "caption" : "Some tests with node.js",
  "link" : "http://www.youscada.com",
  "description" : "this is a description",
  "picture" : "http://youscada.com/wp-content/uploads/2012/05/logo2.png",
  "actions" : [ {
    "name" : "youSCADA",
    "link" : "http://www.youscada.com"
  } ]
});

Dopodiché si gestisce il content dell’header:

var postheaders = {
  'Content-Type' : 'application/json',
  'Content-Length' : Buffer.byteLength(jsonObject, 'utf8')
};

Opzioni per la chiamata POST:

var optionspost = {
  host : 'graph.facebook.com',
  port : 443,
  path : '/youscada/feed?access_token=your_api_key',
  method : 'POST',
  headers : postheaders
};
console.info('Options prepared:');
console.info(optionspost);
console.info('Do the POST call');

Eseguire la chiamata alla POST:

// do the POST call
var reqPost = https.request(optionspost, function(res) {
  console.log("statusCode: ", res.statusCode);
  // uncomment it for header details
  // console.log("headers: ", res.headers);
  res.on('data', function(d) {
    console.info('POST result:\n');
    process.stdout.write(d);
    console.info('\n\nPOST completed');
  });
});

Per scrivere il JSON:

reqPost.write(jsonObject);
reqPost.end();
reqPost.on('error', function(e) {
  console.error(e);
});

Opzioni per il messaggio di GET:

var optionsgetmsg = {
  host : 'graph.facebook.com', // here only the domain name
  // (no http/https !)
  port : 443,
  path : '/youscada/feed?access_token=you_api_key', // the rest of the url with parameters if needed
  method : 'GET' // do GET
};
console.info('Options prepared:');
console.info(optionsgetmsg);
console.info('Do the GET call');

GET request:

var reqGet = https.request(optionsgetmsg, function(res) {
  console.log("statusCode: ", res.statusCode);
  // uncomment it for header details
  // console.log("headers: ", res.headers);
  res.on('data', function(d) {
    console.info('GET result after POST:\n');
    process.stdout.write(d);
    console.info('\n\nCall completed');
  });
});
reqGet.end();
reqGet.on('error', function(e) {
  console.error(e);
});

Per eseguire questo test cambiate your_api_key con la vostra di Facebook ed eseguite il comando node call.js

Riferimenti

Articolo scritto da