API
micro api是微服务的API网关。使用API网关模式为您的服务提供一个入口点。 micro api提供HTTP并动态路由到适当的后端服务。
如何工作的
micro api构建在go-micro上,利用它进行服务发现,负载平衡,编码和基于RPC的通信。对API的请求通过HTTP提供,并通过RPC进行内部路由。
由于micro api在内部使用go-micro,因此它也支持插件,因此可以随时切换为kubernetes api的consul服务发现或gRPC的RPC。
API
micro api提供了以下HTTP API
见下面的例子
Handler
Handler是管理请求路由的HTTP处理程序。
默认Handler使用注册表中的端口元数据来确定服务路由。如果未找到所匹配的路由,它将回退到API处理程序。您可以使用go-api配置注册路由。
该API有三种可配置的请求Handler。
API Handler:
/[service]/[method]
请求/响应:
api.Request/api.Response
该路径用于解析服务和方法
请求通过API服务处理,API服务采用请求
api.Request
和响应api.Response
类型请求/响应的定义可以在go-api/proto中找到
请求/响应主体的内容类型可以是任何东西
路由不可用的默认回退处理程序
通过
--handler=api
设置
RPC Handler:
/[service]/[method]
请求/响应:
json/protobuf
使用go-micro客户端将请求主体转发为RPC请求的默认处理程序的替代方案
允许使用具体的Go类型定义API处理程序。
在不需要完全控制标题或请求/响应的情况下很有用
可以用来运行单层后端服务,而不是其他API服务
支持的内容类型
application/json
和application/protobuf
通过
--handler=rpc
设置
反向代理:
/[service]
请求/响应:http
该请求经过反向代理到服务的路径的第一个处理
这允许REST在API后面实现
通过
--handler=proxy
设置
Event Handler:
/[topic]/[event]
异步处理程序向消息代理发布请求作为事件
请求被格式化为go-api/proto.Event
通过
--handler=event
进行设置
或者,使用/rpc
端口直接与任何服务通话 - 期望参数:service
,method
,request
,可选接受address
,以指定特定主机。
在github.com/micro/examples/api中查找工作示例。
API Handler 请求/响应原型
API Handler是一个默认处理原型,服务也是基于该原型使用特定的请求和响应处理,可在go-api/proto中获得。这允许micro api将HTTP请求解析为RPC并返回到HTTP。
入门
安装
运行
通过ACME加密
通过使用letsencrypt的ACME,提供默认安全服务
可以指定一个主机白名单
提供安全的TLS
该API支持使用TLS证书安全地提供服务
设置命名空间
该API默认为服务名称空间go.micro.api
。命名空间和请求路径的组合用于解析发送查询的API服务和方法。
例子
这里我们有一个3层架构的例子
micro api(localhost:8080) - 作为http入口点
api服务(go.micro.api.greeter) - 为面向公众提供服务
后端服务(go.micro.srv.greeter) - 内部范围服务
完整的工作示例在这里
运行示例
先决条件:确保您正在运行服务发现,例如consul agent -dev
获取示例
启动服务go.micro.srv.greeter
启动API服务go.micro.api.greeter
开始 Micro API
查询
通过micro API进行HTTP调用
HTTP path/greeter/say/hello
映射到服务 go.micro.api.greeter
方法Say.Hello
绕过api服务并通过/rpc
直接调用后端
与JSON完全相同的调用
请求映射
Micro使用固定的命名空间和HTTP路径动态地路由到服务。
这些服务的默认命名空间是go.micro.api
,但可以通过--namespace
标志设置命名空间。
每个服务的API
我们提倡为面向公众的流量创建每个后端服务的API服务模式。这在逻辑上将服务API前端和后端服务的分开。
RPC映射
URLs映射如下:
Path | Service | Method |
/foo/bar | go.micro.api.foo | Foo.Bar |
/foo/bar/baz | go.micro.api.foo | Bar.Baz |
/foo/bar/baz/cat | go.micro.api.foo.bar | Baz.Cat |
版本化的API URL可以很容易地映射到服务名称:
Path | Service | Method |
/foo/bar | go.micro.api.foo | Foo.Bar |
/v1/foo/bar | go.micro.api.v1.foo | Foo.Bar |
/v1/foo/bar/baz | go.micro.api.v1.foo | Bar.Baz |
/v2/foo/bar | go.micro.api.v2.foo | Foo.Bar |
/v2/foo/bar/baz | go.micro.api.v2.foo | Bar.Baz |
REST映射
您可以使用API作为反向代理并使用诸如go-restful之类的库实现RESTful路径,从而为RESTful API提供服务。REST API服务的一个例子可以在greeter/api/rest找到。
使用--handler=proxy
运行micro API会将代理请求反转为API名称空间内的服务。
Path | Service | Service Path |
/foo/bar | go.micro.api.foo | /foo/bar |
/greeter | go.micro.api.greeter | /greeter |
/greeter/:name | go.micro.api.greeter | /greeter/:name |
使用这个处理程序意味着直接与后端服务通话,忽略任何go-micro传输插件。
统计仪表板
通过--enable_stats
标志启用统计信息显示板。它将暴露在/stats
上。
Last updated