HTTP API Gateway

Overview

Gitter Build Status Go Report Card

Manba/简体中文

Manba is a restful API gateway based on HTTP, which can be used as a unified API access layer.

Tutorial

A very detailed tutorial for beginners. Link Below are video tutorials. Basics:

Alternative bilibili.com video link: https://www.bilibili.com/video/av73432556/

Routing Configuration Tutorial:

Alternative bilibili.com video link: https://www.bilibili.com/video/av73432836/

JWT Plugin Configuration Tutorial:

Alternative bilibili.com video link: https://www.bilibili.com/video/av73433002/

Attention

Please make sure your Go version is 1.10 or above. Otherwise, undefined "math/rand".Shuffle error will occur when compiling. StackOverFlow Link

Features

  • Traffic Control (on Server or API)
  • Circuit Breaker (on Server or API)
  • Load Balance
  • Service Discovery
  • Plugin
  • Routing (Divert Traffic, Duplicate Traffic)
  • API Aggregation
  • API Argument Check
  • API Access Control (White and Black List)
  • API Default Return Value
  • API Customized Return Value
  • API Result Cache
  • JWT Authorization
  • API Metric Imports Prometheus
  • API Retry After Failure
  • Backend Server Health Check
  • Open Management of API (GRPC、Restful)
  • Websocket Support
  • Online Data Migration Support

Docker

The following content requires reader some knowledge of Docker. You can refer to this book, or check out the official documentation

Available Docker Images

  • fagongzi/proxy

    proxy component, production ready

  • fagongzi/apiserver

    apiserver component, production ready

Quick start with docker-compose

docker-compose up -d

Use http://127.0.0.1:9093/ui/index.html to access apiserver

Use http://127.0.0.1 to access to your API

Architecture

Web UI

Available Manba Web UI Projects:

Components

Manba consists of proxy and apiserver.

Proxy

Proxy is a component which provides service to clients. Proxy is a stateless node. Multiple proxies can be deployed to handle huge traffic. More.

ApiServer

ApiServer provides GRPC and Restful to manage metadata for users. ApiServer integrates official Web UI. More.

Concepts of Manba

Server

A server is a a real backend service. More.

Cluster

Cluster consists of servers which provide the same service. A server is chosen to handle a specific request based on a load balance strategy. More.

API

API is a key concept of Manba. We can manage external APIs in Manba and their distribution rules, aggregation rules and URL matching rules. More.

Routing

Routing is a route strategy. Cookie, Querystring, Header and Path in HTTP Request dictate traffic distribution and traffic duplication to a specific cluster. Through this feature, AB test and online traffic divertion is achieved. More.

Getting Involved

More

WeChat

Comments
  • 使用问题

    使用问题

    您好,对这个项目不是很了解,可能在配置上有点问题,不知道是怎么回事,麻烦帮忙指点下,多谢。 我的环境下: ## gateway的log如下: 2016/06/30 19:57:18 log.go:31: [INFO] set log level to 2016/06/30 19:57:18 gateway.go:68: [INFO] conf:<&{Addr::80 MgrAddr::8081 EtcdAddr:http://127.0.0.1:2379 EtcdPrefix:/gateway LogLevel:info EnableRuntimeVal:false EnableCookieVal:false EnableHeadVal:false ReqHeadStaticMapping:map[] RspHeadStaticMapping:map[]}> 2016/06/30 19:57:18 ruletable.go:467: [INFO] RouteTable start watch. 2016/06/30 19:57:18 etcd.go:379: [INFO] Etcd watch at: 2016/06/30 19:57:18 ruletable.go:564: [WARN] Load clusters fail. [error]: 100: Key not found (/gateway) [5] 2016/06/30 19:57:18 ruletable.go:579: [WARN] Load servers from etcd fail. [error]: 100: Key not found (/gateway) [5] 2016/06/30 19:57:18 ruletable.go:610: [WARN] Load binds from etcd fail. [error]: 100: Key not found (/gateway) [5] 2016/06/30 19:57:18 ruletable.go:625: [WARN] Load aggregations from etcd fail. [error]: 100: Key not found (/gateway) [5] 2016/06/30 19:57:18 ruletable.go:595: [WARN] Load routings from etcd fail. [error]: 100: Key not found (/gateway) [5] 2016/06/30 19:57:18 manager.go:72: [INFO] Mgr listen at :8081.


    ## admin的log如下: start at 192.168.2.56:9090 time=2016-06-30T20:04:01-07:00, remote_ip=192.168.2.71, method=GET, uri=/, status=404, took=958.284µs, sent=9 bytes time=2016-06-30T20:04:11-07:00, remote_ip=192.168.2.71, method=GET, uri=/gateway, status=404, took=2.547534ms, sent=9 bytes

    不知道为什么admin访问的时候老是404“Not Found”。使用的用户名和密码都是:admin

    opened by colinwdk 23
  • 访问不了ui了

    访问不了ui了

    用docker-compose方式启动了所有组件, 已经用了一段时间了, 一直可以打开ui. 不知为何突然再也打不开了, 访问http://x.x.x.x:9093/ui/index.html一直报错: {"message":"Not Found"} . 这里的IP不是127.0.0.1. 请问如何解决? 各种办法都试过了, 系统都用了新的.

    opened by laoluotuo 10
  • 请问如何使用JavaScript Plugin,能否提供一个示例?

    请问如何使用JavaScript Plugin,能否提供一个示例?

    尝试在后台添加JavaScript类型的plugin,内容如下:

    function NewPlugin(cfg) {
      // import builtin modules
      var JSON = require("json")
      var HTTP = require("http")
      var REDIS = require("redis")
      var LOG = require("log")
      // init plugin
      return {
        // filter pre method
        "pre": function(ctx) {
      return {"code": 403, "error": "not login"}
        }
      }
    }
    

    但是没有效果,请求还是被正常转发 能否提供一个plugin_js的示例,谢谢!

    opened by helloworld8192 8
  • Error when install on mac

    Error when install on mac

    I tried with 'git clone' , 'go get', 'download zip', but none worked

    env: golang 1.9 macOS 10.13.2

    error with 'git clone' and same as 'go get': git clone https://github.com/fagongzi/gateway.git Cloning into 'gateway'... remote: Counting objects: 13134, done. remote: Compressing objects: 100% (6/6), done. remote: Total 13134 (delta 0), reused 1 (delta 0), pack-reused 13128 Receiving objects: 100% (13134/13134), 32.29 MiB | 79.00 KiB/s, done. Resolving deltas: 100% (4722/4722), done. error: unable to create symlink vendor/github.com/coreos/etcd/Documentation/README.md: File name too long error: unable to create symlink vendor/github.com/coreos/etcd/cmd/etcd: File name too long error: unable to create symlink vendor/github.com/coreos/etcd/cmd/etcdctl: File name too long error: unable to create symlink vendor/github.com/coreos/etcd/cmd/tools: File name too long fatal: unable to checkout working tree warning: Clone succeeded, but checkout failed. You can inspect what was checked out with 'git status' and retry the checkout with 'git checkout -f HEAD'

    error with 'unzip' image

    how can i solved this? (CSDN博客上说zip解压失败可能是子文件夹的问题,是不是vendor文件夹依赖呆导致的?感谢你的开源与帮助)

    opened by skanger 8
  • mac go install command-line-arguments: build output

    mac go install command-line-arguments: build output "proxy" already exists and is a directory

    在mac下按照文档clone下来代码后,进入项目根目录下,运行go build cmd/proxy/proxy.go 报如下错误: go install command-line-arguments: build output "proxy" already exists and is a directory

    请问下这个问题怎么解决呢?

    我的go sdk环境配置如下: GOARCH="amd64" GOBIN="" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="~/go" GORACE="" GOROOT="/usr/local/Cellar/go/1.8.1/libexec" GOTOOLDIR="/usr/local/Cellar/go/1.8.1/libexec/pkg/tool/darwin_amd64" GCCGO="gccgo" CC="clang" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/jz/yzzkw_gs5z701z5_x47403gw0000gn/T/go-build946663768=/tmp/go-build -gno-record-gcc-switches -fno-common" CXX="clang++" CGO_ENABLED="1" PKG_CONFIG="pkg-config" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2"

    gateway存放目录: ~/go/src/github.com/fagongzi/gateway

    opened by zzzkk2009 6
  • 如何配置API的HTTPS访问

    如何配置API的HTTPS访问

    为API规则配置了"https支持", 添加了证书, 但是不生效. 看proxy日志, 证书配置已经加载上了. 添加参数-addr-https=192.168.66.211:443, 重启proxy443仍然无法打开. 日志中也没体现. 我的proxy, apiserver都是master分支的. 但是尝试过编译v3.0.0分支, 包编译无法通过, 多个包拉不到或版本不对. 于是从fagongzi/manba-proxy:latest里把二进制文件manba-proxy拷了出来启动, 问题依旧. 请问如何解决?

    opened by laoluotuo 5
  • 健康检查失败后,没有将server从cluster中移除

    健康检查失败后,没有将server从cluster中移除

    现象:从日志看,健康检查运行正常,对于一个不可用服务会打出server <%d, %s, %d> check failed, errors 这句log。但是从未出现server <%d> DOWN 这句log,request也仍然会dispatch到不正常的服务去。可能是判断prev != svr.status的时候出问题。

    配置:limit-heathcheck = 5, server的check interval为10秒,超时为10秒

    opened by phhong 5
  • health check 锁的时间过长

    health check 锁的时间过长

    check方法中持有写锁的时间包含了调用back-end服务的健康检查接口的时间。 当back-end down的时候,如果超时设置得比较长,那么持有写锁的时间也就较长。而转发的时候也会申请同一个锁的读锁,会被block住较长的时间。

    偶然也会有死锁,应该和heathCheckTimeout方法中也申请了锁有关。Schedule方法在偶然的情况下会直接执行heathCheckTimeout,而不是由另一个goroutine执行,导致没有释放锁就先申请锁了。

    func (r *dispatcher) heathCheckTimeout(arg interface{}) { id := arg.(uint64) r.RLock() _, ok := r.servers[id] r.RUnlock() if ok { r.checkerC <- id } }

    func (r *dispatcher) check(id uint64) { r.RLock() defer r.RUnlock() svr, ok := r.servers[id] if !ok { return }

    defer func() {
    	if svr.meta.HeathCheck != nil {
    		if svr.useCheckDuration > r.cnf.Option.LimitIntervalHeathCheck {
    			svr.useCheckDuration = r.cnf.Option.LimitIntervalHeathCheck
    		}
    		svr.heathTimeout, _ = r.tw.Schedule(svr.useCheckDuration, r.heathCheckTimeout, id)
    	}
    }()
    
    opened by phhong 5
  • Update dispatcher.go

    Update dispatcher.go

    修复当tuntime.go的selectServer抛出异常时,读写锁r未释放,导致后续请求加锁hang住的问题 异常栈: 2018/01/29 13:25:32 panic: runtime error: invalid memory address or nil pointer dereference Stack trace: goroutine 12080 [running]: runtime/debug.Stack(0xc0420358a8, 0x9d4760, 0xe21080) D:/Go/src/runtime/debug/stack.go:24 +0xae github.com/fagongzi/gateway/vendor/github.com/valyala/fasthttp.(*workerPool).wor kerFunc.func1(0xc0422d0200, 0xc042035f68) D:/goprojects/src/github.com/fagongzi/gateway/vendor/github.com/valyala/ fasthttp/workerpool.go:207 +0x95 panic(0x9d4760, 0xe21080) D:/Go/src/runtime/panic.go:491 +0x291 github.com/fagongzi/gateway/pkg/proxy.(*clusterRuntime).selectServer(0x0, 0xc042 52c000, 0x0) D:/goprojects/src/github.com/fagongzi/gateway/pkg/proxy/runtime.go:66 +0 x2d github.com/fagongzi/gateway/pkg/proxy.(*dispatcher).selectServer(0xc042044d20, 0 xc04252c000, 0x0, 0xe53dc0) D:/goprojects/src/github.com/fagongzi/gateway/pkg/proxy/dispatcher.go:15 1 +0x3c github.com/fagongzi/gateway/pkg/proxy.(*dispatcher).routingOpt(0xc042044d20, 0xc 04252c000, 0xc0422d4000) D:/goprojects/src/github.com/fagongzi/gateway/pkg/proxy/dispatcher.go:14 1 +0x143 github.com/fagongzi/gateway/pkg/proxy.(*dispatcher).dispatch(0xc042044d20, 0xc04 252c000, 0x0, 0x0, 0x0) D:/goprojects/src/github.com/fagongzi/gateway/pkg/proxy/dispatcher.go:12 5 +0x2af github.com/fagongzi/gateway/pkg/proxy.(*Proxy).ReverseProxyHandler(0xc0421300c0, 0xc04252c000) D:/goprojects/src/github.com/fagongzi/gateway/pkg/proxy/proxy.go:250 +0x 69 github.com/fagongzi/gateway/pkg/proxy.(*Proxy).ReverseProxyHandler-fm(0xc04252c0 00) D:/goprojects/src/github.com/fagongzi/gateway/pkg/proxy/proxy.go:100 +0x 3b github.com/fagongzi/gateway/vendor/github.com/valyala/fasthttp.(*Server).serveCo nn(0xc04235f2c0, 0xdebe40, 0xc0422f8018, 0xc042035e01, 0x101) D:/goprojects/src/github.com/fagongzi/gateway/vendor/github.com/valyala/ fasthttp/server.go:1494 +0x618 github.com/fagongzi/gateway/vendor/github.com/valyala/fasthttp.(*Server).(github .com/fagongzi/gateway/vendor/github.com/valyala/fasthttp.serveConn)-fm(0xdebe40, 0xc0422f8018, 0xc0422d0201, 0xc042035f68) D:/goprojects/src/github.com/fagongzi/gateway/vendor/github.com/valyala/ fasthttp/server.go:1223 +0x45 github.com/fagongzi/gateway/vendor/github.com/valyala/fasthttp.(*workerPool).wor kerFunc(0xc0422d0200, 0xc04211cde0) D:/goprojects/src/github.com/fagongzi/gateway/vendor/github.com/valyala/ fasthttp/workerpool.go:224 +0x14b github.com/fagongzi/gateway/vendor/github.com/valyala/fasthttp.(*workerPool).get Ch.func1(0xc0422d0200, 0xc04211cde0, 0x97e3a0, 0xc04211cde0) D:/goprojects/src/github.com/fagongzi/gateway/vendor/github.com/valyala/ fasthttp/workerpool.go:183 +0x3c created by github.com/fagongzi/gateway/vendor/github.com/valyala/fasthttp.(*work erPool).getCh D:/goprojects/src/github.com/fagongzi/gateway/vendor/github.com/valyala/ fasthttp/workerpool.go:182 +0x143

    opened by qdzhoujian 5
  • 压测存在500的报错

    压测存在500的报错

    不适用manba,直接压测gin的http接口 压测一个ping接口(可以理解为hello world) image 2000次 失败数为0.

    使用manba网关后 image 会出现113个 500的返回。 proxy是直接拉取的master编译的。 压测工具是github中开源的go-stress-testing 。

    请问可能是哪里出了问题?

    opened by chenxiao1990 4
  • panic

    panic

    2019/09/22 22:53:10.017435 [info] [GET]/department/49: match api department, has 1 dispatches 2019/09/22 22:53:10.017457 [info] [GET]/department/49: dipatch node 0 force using default panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x181c65d]

    goroutine 137 [running]: github.com/fagongzi/gateway/pkg/proxy.(*dispatchNode).getResponseBody(0xc000498160, 0x0, 0x0, 0x100000000000008) /Users/xiangzhi/Work/Go/src/github.com/fagongzi/gateway/pkg/proxy/dispatcher.go:159 +0x4d github.com/fagongzi/gateway/pkg/proxy.(*render).renderRaw(0xc000330540, 0xc00040c480, 0xc000498160) /Users/xiangzhi/Work/Go/src/github.com/fagongzi/gateway/pkg/proxy/render.go:135 +0xcf github.com/fagongzi/gateway/pkg/proxy.(*render).renderSingle(0xc000330540, 0xc00040c480) /Users/xiangzhi/Work/Go/src/github.com/fagongzi/gateway/pkg/proxy/render.go:74 +0x1a0 github.com/fagongzi/gateway/pkg/proxy.(*render).render(0xc000330540, 0xc00040c480, 0x0) /Users/xiangzhi/Work/Go/src/github.com/fagongzi/gateway/pkg/proxy/render.go:51 +0xee github.com/fagongzi/gateway/pkg/proxy.(*Proxy).ServeFastHTTP(0xc00027c000, 0xc00040c480) /Users/xiangzhi/Work/Go/src/github.com/fagongzi/gateway/pkg/proxy/proxy.go:318 +0xb96 github.com/valyala/fasthttp.(*Server).serveConn(0xc000486000, 0x1bcc420, 0xc000376030, 0x0, 0x0) /Users/xiangzhi/Work/Go/src/github.com/fagongzi/gateway/vendor/github.com/valyala/fasthttp/server.go:1932 +0x824 github.com/valyala/fasthttp.(*workerPool).workerFunc(0xc00037a2d0, 0xc000326d40) /Users/xiangzhi/Work/Go/src/github.com/fagongzi/gateway/vendor/github.com/valyala/fasthttp/workerpool.go:212 +0xc0 github.com/valyala/fasthttp.(*workerPool).getCh.func1(0xc00037a2d0, 0xc000326d40, 0x18bf020, 0xc000326d40) /Users/xiangzhi/Work/Go/src/github.com/fagongzi/gateway/vendor/github.com/valyala/fasthttp/workerpool.go:184 +0x35 created by github.com/valyala/fasthttp.(*workerPool).getCh /Users/xiangzhi/Work/Go/src/github.com/fagongzi/gateway/vendor/github.com/valyala/fasthttp/workerpool.go:183 +0x119

    opened by xinzf 4
  • route.go Find函数匹配问题

    route.go Find函数匹配问题

    func TestFindMatchAmbiguity(t *testing.T) {
    	r := NewRoute()
    	r.Add(&metapb.API{
    		ID:         1,
    		URLPattern: "/a/b/c",
    		Method:     "*",
    	})
    	r.Add(&metapb.API{
    		ID:         2,
    		URLPattern: "/(string):x/b/e",
    		Method:     "*",
    	})
    
    	params := make(map[string]string, 0)
    	paramsFunc := func(name, value []byte) {
    		params[string(name)] = string(value)
    	}
    
    	id, _ := r.Find([]byte("/a/b/e"), "GET", paramsFunc)
    	fmt.Println(id, params)
    }
    

    输出: 0 map[]

    预期是要匹配到api_id =2, 实际上匹配不了

    opened by zouyih 2
  • proxy代理请求报错dispatch node 0 failed with error EOF

    proxy代理请求报错dispatch node 0 failed with error EOF

    当server端支持keep-alive时,连续向proxy发送大量请求,proxy会报错dispatch node 0 failed with error EOF。启动参数调整--limit-conn-keepalive=30,问题出现概率会降低。当彻底关闭server的keep-alive问题可以解决,但是这会带来严重性能损耗。

    请问这是bug还是有什么参数?

    opened by Yelijah 0
  • Bump github.com/valyala/fasthttp from 1.2.0 to 1.34.0

    Bump github.com/valyala/fasthttp from 1.2.0 to 1.34.0

    Bumps github.com/valyala/fasthttp from 1.2.0 to 1.34.0.

    Release notes

    Sourced from github.com/valyala/fasthttp's releases.

    v1.34.0

    • 59f94a3 Update github.com/klauspost/compress (#1237) (Mikhail Faraponov)
    • 62c15a5 Don't reset RequestCtx.s (#1234) (Erik Dubbelboer)
    • 7670c6e Fix windows tests (#1235) (Erik Dubbelboer)
    • f54ffa1 feature: Keep the memory usage of the service at a stable level (#1216) (Rennbon)
    • 15262ec Warn about unsafe ServeFile usage (#1228) (Erik Dubbelboer)
    • 1116d03 Fix panic while reading invalid trailers (Erik Dubbelboer)
    • 856ca8e Update dependencies (#1230) (Mikhail Faraponov)
    • 6b5bc7b Add windows support to normalizePath (Erik Dubbelboer)
    • f0b0cfe Don't log ErrBadTrailer by default (Erik Dubbelboer)
    • 6937fee fix: (useless check), skip Response body if http method HEAD (#1224) (Pavel Burak)
    • b85d2a2 Fix http proxy behavior (#1221) (Aoang)
    • ad8a07a RequestHeader support set no default ContentType (#1218) (Jack.Ju)
    • c94581c support configure HostClient (#1214) (lin longhjui)
    • 632e222 Client examples (#1208) (Sergey Ponomarev)
    • 6a3cc23 uri_test.go use example.com for clearness (#1212) (Sergey Ponomarev)
    • 9d665e0 Update dependencies (#1204) (Mikhail Faraponov)
    • 8d7953e Fix scheme check for not yet parsed requests (#1203) (ArminBTVS)

    v1.33.0

    • 61aa8b1 remove redundant code (#1202) (tyltr)
    • 4369776 fix(hijack): reuse RequestCtx (#1201) (Sergio VS)
    • 2aca3e8 fix(hijack): reset userValues after hijack handler execution (#1199) (Sergio VS)
    • 9123060 Updated dependencies (#1194) (Mikhail Faraponov)

    v1.32.0

    • 7eeb00e Make tests less flaky (#1189) (Erik Dubbelboer)
    • d19b872 Update tcpdialer.go (#1188) (Mikhail Faraponov)
    • c727b99 Release UseHostHeader in ReleaseRequest() (#1185) (Tolyar)
    • 6c0518b Fix UseHostHeader for DoTimeout + tests (#1184) (Tolyar)
    • 6b55811 Add MaxIdleWorkerDuration to Server. (#1183) (Kilos Liu)
    • 4517204 Allow to set Host header for Client (#1169) (Tolyar)
    • 258a4c1 fix: reset response after reset user values on keep-alive connections (#1176) (Sergio VS)
    • e9db537 Use %w to wrap errors (#1175) (Erik Dubbelboer)
    • 7db0597 Fix bad request trailer panic (Erik Dubbelboer)
    • 4aadf9a Fix parseTrailer panic (Erik Dubbelboer)
    • da7ff7a Add trailer support (#1165) (ichx)
    • 017f0aa fix: reset request after reset user values on keep-alive connections (#1162) (Sergio VS)
    • 3b117f8 feat: close idle connections when server shutdown (#1155) (ichx)
    • a94a2c3 Remove redundant code (#1154) (ichx)
    • f7c354c Fix race condition in Client.mCleaner (Erik Dubbelboer)
    • c078a9d Add string and bytes buffer convert trick in README (#1151) (ichx)
    • 3ff6aaa uri: isHttps() and isHttp() (#1150) (Sergey Ponomarev)
    • 8febad0 http.go: Request.SetURI() (Fix #1141) (#1148) (Sergey Ponomarev)
    • 2ca01c7 fix: Status Line parsing and writing (#1135) (Shivansh Vij)
    • 931d0a4 Fix lint (Erik Dubbelboer)
    • d613502 use sync.map is better (#1145) (halst)
    • c15e642 Don't run all race tests on windows (#1143) (Erik Dubbelboer)
    • 6006c87 chore (#1137) (tyltr)
    • 6d4db9b Fix race condition in getTCPAddrs (Erik Dubbelboer)

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(v3.0.0-RC.5)
  • v3.0.0-RC.5(Jun 30, 2021)

  • v3.0.0-RC.4(Nov 25, 2019)

    Feature

    • Support online js plugin (disable by default)
    • Support online management js plugin
    • Support listen https and cert per API
    • Rewrite URL rewrite module
    • Rewrite API match module

    Optimization

    • Copy on write instead of rwlock
    • Healthcheck using global http option

    Fix

    • #178 JS Plugin not effective
    • #126 Add default timeout for push metrics
    • #127 Successful or failure rate exceeds 100%
    • #131 Divide by 0
    • #132 Keepalive and Deadline bugs
    • #165 HTTP Header Normalizing
    • #168 Route matching error
    • Start too many goroutines for check connection pool
    • Quick start crash on multi net interface
    • Cluster missing all binded servers when remove binded server
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0-RC.3(Sep 12, 2019)

    Feature

    • Support online js plugin (disable by default)
    • Support online management js plugin
    • Support listen https and cert per API
    • Rewrite URL rewrite module
    • Rewrite API match module

    Optimization

    • Copy on write instead of rwlock
    • Healthcheck using global http option

    Fix

    • #126 Add default timeout for push metrics
    • #127 Successful or failure rate exceeds 100%
    • #131 Divide by 0
    • #132 Keepalive and Deadline bugs
    • #165 HTTP Header Normalizing
    • #168 Route matching error
    • Start too many goroutines for check connection pool
    • Quick start crash on multi net interface
    • Cluster missing all binded servers when remove binded server
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0-RC.2(Jun 26, 2019)

    Feature

    • Support online js plugin (disable by default)
    • Support online management js plugin
    • Support listen https and cert per API
    • Rewrite URL rewrite module
    • Rewrite API match module

    Optimization

    • Copy on write instead of rwlock
    • Healthcheck using global http option

    Fix

    • #126 Add default timeout for push metrics
    • #127 Successful or failure rate exceeds 100%
    • #131 Divide by 0
    • #132 Keepalive and Deadline bugs
    • Start too many goroutines for check connection pool
    • Quick start crash on multi net interface
    • Cluster missing all binded servers when remove binded server
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0-RC(May 16, 2019)

    Feature

    • Support online js plugin
    • Support online management js plugin
    • Rewrite URL rewrite module
    • Rewrite API match module

    Optimization

    • Copy on write instead of rwlock
    • Healthcheck using global http option

    Fix

    • #126 Add default timeout for push metrics
    • #127 Successful or failure rate exceeds 100%
    • #131 Divide by 0
    • #132 Keepalive and Deadline bugs
    • Start too many goroutines for check connection pool
    Source code(tar.gz)
    Source code(zip)
  • v2.9.0(Apr 4, 2019)

  • v2.8.0(Mar 23, 2019)

    Feature

    • Support for weighted polling load balancing
    • Support for etcd authentication

    Optimization

    • Dockerfile all in one
    • Docker image uses non-root user

    Fix

    • X-Forwarded-For header
    Source code(tar.gz)
    Source code(zip)
  • v2.7.1(Feb 26, 2019)

  • v2.7.0(Feb 1, 2019)

  • v2.6.1(Jan 12, 2019)

  • v2.6.0(Jan 10, 2019)

    新特性

    • 支持API级别的流控(优先级高于Server的配置)
    • 支持API级别的熔断(优先级高于Server的配置)

    优化

    • 调整日志输出
    • 更新文档

    修复

    • #115
    Source code(tar.gz)
    Source code(zip)
  • v2.6.0-RC(Jan 2, 2019)

    新特性

    • 支持API级别的流控(优先级高于Server的配置)
    • 支持API级别的熔断(优先级高于Server的配置)

    优化

    • 调整日志输出
    • 更新文档

    修复

    • #115
    Source code(tar.gz)
    Source code(zip)
  • v2.5.1(Dec 21, 2018)

  • v2.5.0(Dec 6, 2018)

    新特性

    • apiserver组件绑定官方WebUI
    • 增加backup在线备份
    • 增加更多的API相关的监控指标

    优化

    • 健康检查使用读锁,避免影响正常请求
    • 更新文档

    修复

    • routing下线后依然生效
    • UI删除Server没有解绑Cluster
    Source code(tar.gz)
    Source code(zip)
  • v2.5.0-RC.1(Nov 30, 2018)

    新特性

    • apiserver组件绑定官方WebUI
    • 增加backup在线备份
    • 增加更多的API相关的监控指标

    优化

    • 健康检查使用读锁,避免影响正常请求
    • 更新文档

    修复

    • routing下线后依然生效
    • UI删除Server没有解绑Cluster
    Source code(tar.gz)
    Source code(zip)
  • v2.5.0-RC(Nov 28, 2018)

    新特性

    • apiserver组件绑定官方WebUI
    • 增加backup在线备份
    • 增加更多的API相关的监控指标

    优化

    • 健康检查使用读锁,避免影响正常请求
    • 更新文档

    修复

    • routing下线后依然生效
    Source code(tar.gz)
    Source code(zip)
  • v2.5.0-beta(Nov 23, 2018)

  • v2.4.0(Aug 22, 2018)

    新特性

    • 支持websocket特性(试验,默认关闭,使用--websocket启用特性)(#92 )
    • 支持错误重试 (#90)
    • API增加TAG,便于分组检索 (#89)
    • 支持API级别的超时设置 (#94 )

    修复

    • #82

    优化

    • makefile,增加默认平台编译
    • 删除release.sh,统一使用makefile编译打包
    • 更新文档
    Source code(tar.gz)
    Source code(zip)
  • v2.3.0(Jul 23, 2018)

  • v2.2.0(Jul 2, 2018)

  • v2.1.1(Jun 5, 2018)

    新特性

    • 支持使用过滤器指定结果返回(#70)

    修复

    • #76
    • #77

    改进

    • 优化熔断器性能
    • 增加makefile
    • 减少docker镜像大小
    Source code(tar.gz)
    Source code(zip)
  • v2.1.1.beta(May 30, 2018)

    新特性

    • 支持使用过滤器指定结果返回(#70)

    修复

    • #76
    • #77

    改进

    • 优化熔断器性能
    • 增加makefile
    • 减少docker镜像大小
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(May 8, 2018)

    修复

    • 在一些场景下,content-type设置不准确
    • 在一些场景下,转发的请求head的host设置不正确
    • 当proxy个数为0的时候,程序异常崩溃
    • 在一些场景下返回码设置错误
    • #72
    • 对象池在一些场景下未正确释放

    新特性

    • 支持针对API的结果Cache
    • 支持PathValue作为路由和校验的参数取值
    • api server支持restful
    • 支持依赖转发聚合
    • 支持某一次转发的默认值

    改进

    • 更新docker的基础镜像
    • 更新Json库,对无schema的结构更友好
    • 性能提升30%
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0-RC.1(Apr 28, 2018)

  • v2.1.0-beta.3(Apr 24, 2018)

  • v2.1.0-beta.2(Apr 19, 2018)

  • v2.1.0-beta.1(Mar 27, 2018)

    Fix

    • 在一些场景下,content-type设置不准确
    • 在一些场景下,转发的请求head的host设置不正确
    • 当proxy个数为0的时候,程序异常崩溃

    改进

    • 更新docker的基础镜像
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Feb 5, 2018)

    2.0.0版本对于底层数据存储做了重构和优化,不再支持WEBUI,统一提供管理API。

    Changelog

    特性

    • 针对后端流量控制
    • 针对后端熔断
    • 针对后端健康检查
    • API聚合
    • API数据校验
    • API访问控制(黑白名单)
    • API路由
    • API流量复制
    • API可以指定认证插件,权限属性
    • 插件的扩展机制
    • 元数据管理API
    Source code(tar.gz)
    Source code(zip)
    gateway-2.0.0.tar.gz(7.88 MB)
  • v2.0.0-beta.1(Jan 22, 2018)

    v2.0.0-beta.1

    Bug Fix

    1. API的URL正则表达式编译失败,Proxy自动退出
    2. 流控参数设置问题,导致Token用完,每秒只产生一个Token
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0-beta(Jan 11, 2018)

Owner
null
A simple HTTP/HTTPS API Gateway in Golang.

mice A simple API Gateway in Golang. Installation: Using go install: First install Go, if not already there Set GOPATH and GOBIN if not already set as

Mike 7 May 19, 2022
A microservice gateway developed based on golang.With a variety of plug-ins which can be expanded by itself, plug and play. what's more,it can quickly help enterprises manage API services and improve the stability and security of API services.

Goku API gateway is a microservice gateway developed based on golang. It can achieve the purposes of high-performance HTTP API forwarding, multi tenant management, API access control, etc. it has a powerful custom plug-in system, which can be expanded by itself, and can quickly help enterprises manage API services and improve the stability and security of API services.

Eolink 378 Dec 29, 2022
This is a shopping basket workshop that shows how to use KrakenD API Gateway.

Go Restful Microservices and KrakenD API Gateway Workshop This is a shopping basket workshop that shows how to use KrakenD API Gateway. Consist of 5 m

Suat KÖSE 62 Jan 3, 2023
Test your API gateway routed lambdas locally and in CI

Lambo Test API Gateway wrapped lambda functions locally. Lambo can also be used to test API GW lambdas in CI without needing docker-in-docker. It will

Liam Galvin 8 Jun 22, 2022
a simple api gateway

鉴权网关 根据登录接口返回UIN判断是否登录/退出成功 自动添加跨域处理 会话重启即失效 TLS鉴权 负载均衡 随机 Config # 开启验证 enable_verify: false # 验证证书 ca_path: "./conf/ca.pem" module_cert_pem: "./conf

null 2 Feb 10, 2022
The Consul API Gateway is a dedicated ingress solution for intelligently routing traffic to applications running on a Consul Service Mesh.

The Consul API Gateway is a dedicated ingress solution for intelligently routing traffic to applications running on a Consul Service Mesh.

HashiCorp 86 Dec 14, 2022
A gateway to expose s3 standard API for any storage type.

s3-gateway this project is used to be compatible with any other storage type. there are tons of object storage services in the internat. However, many

xylon 0 Nov 28, 2021
TiDB Gateway

TiDB Gateway Building go build Running ./tidbgw Optionally set the address of PD and address to listen on via flags. Using Connect your MySQL client

Daniël van Eeden 3 Jul 15, 2022
Blue is a lightweight cloud-native gateway solution to handle millions of routing endpoints with a large number of connections.

Blue is a lightweight cloud-native gateway solution to handle millions of routing endpoints with a large number of connections.

null 456 Jan 19, 2022
Micro-serviço em Golang para processar pagamentos de um Gateway.

Go Payment Processor Projeto Este repositório contém um micro-serviço em Golang que faz parte de um conjunto de serviços necessário para o projeto do

Daniel Hessel 0 Dec 13, 2021
Cortex Gateway: a microservice which strives to help you administrating and operating your Cortex Cluster in multi tenant environments

Cortex Gateway Cortex Gateway is a microservice which strives to help you administrating and operating your Cortex Cluster in multi tenant environment

Delivery Hero SE 0 Jan 14, 2022
Search-gateway - Golang restfull Service

Search Gateway Specifications Gin framework Development PORT=3000 go run main.go

mahdi imani 1 Jan 25, 2022
Golang 微服务框架,支持 grpc/http,支持多种注册中心 etcd,consul,mdns 等

一个用于构建分布式系统的工具集或者轻框架,支持 grpc 和 http ,支持多种注册中心 consul ,etcd , mdns 等。

徐旭 26 Nov 30, 2022
A code generator that turns plain old Go services into RPC-enabled (micro)services with robust HTTP APIs.

Frodo is a code generator and runtime library that helps you write RPC-enabled (micro) services and APIs.

Monadic 22 Dec 16, 2022
gRPC to JSON proxy generator following the gRPC HTTP spec

The gRPC-Gateway is a plugin of the Google protocol buffers compiler protoc. It reads protobuf service definitions and generates a reverse-proxy server which translates a RESTful HTTP API into gRPC. This server is generated according to the google.api.http annotations in your service definitions.

gRPC Ecosystem 14.7k Jan 3, 2023
Fastglue is an opinionated, bare bones wrapper that glues together fasthttp and fasthttprouter to act as a micro HTTP framework.

fastglue Overview fastglue is an opinionated, bare bones wrapper that glues together fasthttp and fasthttprouter to act as a micro HTTP framework. It

Zerodha Technology 71 Jun 14, 2022
Solution & Framework for JSON-RPC over HTTP

JROH Solution & Framework for JSON-RPC over HTTP Why not OpenAPI? OpenAPI addresses the definition of RESTful APIs, when it comes to JSON-RPCs, some i

Go Toolkit 11 Mar 13, 2022
Fast HTTP microservice written in Go for high-level image processing backed by bimg and libvips.

imaginary Fast HTTP microservice written in Go for high-level image processing backed by bimg and libvips. imaginary can be used as private or public

null 0 Nov 23, 2021
The service processes HTTP requests to create, get, update some data

portal This generated README.md file loosely follows a popular template. One paragraph of project description goes here. Getting Started These instruc

Hamlet Avetikyan 0 Dec 24, 2021