2013-04-22 13 views
8

Czy rozsądnie jest używać Node.js do napisania samodzielnej aplikacji, która połączy dwa interfejsy REST API?Używanie Node.js do łączenia się z interfejsem REST API

Jeden koniec będzie POS - Punkt sprzedaży - System

Drugi będzie gospodarzem platformy ecommerce

Nie będzie minimalny interfejs do konfiguracji usługi. nic więcej.

+0

Tak, w porządku. Nie widzę powodu, dla którego nie można użyć node.js do tego celu. –

Odpowiedz

23

Tak, Node.js doskonale nadaje się do nawiązywania połączeń z zewnętrznymi interfejsami API. Podobnie jak wszystko w węźle, funkcje wywoływania tych wywołań są oparte na zdarzeniach, co oznacza takie czynności jak buforowanie danych odpowiedzi w przeciwieństwie do odbierania pojedynczej, zakończonej odpowiedzi.

Na przykład:

// get walking directions from central park to the empire state building 
var http = require("http"); 
    url = "http://maps.googleapis.com/maps/api/directions/json?origin=Central Park&destination=Empire State Building&sensor=false&mode=walking"; 

// get is a simple wrapper for request() 
// which sets the http method to GET 
var request = http.get(url, function (response) { 
    // data is streamed in chunks from the server 
    // so we have to handle the "data" event  
    var buffer = "", 
     data, 
     route; 

    response.on("data", function (chunk) { 
     buffer += chunk; 
    }); 

    response.on("end", function (err) { 
     // finished transferring data 
     // dump the raw data 
     console.log(buffer); 
     console.log("\n"); 
     data = JSON.parse(buffer); 
     route = data.routes[0]; 

     // extract the distance and time 
     console.log("Walking Distance: " + route.legs[0].distance.text); 
     console.log("Time: " + route.legs[0].duration.text); 
    }); 
}); 

To może mieć sens, aby znaleźć prosty biblioteki otoki (lub napisać własny), jeśli masz zamiar być co wiele z tych połączeń.

+0

Dobrze objaśnione +1 – AndrewMcLagan

+0

Naprawdę cieszę się z modelu z określonym węzłem. kiedy dane są porwane w ten sposób. czy można rozpocząć manipulowanie nim przed zakończeniem transmisji? czy przybywa po kolei? – AndrewMcLagan

+0

Dzięki! Tak, dane są przesyłane strumieniowo w kolejności. Jeśli możesz korzystać z danych przed zakończeniem przesyłania strumieniowego, nie widzę powodu, dla którego nie mógłbyś z nimi wcześniej pracować (chociaż osobiście jeszcze nie miałem do tego zastosowania). –

-1

Bardziej łatwym i użytecznym narzędziem jest po prostu użycie interfejsu API takiego jak Unirest; URest to pakiet w NPM, który jest po prostu zbyt łatwy w użyciu, taki jak

app.get('/any-route', function(req, res){ 
    unirest.get("https://rest.url.to.consume/param1/paramN") 
     .header("Any-Key", "XXXXXXXXXXXXXXXXXX") 
     .header("Accept", "text/plain") 
     .end(function (result) { 
     res.render('name-of-the-page-according-to-your-engine', { 
     layout: 'some-layout-if-you-want', 
     markup: result.body.any-property, 
    }); 

});

+0

"res" jest niezdefiniowany! – Kasra

+0

Yo musi umieścić go w trasie w 'app.get ('/', auth.protected, function (req, res) { \t });" –

+0

Edytuj i zaktualizuj kod, proszę. – Kasra

Powiązane problemy