美文网首页Go - Micro微服务
Go - Micro微服务框架实践 - API(五)

Go - Micro微服务框架实践 - API(五)

作者: 承诺一时的华丽 | 来源:发表于2018-12-18 09:54 被阅读14次

    micro api是api网关

    使用API​​网关模式为您的服务提供单个公共入口点。micro api服务于HTTP并使用服务发现动态路由。

    image

    概观

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

    因为micro api在内部使用go-micro,所以这也使它可以插拔。请参阅go-plugins以获得对gRPC,kubernetes,etcd,nats,rabbitmq等的支持。此外,它还使用了go-api,它也允许配置处理程序。

    安装

    go get -u github.com/micro/micro
    

    # Default port 8080
    micro api
    

    使用ACME

    默认使用ACME通过Let's Encrypt进行安全服务

    MICRO_ENABLE_ACME=true micro api
    

    (可选)指定主机白名单

    MICRO_ENABLE_ACME=true \
    MICRO_ACME_HOSTS=example.com,api.example.com \
    micro api
    

    设置TLS证书

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

    MICRO_ENABLE_TLS=true \
    MICRO_TLS_CERT_FILE=/path/to/cert \
    MICRO_TLS_KEY_FILE=/path/to/key \
    micro api
    

    设置命名空间

    API利用命名空间在逻辑上分离后端和面向公众的服务。命名空间和http路径用于解析服务名称/方法,例如GET /foo HTTP/1.1路由到服务名称go.micro.api.foo

    默认命名空间是,go.micro.api并且可以像这样更改

    MICRO_NAMESPACE=com.example.api micro api
    

    例子

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

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

    完整的例子是examples / greeter

    运行示例

    先决条件:我们默认使用consul进行服务发现,以确保其安装和运行,例如consul agent -dev

    # Download example
    git clone https://github.com/micro/examples
    
    # Start the service
    go run examples/greeter/srv/main.go
    
    # Start the API
    go run examples/greeter/api/api.go
    
    # Start the micro api
    micro api
    

    询问

    通过micro api进行HTTP调用

    curl "http://localhost:8080/greeter/say/hello?name=John"
    

    HTTP路径/ 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": "John"}' \
         http://localhost:8080/rpc
    

    与JSON完全相同的调用

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

    API

    micro api提供以下HTTP API

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

    请参阅下面的示例

    处理程序

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

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

    API具有以下可配置的请求处理程序。

    • api - 处理任何HTTP请求。通过RPC完全控制http请求/响应。
    • rpc - 处理json和protobuf POST请求。转发为RPC。
    • proxy - 将HTTP和转发作为反向代理处理。
    • event - 处理任何HTTP请求并发布到消息总线。
    • web - HTTP反向代理,包括Web套接字。

    (可选)绕过/rpc端点处理程序

    API处理程序

    API处理程序为任何HTTP请求提供服务,并作为具有特定格式的RPC请求转发。

    • 内容类型:任何
    • 身体:任何
    • 转发格式:api.Request / api.Response
    • 路径: /[service]/[method]
    • 解析器:路径用于解析服务和方法
    • 配置:Flag --handler=api或env varMICRO_API_HANDLER=api

    RPC处理程序

    RPC处理程序提供json或protobuf HTTP POST请求并作为RPC请求转发。

    • 内容类型:application/jsonapplication/protobuf
    • 正文:JSON或Protobuf
    • 转发格式:基于内容的json-rpc或proto-rpc
    • 路径: /[service]/[method]
    • 解析器:路径用于解析服务和方法
    • 配置:Flag --handler=rpc或env varMICRO_API_HANDLER=rpc
    • 未指定处理程序时的默认处理程序

    代理处理程序

    代理处理程序是具有内置服务发现的http保留代理。

    • 内容类型:任何
    • 身体:任何
    • 转发格式:HTTP反向代理
    • 路径: /[service]
    • 解析器:路径用于解析服务名称
    • 配置:Flag --handler=proxy或env varMICRO_API_HANDLER=proxy
    • REST可以作为微服务在API后面实现

    事件处理程序

    事件处理程序为HTTP提供服务,并使用go-micro代理通过消息总线将请求作为消息转发。

    • 内容类型:任何
    • 身体:任何
    • 转发格式:请求格式为go-api / proto.Event
    • 路径: /[topic]/[event]
    • 解析器:路径用于解析主题和事件名称
    • 配置:Flag --handler=event或env varMICRO_API_HANDLER=event

    Web处理程序

    Web处理程序是一个http保留代理,具有内置服务发现和Web套接字支持。

    • 内容类型:任何
    • 身体:任何
    • 转发格式:HTTP反向代理,包括Web套接字
    • 路径: /[service]
    • 解析器:路径用于解析服务名称
    • 配置:Flag --handler=web或env varMICRO_API_HANDLER=web

    RPC端点

    / 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中查找工作示例

    分解器

    Micro使用命名空间值和HTTP路径动态路由到服务。

    默认命名空间是go.micro.api。通过--namespace或设置名称空间MICRO_NAMESPACE=

    使用的旋转变压器如下所述。

    RPC解析器

    RPC服务有一个名称(go.micro.api.greeter)和一个方法(Greeter.Hello)。
    URL解析如下:

    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

    代理解析器

    使用代理处理程序,我们只需要处理解析服务名称。所以分辨率与RPC解析器略有不同。
    URLS解析如下:

    Path Service Service Path
    /foo go.micro.api.foo /foo
    /foo/bar go.micro.api.foo /foo/bar
    /greeter go.micro.api.greeter /greeter
    /greeter/:name go.micro.api.greeter /greeter/:name

    相关文章

      网友评论

        本文标题:Go - Micro微服务框架实践 - API(五)

        本文链接:https://www.haomeiwen.com/subject/aqdkkqtx.html