2016-06-10 13 views
4

Auf der Suche nach einem guten Beispiel für die Implementierung eines Knoten-API-Gateways für eine Microservice-Anwendung verstehe ich den Zweck eines Gateways, ich bin mir nicht sicher, wie Sie dies implementieren, ohne nur hinzuzufügen eine weitere Ebene von RESTful-Routenaufrufen. Ein Gateway soll mir den Weg zum Microservice weisen.API Gateway-Beispiel für node.js

API-Gateway-Port 3000

router.use('/microservicename/*', function (req, res, next) { 
    **code that will direct to microservice** 
}); 

Microservice1 server.js Port 3001

var express = require('express'); 
var app = express(); 

var routes = require('./routes/routes'); 

app.use('/microservicename', routes); 

var server = app.listen(3001, function() { 
    console.log('Server running at http://127.0.0.1:3001/'); 
}); 

Microservice1 router.js (3001)

router.get('/route1', function (req, res, next) { 
    //get route code 
}); 

router.post('/route2', function (req, res, next) { 
    //post route code 
}); 

router.put('/route3', function (req, res, next) { 
    //put route code 
}); 

router.delete('/route4', function (req, res, next) { 
    //delete route code 
}); 

Antwort

3

Angenommen, Ihr Microservice ist ein eigener http-Server (wenn nicht, dann erläutern Sie bitte mehr über seine Architektur) und vorausgesetzt, Ihre API ist so konzipiert, dass Sie leicht erkennen können, welche Routen zu welchem ​​Microservice gehen, ohne jede einzelne Route anzugeben in der Lage sein, einen Route-Handler für einen gesamten Microservice zu erstellen (oder im schlimmsten Fall eine sehr kleine Anzahl von Route-Handlern für den gesamten Microservice).

Zum Beispiel, wenn alle Anforderungen, die an die foo Micro mit /api/foo gehen beginnen, dann sollten Sie in der Lage sein, eine einzige Route Handler zu haben, die /api/foo/* auffängt und Proxies, die auf den Micro. Wenn Sie eine gemeinsame Middleware für alle Anforderungen haben (z. B. Middleware, die einen Authentifizierungsprozess ausführt oder überprüft), kann sie sich vor den Proxy-Route-Handlern im Stapel befinden, sodass sie für alle Anfragen an den Microservice aufgerufen wird.

Wenn Sie keine 1-zu-1-Zuordnung zwischen eingehenden API-Aufrufen und Microservice-APIs haben, müssen Sie eine Zuordnung zwischen den beiden erstellen. Je nach Grad der Nichtübereinstimmung können Sie dies möglicherweise mit einem tabellengesteuerten Ansatz tun, bei dem Sie angeben, was mit dem in einer Tabelle übereinstimmt, und dann verarbeitet ein Teil des generischen Codes alle Definitionen in der Tabelle.

+0

Ja, Ihre Annahmen sind korrekt, ich hätte mit meiner Frage klarer und beschreibender sein sollen. Ich habe meine Frage mit einem Code von dem, was ich bisher habe, aktualisiert. – pwborodich

+0

@pwborodich - Versuchen Sie, HTTP-Verben zu Routenpräfixen zuzuordnen? Wir könnten besser helfen, wenn wir verstehen, welche eingehenden Routen zu welchen URLs des Microservice führen. – jfriend00

+0

wenn ich meinen eckigen client hatte sagen wir die anfrage http: // localhost: 3000/microservice/route1 wie in der ersten route in obigem router.js. Wie könnte ich das Gateway dazu bringen, das an den Microservice – pwborodich