2016-06-10 59 views
4

寻找如何实现的微服务应用的一个节点API网关一个很好的例子,我的理解具有网关的目的,我只是不知道如何实现这一点没有刚加入另一级别的RESTful路由调用。对我来说,一个网关应该只是指引微服务的路线。API网关例如用于node.js的

API网关端口3000

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

Microservice1 server.js端口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 
}); 

回答

3

假设你的微服务是自己的HTTP服务器(如果没有的话,请详细介绍一下它的架构),并假设你的API的设计,这样你可以很容易地识别哪些途径去哪个微服务,而无需指定每一个可能的路径,那么你应该能够为整个微服务创建一个路由处理程序(或者最坏的情况是为整个微服务提供非常少量的路由处理程序)。

例如,如果与/api/foo开始的所有请求转到foo微服务,那么你应该能够有一个捕捉/api/foo/*和代理该到微服务单一的路由处理。如果您对所有请求都有公共中间件(例如运行或验证身份验证过程的中间件),那么这些中间件可以在代理路由处理程序之前的堆栈中,以便在所有请求转到微服务时调用它们。

如果你没有传入API调用和微服务的API之间的1对1映射,那么你必须创建两个之间的映射。根据不匹配的级别,您可以使用表驱动的方法来执行此操作,您可以在其中指定与表中内容匹配的内容,然后通过一个通用代码处理表中的所有定义。

+0

是你的假设是正确的,我本来应该更清晰的描述与我的问题。我用我迄今为止的一些代码更新了我的问题。 – pwborodich

+0

@pwborodich - 你是否试图将http动词映射到路由前缀?如果我们能够理解哪些传入路线转到哪些微服务网址,我们可以提供更好的帮助。 – jfriend00

+0

如果我有我的角度客户端让我们说请求http:// localhost:3000/microservice/route1,就像在上面router.js中的第一个路由一样。我怎么能通过这个网关把这个传递给微服务 – pwborodich