寻找一个如何为微服务应用程序实现节点API网关的一个很好的例子,我理解拥有网关的目的,我只是不确定如何实现这一点而不仅仅添加另一级别的RESTful路由调用。对我来说,网关应该只是将路由指向微服务。
API网关端口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
});
答案 0 :(得分:3)
假设您的微服务是它自己的http服务器(如果没有,那么请详细说明其架构)并假设您的API设计为可以轻松识别哪条路由到哪个微服务而不指定每条可能的路由,那么您应该能够为整个微服务创建一个路由处理程序(或者最坏的是整个微服务的极少数路由处理程序)。
例如,如果所有以/api/foo
开头的请求都转到foo
微服务,那么您应该能够拥有一个捕获/api/foo/*
的路由处理程序和代理微服务。如果您有所有请求的通用中间件(例如运行或验证身份验证过程的中间件),那么它可以在代理路由处理程序之前位于堆栈中,因此将为所有发送到微服务的请求调用它。
如果传入的API调用和微服务API之间没有一对一的映射,那么您必须在两者之间创建映射。根据不匹配的程度,您可以使用表驱动方法执行此操作,您可以在其中指定与表中的内容匹配的内容,然后使用一段通用代码处理表中的所有定义。