目标

通过本章节介绍可以让业务应用开发者能在API套件市场中找到符合业务需求的协议接口,并通过协议接口模型的定义信息明确相关参数及返回结果等,以此来达成业务应用的落地实现。

前置条件

  • 拥有开发者账号

  • 已完成业务套件创建、工程创建或已完成团队成员建设

申请API权限

操作示例

1. 使用工程成员的用户(创建工程的人或工程成员)登录开发者后台。

2. 路径:应用中心 -> 套件 -> 打开详情。

3. 申请API权限,路径:API权限 -> 申请开通 。

基于安全考虑,Secret Key 需手动 重置 方式来获取
业务应用开发者拿到 Client IdSecret Key 需妥善保存,建议通过配置来动态设置此参数,并用Spring提供的 ENC() 来配置密文

4. 从API市场添加要接入的API套件,路径:配置 -> 从API市场添加。

到此,API申请及添加套件已完成,业务应用开发者可通过Http请求根据协议接口定义的请求头、请求参数进行开发对接。适配器参数则可在业务应用开发完成部署到开发域后通过沙箱一键更新,再进行填写。

说明:

  • 业务场景开发过程中要注意后面的安装配置中对适配器参数的配置ID进行关联
    例如:停车业务中的区域与适配器配置关联,车牌与区域关联,在与车辆相关的业务中要间接获取到配置ID

第五步: 开始编码实现API中心开放的接口对接(已过时,参考V1.2版)

  • 接口授权及地址等配置
pai:
  apistore:
    domain: http://pai-apistore.tt.svc.cluster.local
    recharge-uri: /open/v1/1/cars/month/recharge
    auth:
      client-id: cTu***OF7
      secret-key: Ub8******iYt
  • 参数配置类

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

@Component
@RefreshScope
public class CarProperties {

    @Value("pai.apistore.domain")
    String domain;

    @Value("pai.apistore.recharge-uri")
    String rechargeUri;

    @Value("pai.apistore.auth.client-id")
    String clientId;

    @Value("pai.apistore.auth.secret-key")
    String secretKey;

    public String getDomain() {
        return domain;
    }

    public void setDomain(String domain) {
        this.domain = domain;
    }

    public String getRechargeUri() {
        return rechargeUri;
    }

    public void setRechargeUri(String rechargeUri) {
        this.rechargeUri = rechargeUri;
    }

    public String getClientId() {
        return clientId;
    }

    public void setClientId(String clientId) {
        this.clientId = clientId;
    }

    public String getSecretKey() {
        return secretKey;
    }

    public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
    }
}
  • 请求参数
public class CarRechargeVO {

    private String carPlate;
    private String startDate;
    private String endDate;

    public String getCarPlate() {
        return carPlate;
    }

    public void setCarPlate(String carPlate) {
        this.carPlate = carPlate;
    }

    public String getStartDate() {
        return startDate;
    }

    public void setStartDate(String startDate) {
        this.startDate = startDate;
    }

    public String getEndDate() {
        return endDate;
    }

    public void setEndDate(String endDate) {
        this.endDate = endDate;
    }
}
  • 接口调用

签名规则: MD5(body + configId + timestamp + secretKey)

@Service("demo")
public class DemoServiceImpl extends BaseServiceImpl<DemoMapper, DemoPO, DemoVO> implements IDemoService {

    @Autowired
    CarProperties properties;

    @Override
    public CarRechargeVO monthRecharge(CarRechargeVO vo) {
        String jsonBody = JSONUtil.toJsonStr(vo);
        String configId = getConfigId(vo);
        String timestamp = String.valueOf(System.currentTimeMillis());
        // body + configId + timestamp + secretKey
        String signStr = jsonBody.concat(configId).concat(timestamp).concat(properties.getSecretKey());
        String sign = SecureUtil.md5(signStr);

        String result = HttpRequest.post(properties.getDomain().concat(properties.getRechargeUri()))
                .header("X-Client-Id", properties.getClientId())
                .header("X-Timestamp", timestamp)
                .header("X-Config-Id", configId)
                .header("X-Sign", sign)
                .body(jsonBody)
                .execute().body();

        return JSONUtil.toBean(result, CarRechargeVO.class);
    }

    private String getConfigId(CarRechargeVO vo) {
        return "根据车牌号获取相应适配器参数配置id";
    }
}

实施安装配置

操作示例

1. 使用租户(企业)管理员登录控制台。

2. 路径:应用 -> 应用市场 -> 安装。

3. 路径:应用 -> 应用套件列表 -> (应用)配置 -> 协议配置。

说明:

  • 此处配置的是适配器开发者指定的参数,用于适配器代码中使用
文档更新时间: 2022-12-15 15:01   作者:姚连洲