API网关示例node.js

寻找一个很好的例子来说明如何为微服务应用程序实现一个节点API网关,我明白有一个网关的目的,我只是不知道如何实现这一点,而不只是添加另一级别的RESTful路由调用。 对我来说,一个网关应该把路线引导到微服务。

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 }); 

假设你的微服务是它自己的http服务器(如果没有,那么请解释更多关于它的体系结构),并假设你的API被devise成可以很容易地识别哪些路由去哪个微服务而没有指定每一个可能的路线,那么你应该能够为整个微服务创build一个路由处理程序(或者在最坏的情况下,为整个微服务创build一个非常less量的路由处理程序)。

例如,如果以/api/foo开始的所有请求都转到foo微服务,那么您应该能够拥有捕获/api/foo/*的单个路由处理程序,并将其代理到微服务。 如果您对所有请求(例如运行或validation身份validation过程的中间件)都有共同的中间件,那么可以在代理路由处理程序之前的堆栈中对所有请求进行微服务调用。

如果传入的API调用和微服务API之间没有1对1的映射关系,则必须在两者之间创build一个映射。 根据不匹配的级别,您可以使用表驱动的方法来完成这一工作,您可以在表中指定与表中的内容匹配的内容,然后使用一个通用代码处理表中的所有定义。