在Micro (2)中讲到定义服务以及服务端和客户端的实现,并没有提到如何提供API接口,Micro框架通过micro api来提供API服务,micro api是micro微服务的API网关。
默认监听8080端口,动态独有请求到相应的后端service。内部使用了go-micro框架,我们也可以很方便把服务发现从consul切换到其他的服务发现,比如 kubernetes API 或者RPC for gRPC。
micro api有两种形式来访问服务中的http api:
/[service]/[method] # 通过http path来指定调用的service
/rpc # 在http body中提供service和method来指定调用的service
Http Handler
micro api提供下面4种方式来定义http api:
Endpoint Metadata
- 默认的Handler,如果找不到匹配的路由,将使用API Handler。 - Request/Response: 在proto中自行定义Request/Response类型 - 注册Handler方法调用需要提供Endpoint,如下:
RegisterExampleHandler(service.Server(), new(Example), api.WithEndpoint(&api.Endpoint{ // The RPC method Name: "Example.Call", // The HTTP paths. This can be a POSIX regex Path: []string{"/example"}, // The HTTP Methods for this endpoint Method: []string{"POST"}, // The API handler to use Handler: api.Rpc, }))
- 启动API Gateway命令, `micro api`
API Handler
- Request/Response: Service方法定义参数类型为api.Request/api.Response, 定义proto消息时使用,需在proto文件中导入定义,`import "github.com/micro/go-api/proto/api.proto";` - http path用来解析service和method - 请求处理的API Service参数使用的类型是api.Request和api.Response - 请求和相应的content-type可以是任何类型 - 如果找不到匹配的service将返回404- 启动API Gateway命令, `micro api --handler=api`
RPC Handler
- Request/Response: 在proto中自行定义Request/Response类型, - 对默认的Handler的可选处理是使用go-micro Client转发请求体作为RPC请求 - 允许API Handler定义混用Golang的类型 - 除了提供API Service还可以提供Backend Service - 支持的content-type: application/json和application/protobuf - 启动API Gateway命令, `micro api --handler=rpc`
Reverse Proxy
- Request/Response: http, 即使用Golang方式定义Handler方法,参数类型http.Request/http.ResponseWriter。 - 根据http path中第一个来反向代理请求 - 允许API以REST风格来实现 - 启动API Gateway命令, `micro api --handler=proxy`
作者:zouqilin
链接:https://www.jianshu.com/p/97157e088566