servicio - ¿Cómo hacer una llamada REST remota dentro de Node.js? cualquier CURL?
node restful (10)
En Node.js , además de usar el proceso hijo para hacer una llamada CURL , ¿hay alguna forma de hacer que CURL llame al API REST del servidor remoto y obtenga los datos devueltos?
También necesito configurar el encabezado de solicitud para la llamada REST remota, y también consultar cadena en GET (o POST).
Encuentro este: http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs
pero no muestra ninguna forma de POST cadena de consulta.
¿Qué hay de usar Request - Cliente HTTP simplificado .
Aquí hay un GET:
var request = require(''request'');
request(''http://www.google.com'', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Print the google web page.
}
})
OP también quería un POST:
request.post(''http://service.com/upload'', {form:{key:''value''}})
He estado usando restler para hacer llamadas a webservices, funciona como encanto y es bastante limpio.
Mira http://isolasoftware.it/2012/05/28/call-rest-api-with-node-js/
var https = require(''https'');
/**
* HOW TO Make an HTTP Call - 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'');
// do the GET request
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);
});
/**
* HOW TO Make an HTTP Call - POST
*/
// do a POST request
// create the JSON object
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"
} ]
});
// prepare the header
var postheaders = {
''Content-Type'' : ''application/json'',
''Content-Length'' : Buffer.byteLength(jsonObject, ''utf8'')
};
// the post options
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'');
// 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'');
});
});
// write the json data
reqPost.write(jsonObject);
reqPost.end();
reqPost.on(''error'', function(e) {
console.error(e);
});
/**
* Get Message - GET
*/
// options for 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'');
// do the 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);
});
No encontré ninguno con cURL, así que escribí un contenedor alrededor de node-libcurl y se puede encontrar en https://www.npmjs.com/package/vps-rest-client .
Para hacer un POST es así:
var host = ''https://api.budgetvm.com/v2/dns/record'';
var key = ''some___key'';
var domain_id = ''some___id'';
var rest = require(''vps-rest-client'');
var client = rest.createClient(key, {
verbose: false
});
var post = {
domain: domain_id,
record: ''test.example.net'',
type: ''A'',
content: ''111.111.111.111''
};
client.post(host, post).then(function(resp) {
console.info(resp);
if (resp.success === true) {
// some action
}
client.close();
}).catch((err) => console.info(err));
Puede usar curlrequest para establecer fácilmente la hora de la solicitud que desea hacer ... incluso puede establecer encabezados en las opciones para " falsificar " una llamada del navegador.
Si tiene Node.js 4.4+, eche un vistazo a reqclient , le permite hacer llamadas y registrar las solicitudes en estilo cURL , para que pueda verificar y reproducir fácilmente las llamadas fuera de la aplicación.
Devuelve Promise objetos en lugar de pasar callbacks simples, para que pueda manejar el resultado de una manera más "moda" , chain el resultado fácilmente y maneje los errores de forma estándar. También elimina una gran cantidad de configuraciones repetitivas en cada solicitud: URL base, tiempo de espera, formato de tipo de contenido, encabezados predeterminados, parámetros y enlace de consulta en la URL, y funciones básicas de caché.
Este es un ejemplo de cómo inicializarlo, realizar una llamada y registrar la operación con estilo curl :
var RequestClient = require("reqclient").RequestClient;
var client = new RequestClient({
baseUrl:"http://baseurl.com/api/", debugRequest:true, debugResponse:true});
client.post("client/orders", {"client": 1234, "ref_id": "A987"},{"x-token": "AFF01XX"});
Esto iniciará sesión en la consola ...
[Requesting client/orders]-> -X POST http://baseurl.com/api/client/orders -d ''{"client": 1234, "ref_id": "A987"}'' -H ''{"x-token": "AFF01XX"}'' -H Content-Type:application/json
Y cuando la respuesta es devuelta ...
[Response client/orders]<- Status 200 - {"orderId": 1320934}
Este es un ejemplo de cómo manejar la respuesta con el objeto promesa:
client.get("reports/clients")
.then(function(response) {
// Do something with the result
}).catch(console.error); // In case of error ...
Por supuesto, se puede instalar con: npm install reqclient
.
Uso npmjs.com/package/node-fetch porque usa la API familiar (si eres un desarrollador web) fetch () . fetch () es la nueva forma de realizar solicitudes HTTP arbitrarias desde el navegador.
Sí, sé que esta es una pregunta de nodo js, pero ¿no queremos reducir la cantidad de desarrolladores de API que tenemos que memorizar y comprender, y mejorar la reutilización de nuestro código de JavaScript? La búsqueda es un estándar, ¿qué tal si convergimos en eso?
La otra cosa buena de fetch () es que devuelve una Promise javascript, por lo que puedes escribir un código asíncrono como este:
let fetch = require(''node-fetch'');
fetch(''http://localhost'', {
method: ''POST'',
headers: {''Content-Type'': ''application/json''},
body: ''{}''
}).then(response => {
return response.json();
}).catch(err => {console.log(err);});
Fetch reemplaza XMLHTTPRequest . Aquí hay algo más de información .
otro ejemplo: debe instalar el módulo de solicitud para ese
var request = require(''request'');
function get_trustyou(trust_you_id, callback) {
var options = {
uri : ''https://api.trustyou.com/hotels/''+trust_you_id+''/seal.json'',
method : ''GET''
};
var res = '''';
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
res = body;
}
else {
res = ''Not Found'';
}
callback(res);
});
}
get_trustyou("674fa44c-1fbd-4275-aa72-a20f262372cd", function(resp){
console.log(resp);
});
Mira http.request
var options = {
host: url,
port: 80,
path: ''/resource?id=foo&bar=baz'',
method: ''POST''
};
http.request(options, function(res) {
console.log(''STATUS: '' + res.statusCode);
console.log(''HEADERS: '' + JSON.stringify(res.headers));
res.setEncoding(''utf8'');
res.on(''data'', function (chunk) {
console.log(''BODY: '' + chunk);
});
}).end();
var http = require(''http'');
var url = process.argv[2];
http.get(url, function(response) {
var finalData = "";
response.on("data", function (data) {
finalData += data.toString();
});
response.on("end", function() {
console.log(finalData.length);
console.log(finalData.toString());
});
});