为了寻找如何为微服务应用程序实现节点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
});
发布于 2016-06-10 04:03:39
假设您的微服务是它自己的http服务器(如果不是,请解释更多关于它的体系结构),假设您的API的设计使您可以轻松地识别哪些路由到哪个微服务,而无需指定每一个可能的路由,那么您应该能够为整个微服务创建一个路由处理程序(或者在最坏的情况下,为整个微服务创建一个非常少的路由处理程序)。
例如,如果以/api/foo
开头的所有请求都转到foo
微服务,那么您应该能够有一个路由处理程序来捕获/api/foo/*
并将其代理到微服务。如果您有用于所有请求的通用中间件(例如运行或验证身份验证过程的中间件),则可以在代理路由处理程序之前在堆栈中调用该中间件,因此它将被调用到微服务的所有请求中。
如果在传入的API调用和微服务API之间没有1到1的映射,那么必须在两者之间创建一个映射。根据不匹配级别的不同,您可以使用表驱动的方法来实现这一点,在这种方法中,您可以指定与表中的内容匹配的内容,然后一段通用代码处理表中的所有定义。
https://stackoverflow.com/questions/37739538
复制相似问题