2016-06-10 61 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