全部产品

SOFARPC 转 HTTP 入门(仅专有云)

更新时间:2020-09-01 19:27:10

本文介绍如何快速创建并发布一个 SOFARPC API 类型的 API 服务,通过 API 网关进行协议转换,使用 HTTP 协议将请求转发到后端业务系统集群。

操作步骤

说明:建议您先参见 快速入门概述,了解 API 网关的角色及完整使用流程。

SOFARPC 转 HTTP 入门

  1. API 发布者编写 HTTP Server
  2. API 发布者创建系统集群
  3. API 发布者创建 API 分组
  4. API 发布者创建并发布 SOFARPC API
  5. API 订阅者创建应用
  6. API 发布者创建授权对象
  7. API 发布者绑定授权对象
  8. API 订阅者编写 API 调用代码

示例工程

为方便快速开发体验 API 网关 SOFARPC 转 HTTP 协议的 API 服务,您可以点击此处下载本文涉及的 示例工程

步骤一:编写 HTTP Server

为方便快速体验 API 网关 API 服务发布与调用,此处编写一个简单的 Spring Boot Server。

说明:不使用后端集群认证功能时,API 网关对 HTTP Server 无要求。如需网关和服务端之间的双向认证,则需要接入网关 SDK。目前仅提供 JAVA SDK。详见 编写 HTTP API

  1. @RestController
  2. public class HelloController {
  3. @RequestMapping("/hello/world")
  4. public String hello() {
  5. Map<String, String> m = new HashMap<>();
  6. m.put("hello", "world");
  7. return JSON.toJSONString(m);
  8. }
  9. }

进行本地测试,示例如下:

  1. curl 127.0.0.1:8080/hello/world
  2. {"hello":"world"}

编写完成后,将服务部署在 API 网关可以访问到的服务器上,启动该 server。

步骤二:创建系统集群

  1. 进入 API 网关控制台页面,左侧导航栏选择 API 发布 > 系统集群
  2. 在系统集群列表页面,点击右上方的 创建系统集群 按钮。
  3. 在新弹出窗口中,您需要配置以下信息:
    • 系统集群名称:必填,用于识别系统集群。本示例使用 http-server
    • 协议类型:支持 HTTP、SOFARPC、MRPC。根据本示例,需选择 HTTP
    • 地址配置方式:选择 手动配置,即手动配置系统集群的 IP 地址或域名。
    • IP地址/域名:格式为 地址:端口。本示例中,IP 地址为 http://30.52.100.19,端口号为 8080
      • IP 地址或域名:
        • IP 地址格式为 (1~255).(0~255).(0~255).(0~255)
        • 域名可以包含字母、数字或者半角的连接符 “-“,总共不超过255 个字符。
        • 域名必须以 http://https:// 开头。
      • 端口:HTTP 默认端口为 80。端口号范围为 1-65535。
    • 认证方式:即网关向后端系统集群发送请求时是否加签。本示例,不使用认证功能,选择

      说明:如需使用认证功能,在步骤一编写 HTTP Server、本地 API 服务开发时需要接入网关 SDK。详见 编写 HTTP API

    • 描述:用于描述系统集群的作用等,64 个字符以内,可为空。
      创建系统集群
  4. 点击 确定

步骤三:创建 API 分组

  1. 进入 API 网关控制台页面,左侧导航栏中选择 API 发布 > API 分组,进入分组列表。
  2. 点击 API 分组列表右上方的 创建分组 按钮。
  3. 在新弹出窗口中,输入 API 分组信息:
    • 分组名称:必填,用于识别 API 分组。支持英文字母、中文、数字、_、-,32 个字符以内。本示例使用 http-group
    • 描述:选填,用于描述 API 分组的作用等,64 个字符以内,可为空。
      创建 API 分组
  4. 点击 确定

步骤四:创建并发布 SOFARPC API

  1. 进入 API 网关控制台 > API 发布 > API 管理 页面,点击 API 列表右上方的 创建 API
  2. 在新页面中,选择 SOFARPC API(协议转换)类型,点击 创建
  3. 定义 API 步骤中,您需要配置以下信息:
    • 所属分组:必选,用于将 API 进行逻辑的分组。本示例选择上一步刚刚创建的 API 分组 http-group
    • API 名称:必填,用于识别 API,支持英文字母、中文、数字、_、-,32 个字符以内。本示例使用 sofa-http
    • 描述:选填,用于描述 API 的作用等,64 个字符以内。
    • 接口名称:必填,支持英文字母、数字、. 、: 、@,以小写字母作为开头。本示例使用 com.alipay.gateway.RpcToHttpService:1.0@DEFAULT
    • 方法名:支持英文字母、数字组成,以小写字母作为开头。本示例使用 hello

      注意:客户端是 SOFARPC 时,需要使用 interface 进行调用。但是 SpringMVC 等 HTTP 接口没有 interface,所以需要客户端自行编写一个 interface。因此,此处配置的接口名称以及方法名是需要客户端自行编写 interface 的。

    • 报文类型:必选,选择 application/json
    • 安全认证:必选。本示例选择 密钥认证,即表示订阅应用访问授权的 API 时使用密钥进行身份认证。
    • 请求参数:可选,详见 API 属性说明 > 请求参数
  4. 点击 下一步,进行后端配置:
    • 后端服务类型:选择 系统集群,表示网关接收到前端请求后转发到真实业务系统的集群。
    • 协议类型:必选,表示网关接收到请求后转发给的后端服务使用的通信协议类型。本示例选择 HTTP
    • 请求路径:API 请求所指向的资源 URL。以斜杠 / 开头,支持字母、数字、 - 、_,200字符以内。本示例使用 /hello/world
    • 超时时间:必填,API 请求超时时间,单位为毫秒(ms),保持默认 3000ms 即可。
    • 路由策略:必选,表示当网关接收到语法后使用的路由策略。本示例使用 根据请求路径路由
    • 系统集群:必选。本示例选择步骤二创建的系统集群,即 http-server
  5. 点击 创建
    创建并发布 SOFARPC API

步骤五:创建应用

  1. 进入 API 网关控制台 > API 订阅 > 应用管理 页,点击列表右上方的 创建应用
  2. 创建应用 窗口,选择 应用类型应用
  3. 输入 应用名称,用于识别应用。本例使用 sofa-to-http
    sofa-to-http 应用
  4. 点击 确定

应用添加完成后,订阅者需在应用详情页,获取该应用 APPID。获取 APPID 后,需将 APPID 提供给想要订阅的 API 的发布者,获得该 API 的访问授权。

步骤六:创建授权对象

  1. 进入 API 网关控制台 > API 发布 > 授权管理 页,点击列表右上方的 创建授权对象
  2. 创建授权对象 窗口中,配置订阅方应用的授权信息。
    • 应用来源:必选。此处选 内部系统 即可,表示授权给当前租户的当前环境下的应用订阅。
    • 应用名称:输入步骤五创建的应用名称,如 sofa-to-http,系统会自动获取其 APPID 与类型。
    • 所属公司/部门:用于识别应用所属的公司或部门,可为空。
    • 描述:输入对该授权对象的备注信息,可为空。
      创建授权对象
  3. 点击 确定

步骤七:绑定授权对象

  1. API 管理 页面,找到待订阅 API,进入其详情页。
  2. 授权对象 标签页下,点击 绑定授权对象
  3. 添加授权对象 窗口中,找到步骤六创建的授权应用。
    绑定授权对象
  4. 勾选该应用,点击 确定,完成 API 授权。

步骤八:编写 API 调用代码

  1. 获取如下服务配置信息:
    • 在订阅方应用详情页获取该应用的密钥(Access Key/Secret Key)。
      应用的密钥
    • 在 API 详情页获取该 API 分组 ID(host)、接口名称(interface)与方法名(method)。
      信息
  2. 编写接口,示例如下:

    1. package com.alipay.gateway;
    2. public interface RpcToHttpService {
    3. Object hello();
    4. }
    5. // 需要注意:hello 方法会转发到 /hello/world,所以请求参数和返回值要和 http 接口的入参、返回值对应
  3. 根据获取的 API 服务信息,修改 sofareference 方法,示例如下:
    1. <sofa:reference id= "rpcToHttpService" interface="com.alipay.gateway.RpcToHttpService" >
    2. <sofa:binding.bolt>
    3. <sofa:global-attrs connect.timeout="10000" registry="gateway"/>
    4. <sofa:parameter key="gateway.host" value="3m9pgx5sw6qnjkea"/>
    5. <sofa:parameter key="gateway.ak" value="2hYxUDMR7Wfuen4X"/>
    6. <sofa:parameter key="gateway.sk" value="EKIHYLPpI6s8so2FwfdGsq3TwfLPd2J5"/>
    7. </sofa:binding.bolt>
    8. </sofa:reference>
  4. 使用标准的 SOFARPC 方式进行调用,示例如下:

    1. public class SofaRpcToHttpServiceTest extends AbstractTestBase {
    2. @Autowired
    3. private RpcToHttpService rpcToHttpService;
    4. @Override
    5. public void childSetUp() {
    6. }
    7. @Test
    8. public void test(){
    9. System.out.println(JSON.toJSONString(rpcToHttpService.hello()));
    10. }
    11. }
  5. 发起调用后,可得出如下结果:
    1. {"hello":"world"}

相关链接