Micro API

未匹配的标注
本文档最新版为 3.x,旧版本可能放弃维护,推荐阅读最新版!

Micro API 是微服务的 API 网关. 使用 API 网关模式 为您的服务提供一个入口点. micro api 提供 HTTP 并动态路由到适当的后端服务.

如何工作

micro api 构建在 go-micro 上, 利用它进行服务发现, 负载平衡, 编码和基于 RPC 的通信. 对 API 的请求通过 HTTP 提供, 并通过 RPC 进行内部路由.

由于 micro api 在内部使用 go-micro, 因此它也支持插件, 因此可以随时切换为 kubernetes api 的 consul 服务发现或 gRPC.

API

micro api 提供了以下 HTTP API

- /[service]/[method]    # HTTP paths are dynamically mapped to services
- /rpc            # Explicitly call a backend service by name and method

见下面的例子

Handler

Handler 是管理请求路由的 HTTP 处理程序.

默认 Handler 使用注册表中的端点元数据来确定服务路由. 如果未找到所匹配的路由, 它将回退到 API 处理程序. 您可以使用 go-api 配置注册路由.

该 API 有三种可配置的请求 Handler.

  1. API Handler:/[service]/[method]

    • 请求/响应: api.Request/api.Response
    • 该路径用于解析服务和方法
    • 请求通过API服务处理,API服务采用请求api.Request和响应api.Response类型
    • 请求/响应的定义可以在go-api/proto中找到
    • 请求/响应主体的内容类型可以是任何东西
    • 路由不可用的默认回退处理程序
    • 通过--handler=api设置
  2. RPC Handler:/[service]/[method]

    • 请求/响应:json/protobuf
    • 使用go-micro客户端将请求主体转发为RPC请求的默认处理程序的替代方案
    • 允许使用具体的Go类型定义API处理程序。
    • 在不需要完全控制标题或请求/响应的情况下很有用
    • 可以用来运行单层后端服务,而不是其他API服务
    • 支持的内容类型application/jsonapplication/protobuf
    • 通过--handler=rpc设置
  3. 反向代理:/[service]

    • 请求/响应:http
    • 该请求经过反向代理到服务的路径的第一个处理
    • 这允许REST在API后面实现
    • 通过--handler=proxy设置
  4. Event Handler:/[topic]/[event]

    • 异步处理程序向消息代理发布请求作为事件
    • 请求被格式化为go-api/proto.Event
    • 通过 --handler=event 进行设置

或者使用 /rpc 端口直接与任何服务通话 - 期望参数: service, method, request, 可选参数 address, 以指定特定主机.

curl -d 'service=go.micro.srv.greeter'
    -d 'method=Say.Hello'
    -d 'request={"name": "Bob"}'
    http://localhost:8080/rpc

可以在这里找到示例代码 github.com/micro/examples/api.

API Handler 请求/响应原型

API Handler 是一个默认处理原型, 服务也是基于该原型使用特定的请求和响应处理, 可在 go-api/proto 中获得. 这允许 micro api 将 HTTP 请求解析为 RPC 并返回到 HTTP.

入门

安装

go get github.com/micro/micro

运行

micro api

通过 ACME 加密

通过使用 letsencrypt 的 ACME, 提供默认安全服务

micro --enable_acme api

可以指定一个主机白名单

micro --enable_acme --acme_hosts=example.com,api.example.com api

提供安全的 TLS

该 API 支持使用 TLS 证书安全地提供服务

micro --enable_tls --tls_cert_file=/path/to/cert --tls_key_file=/path/to/key api

设置命名空间

API 默认为服务名称空间 go.micro.api. 命名空间和请求路径的组合用于解析发送查询的 API 服务和方法.

micro api --namespace=com.example.api

例子

这里我们有一个3层架构的例子

  • micro api (localhost:8080) - 作为http入口点
  • api服务 (go.micro.api.greeter) - 为面向公众提供服务
  • 后端服务 (go.micro.srv.greeter) - 内部范围服务

完整的代码示例在 这里

运行示例

先决条件: 确保您已启动服务发现, 例如 consul agent -dev

获取示例

git clone https://github.com/micro/examples

启动服务 go.micro.srv.greeter

go run examples/greeter/srv/main.go

启动 API 服务 go.micro.api.greeter

go run examples/greeter/api/api.go

开始 Micro API

micro api

查询

通过 micro API 进行 HTTP 调用

curl "http://localhost:8080/greeter/say/hello?name=Asim+Aslam"

HTTP path/greeter/say/hello 映射到服务 go.micro.api.greeter 方法 Say.Hello

绕过 api 服务并通过 /rpc 直接调用后端

curl -d 'service=go.micro.srv.greeter'
    -d 'method=Say.Hello'
    -d 'request={"name": "Asim Aslam"}'
    http://localhost:8080/rpc

与 JSON 完全相同的调用

$ curl -H 'Content-Type: application/json'
    -d '{"service": "go.micro.srv.greeter", "method": "Say.Hello", "request": {"name": "Asim Aslam"}}'
    http://localhost:8080/rpc

请求映射

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

micro --enable_stats api

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
taadis
讨论数量: 0
发起讨论 只看当前版本


暂无话题~