HTTP API Gateway

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

  • 访问不了ui了

    访问不了ui了

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

  • 请问如何使用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的示例,谢谢!

  • 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文件夹依赖呆导致的?感谢你的开源与帮助)

  • 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

  • 如何配置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拷了出来启动, 问题依旧. 请问如何解决?

  • 健康检查失败后,没有将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秒

  • 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)
    	}
    }()
    
  • 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

  • 压测存在500的报错

    压测存在500的报错

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

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

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

  • 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

  • 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, 实际上匹配不了

  • 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还是有什么参数?

  • 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.

A simple HTTP/HTTPS API Gateway in Golang.
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

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.
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.

Dec 29, 2022
This is a shopping basket workshop that shows how to use KrakenD API Gateway.
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

Jan 3, 2023
Test your API gateway routed lambdas locally and in CI
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

Jun 22, 2022
a simple api gateway

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

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.

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

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

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.

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

Jan 19, 2022
Micro-serviço em Golang para processar pagamentos de um Gateway.
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

Dec 13, 2021
Cortex Gateway: a microservice which strives to help you administrating and operating your Cortex Cluster in multi tenant environments
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

Jan 14, 2022
Search-gateway - Golang restfull Service

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

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

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

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.

Dec 16, 2022
gRPC to JSON proxy generator following the gRPC HTTP spec
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.

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

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

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

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

Dec 24, 2021