手记

Micro (2)

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


0人推荐
随时随地看视频
慕课网APP