全部产品

SOFARPC 客户端接入(仅专有云)

更新时间:2020-10-22 11:23:38

本文适用于订阅方使用 SOFARPC 作为客户端接入 API 网关。

前置条件

在进行本地订阅方应用开发、接入网关前,需要确保已经完成以下操作:

  • 已在 API 网关控制台创建了一个应用,参见 创建应用
  • 已将该应用的 APPID 提供给了 API 发布者,并获得了授权,参见 授权 API
  • 已获取了如下服务配置信息。具体获取方法,参见 获取服务端信息
    • 应用的访问密钥(Access Key/Secret Key)
    • API 的域名地址(host)、接口名称(interface)、方法(method)等

操作步骤

跟进 API 后端服务系统协议类型的不同,SOFARPC 订阅方接入步骤也有所不同。

SOFARPC/SOFAREST

在 API 的后端服务系统协议为 SOFARPC/SOFAREST 时,其网络拓扑如下图所示:

网络拓扑

API 服务示例

假设服务端发布了如下 SOFARPC 或 SOFAREST 服务,且已在 API 网关控制台上完成了相应 API 配置。

  1. package com.alipay.gateway.serverdemo.service
  2. public interface HelloService {
  3. public String sayHello();
  4. }

API 调用示例

根据上述 API 服务示例,客户端可以使用标准的 SOFARPC reference 编码方式进行调用,只需添加几个特殊的网关参数即可。

  1. application-properties 文件中,添加以下配置:
    1. # 走网关寻址
    2. com.alipay.sofa.rpc.registries.gateway=gateway://${acvip}:80
  2. 引入服务端提供的 facade 包。
  3. 根据上文 前置条件 中获取的 API 服务端信息,修改 reference 方式,示例如下:
    1. <sofa:reference jvm-first="false" id="helloService"
    2. interface="com.alipay.gateway.serverdemo.service.HelloService">
    3. <sofa:binding.bolt>
    4. <sofa:global-attrs connect.timeout="10000" registry="gateway"/>
    5. <sofa:parameter key="gateway.host" value="eq1ejclxfgde5j7p.cloud.58dev.alipay.net"/>
    6. //开启数据加密后,在调用请阅的 API 时必须传入应用的 AK 和 SK 完成加签。
    7. <sofa:parameter key="gateway.ak" value="NbpzogN60sKoQs6p"/>
    8. <sofa:parameter key="gateway.sk" value="qPMF34KZ3ja2hSpRnzB6xQwatDxJijYK"/>
    9. </sofa:binding.bolt>
    10. </sofa:reference>
  4. 调用 HelloService。

    1. public class Client {
    2. @Autowire
    3. private HelloService helloService;
    4. // use helloService
    5. }

HTTP

在 API 的后端服务系统协议为 HTTP 时,其网络拓扑如下图所示:

HTTP

与 SOFARPC 和 SOFAREST 不同的是,一般 HTTP 服务的服务端不会提供 facade 包,但是使用 SOFARPC 调用需要一个 interface,所以客户端需要自行构造这个 interface。

API 服务示例

假设服务端是一个 SpringMVC 接口,如下所示:

  1. package com.alipay.gateway.serverdemo.controller
  2. // 服务端提供一个 /hello/world 服务
  3. @RestController
  4. @RequestMapping("/hello")
  5. public class SpringController {
  6. @RequestMapping("/world")
  7. public String Hello() {
  8. return "world";
  9. }
  10. }

API 服务提供者在 API 网关控制台完成了相应的 API 配置,如下图所示。
API 示例

API 调用示例

根据上述 API 服务示例,服务提供者要求客户端通过 com.alipay.gateway.client.service.HelloSpirngMVC.hello() 的方式来调用服务端提供的 HTTP 接口。

此时,客户端需要按照如下步骤进行编码配置:

  1. application-properties 文件中,添加以下配置:
    1. # 走网关寻址
    2. com.alipay.sofa.rpc.registries.gateway=gateway://${acvip}:80
  2. 构造 interface,示例如下:

    1. package com.alipay.gateway.client.service
    2. // client 使用 HelloSpirngMVC.Hello 来访问服务端的 /hello/world 服务
    3. public interface HelloSpirngMVC {
    4. String hello();
    5. }
  3. 根据上文 前置条件 中获取的 API 服务端信息,修改 reference 方式,示例如下:
    1. <sofa:reference jvm-first="false" id="helloSpirngMVC"
    2. interface="com.alipay.gateway.client.service.HelloSpirngMVC">
    3. <sofa:binding.bolt>
    4. <sofa:global-attrs connect.timeout="10000" registry="gateway"/>
    5. <sofa:parameter key="gateway.host" value="eq1ejclxfgde5j7p.cloud.58dev.alipay.net"/>
    6. <sofa:parameter key="gateway.ak" value="NbpzogN60sKoQs6p"/>
    7. <sofa:parameter key="gateway.sk" value="qPMF34KZ3ja2hSpRnzB6xQwatDxJijYK"/>
    8. </sofa:binding.bolt>
    9. </sofa:reference>
  4. 调用 HelloSpirngMVC。

    1. public class Client {
    2. @Autowire
    3. private HelloSpirngMVC helloSpirngMVC;
    4. // use helloSpirngMVC
    5. }