5
我一直在搜索整個互聯網如何做到這一點,但我一直沒能找到它。我正嘗試使用Go和Martini爲我的系統構建一個簡單的API網關,該系統包含幾個運行REST接口的微服務。例如,我有192.168.2.8:8000
運行我users
服務,我想通過/users
去簡單的API網關代理
訪問呢?所以我的API網關會是這個樣子:
package main
import (
"github.com/codegangsta/martini"
"net/http"
)
func main(){
app := martini.Classic()
app.Get("https://stackoverflow.com/users/:resource", func(req *http.Request, res http.ResponseWriter){
//proxy to http://192.168.2.8:8000/:resource
})
app.Run()
}
編輯
我有一些工作,但我看到的是[vhost v2] release 2.2.5
:
package main
import(
"net/url"
"net/http"
"net/http/httputil"
"github.com/codegangsta/martini"
"fmt"
)
func main() {
remote, err := url.Parse("http://127.0.0.1:3000")
if err != nil {
panic(err)
}
proxy := httputil.NewSingleHostReverseProxy(remote)
app := martini.Classic()
app.Get("https://stackoverflow.com/users/**", handler(proxy))
app.RunOnAddr(":4000")
}
func handler(p *httputil.ReverseProxy) func(http.ResponseWriter, *http.Request, martini.Params) {
return func(w http.ResponseWriter, r *http.Request, params martini.Params) {
fmt.Println(params)
r.URL.Path = "/authorize"
p.ServeHTTP(w, r)
}
}
編輯2
這似乎只直接使用通過瀏覽器,XMLHttpRequest
作品就好了,當它成爲一個問題
用戶馬提尼的任何理由......你可以用net/http包做所有的事情。 –
我知道,但它也必須做一些靜態文件服務和其他事情,網關只是應用程序的一部分 – Dirk