node.js的API网关示例

pwb*_*ich 5 node.js microservices

寻找有关如何为微服务应用程序实现节点API网关的好示例,我了解拥有网关的目的,只是不确定如何在不添加另一级RESTful路由调用的情况下实现此网关。对我来说,网关应该只是将路由定向到微服务。

API网关端口3000

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

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/');
});
Run Code Online (Sandbox Code Playgroud)

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
});
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 3

假设您的微服务是它自己的 http 服务器(如果不是,那么请详细解释其架构),并假设您的 API 的设计使您可以轻松识别哪些路由到达哪个微服务,而无需指定每个可能的路由,那么您应该能够为整个微服务创建一个路由处理程序(或者最坏的情况是为整个微服务创建极少量的路由处理程序)。

例如,如果所有以 开头的请求都/api/foo转到foo微服务,那么您应该能够有一个路由处理程序来捕获/api/foo/*该请求并将其代理到微服务。如果您对所有请求都有通用的中间件(例如运行或验证身份验证过程的中间件),则该中间件可以位于代理路由处理程序之前的堆栈中,以便为发送到微服务的所有请求调用它。

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