0文章
0评论
0获赞

supOS SDK for Java 开发

为了更好的帮助企业开发者进行系统集成,减轻开发者对接OpenAPI的难度,蓝卓提供了基于JAVA语言的集成工具包SDK(后续将陆续支持多种开发语言),实现对supOS多版本的兼容,降低使用方对supOS的过度依赖。

 

SDK说明 #

SDK名称:bluetron-java-sdk

 

jar包下载地址:【bluetron-java-sdk-1.1.4.jar】

 

主要用于高代码开发的自研APP用。

接入方式 - 非 Spring Boot 接入方式 #

引入依赖 #
<dependency>
    <groupId>com.bluetron.sdk</groupId>
    <artifactId>bluetron-java-sdk</artifactId>
    <version>#{最佳版本}</version>
</dependency>
配置参数 SdkDefaultConfig #

 

系统相关配置 #

(1)debugEnable:设置是否开启debug模式;

true」:部署在supOS kubernetes环境上;appID和secret从环境变量中获取;
false」:本地部署调试;appID和secret通过配置文件获取;

(2)akskEnable:设置是否开启AK/SK签名模式;

true」:sdkAppService.init()就不去获取accessToken;
false」:accessToken会进行初始化;
supOS 相关配置 #

(1)requestUrl - supOS请求地址,如http://127.0.0.1;

 

(2)requestPort - supOS端口/SK签名模式,如8080;

 

(3)appId - supOS APP 的 appid;

 

(4)appSecret - supOS APP 的 appSecret;

 

(5)appVersion - upOS 版本|如果不填写,接口版本检查将失效;

 

(6)iamAccountId - aksk开启状态下,accountId;参见supOS数据库:supOS_iam,表:iam_account;

 

(7)iamSecretKey - aksk开启状态下,secretKey;参见supOS数据库:supOS_iam,表:iam_account;

okHttp 相关配置 #

(1)readTimeout - http 读超时时间;

 

(2)connectionTimeout - http 连接超时时间;

 

(3)maxIdleConnections - http 最大连接数;

 

(4)keepAliveDuration - http 保持连接时长;

i18n 相关配置 #

(1)acceptLanguage - 国际化配置|可选值 [en-us,zh-cn];

// 设置配置信息
SdkBaseService.setSdkConfigStorage(SdkConfigStorage sdkConfigStorage);

提供服务 #
SdkService #
应用统一的配置和出口;
实现类:com.bluetron.app.middle.sdk.api.SdkServiceImpl;
接口服务:SdkAppService,SdkSuposService;
SdkSuposService #
supOS 接口服务;
实现类:com.bluetron.app.middle.sdk.api.supOS.SdkSuposService;
SdkSuposService #
内置App接口服务;
实现类:com.bluetron.app.middle.sdk.api.app.SdkAppService;
getAccessToken() #
认证模式;
实现类:com.bluetron.sdk.api.SdkBaseService;
默认值:OAuth 2.0 的 client 模式;
code 认证模式 #
使用方法:getAccessToken();
实现方式:调用com.bluetron.sdk.config.SdkConfigStorage.setAuthorizationCode() 及 com.bluetron.sdk.config.SdkConfigStorage.setAuthorizationCodeRedirectUri();
Demo 示例 #
单独使用 SdkSuposService #
SdkDefaultConfig config = new SdkDefaultConfig();
// 示例值,请根据实际参数进行配置
config.setAppId("App_f977249f96f34f01aae3259d98671a7f");
config.setAppSecret("965d2dc6ac2da958e91ba6c5d57bba72");
config.setAppVersion("2.6.0");
config.setRequestUrl("http://127.0.0.1");
config.setRequestPort("80");
config.setReadTimeout(10);
SdkSuposService sdkSuposService = new SdkSuposServiceImpl();
sdkSuposService.setSdkConfigStorage(config);
// 注意,一定要进行初始化
sdkSuposService.init();
// 获取对象模型接口,根据需要调用相关方法即可
ObjectService objectService = sdkSuposService.getObjectService();

单独使用 SdkAppService #
SdkDefaultConfig config = new SdkDefaultConfig();
// 示例值,请根据实际参数进行配置
config.setAppId("App_f977249f96f34f01aae3259d98671a7f");
config.setAppSecret("965d2dc6ac2da958e91ba6c5d57bba72");
config.setIamAccountId("552987919581184");
config.setIamSecretKey("c07582d917b924f217b94c38b2d4484c");
config.setAppVersion("2.6.0");
config.setRequestUrl("http://127.0.0.1");
config.setRequestPort("80");
config.setReadTimeout(10);
SdkAppService sdkAppService = new SdkAppServiceImpl();
sdkAppService.setSdkConfigStorage(config);
// 注意,一定要进行初始化
sdkAppService.init();
// 通过sdkAppService获取相关app内置服务即可
同时使用 SdkSuposService 和 SdkAppService #
SdkDefaultConfig config = new SdkDefaultConfig();
// 示例值,请根据实际参数进行配置
config.setAppId("App_f977249f96f34f01aae3259d98671a7f");
config.setAppSecret("965d2dc6ac2da958e91ba6c5d57bba72");
config.setIamAccountId("552987919581184");
config.setIamSecretKey("c07582d917b924f217b94c38b2d4484c");
config.setAppVersion("2.6.0");
config.setRequestUrl("http://127.0.0.1");
config.setRequestPort("8088");
config.setReadTimeout(10);
SdkService sdkService = new SdkServiceImpl();
sdkService.setSdkConfigStorage(config);

// 注意,一定要进行初始化
sdkService.init();

// 通过sdkAppService获取相关app内置服务
SdkAppService sdkAppService = sdkService.getSdkAppService();

// 通过sdkSuposService获取相关Supos服务
SdkSuposService sdkSuposService = sdkService.getSdkSuposService();
分布式开发 #
存在问题 #

对于sdk的配置信息,系统默认提供了基于内存的存储方式。
如果需要支持分布式,存在access_token生成时竞争的问题

解决办法 #

使用方可以通过继承`com.bluetron.sdk.config.SdkDefaultConfig`进行扩展;
也可以完全实现`com.bluetron.sdk.config.SdkConfigStorage`满足需求。

接入方式 -  Spring Boot 接入方式 #

统一定义bean #
@Data
@Configuration
@ConfigurationProperties(prefix = "bluetron.sdk")
public class BluetronSdkProperties {
    /**
     * 是否开启debug模式,该模式下会打印日志
     */
    private boolean debugEnable;
    /**
     * supOS 请求地址
     */
    private String requestUrl;
    /**
     * supOS apis 请求端口
     */
    private String requestPort;
    /**
     * appid
     */
    private String appId;
    /**
     * appSecret
     */
    private String appSecret;
    /**
     * accountId, 参见supOS数据库:supOS_iam,表:iam_account
     */
    private volatile String iamAccountId;
    /**
     * secretKey, 参见supOS数据库:supOS_iam,表:iam_account
     */
    private volatile String iamSecretKey;
    private String accessToken;
    private String refreshToken;
    private String appVersion;
    private Integer readTimeout;
    private String iamAccountId;
    private String iamSecretKey;
}
application.yml配置信息 #
bluetron:
    sdk:
        enabled: true #是否开启登陆校验
        debug-enable: false
        request-url: http://127.0.0.1
        request-port: 8080
        app-id:
        app-secret:
        aksk-enable: true
        iam-account-id:
        iam-secret-key:
        app-version: 2.60.00.00-200316-C
        read-timeout: 10
        accept-language: zh-cn
这里提供一种在Spring中的使用方式 #
@Slf4j
public class BluetronSdk {
    public static SdkService sdkService;
    public static SdkSuposService supOSService;
    public static SdkAppService appService;
    static  {
        log.info("初始化bluetron sdk...");
        //SpringContextHolder 需要使用方自行定义
        BluetronSdkProperties bluetronSdkProperties = SpringContextHolder.getBean(BluetronSdkProperties.class);
        SdkDefaultConfig config = new SdkDefaultConfig();
        BeanUtils.copyProperties(bluetronSdkProperties, config);
        log.info("bluetron sdk 配置信息{}...", config);
        sdkService = new SdkServiceImpl();
        //配置sdk
        sdkService.setSdkConfigStorage(config);
        //初始化sdk
        sdkService.init();
        //获取对应service实例
        supOSService = sdkService.getSdkSuposService();
        appService = sdkService.getSdkAppService();
        log.info("完成初始化bluetron sdk...");
    }
}

国际化 #

18N支持 #
实现方式 #

supOS使用 header Accept-Language : zh-cn / en-us 来做国际化;

 默认配置 #

SdkDefaultConfig中增加 acceptLanguage 字段,默认为中文;

修改配置 #

如果需要修改为英文环境,则可以再配置文件或者是初始化手工修改,代码如下:

config.setAcceptLanguage(SdkConstants.SUPOS_EN_US);

AK/SK使用 #

说明 #

AK/SK认证开启以后,OpenAPI 接口走 AK/SK 流程,其他接口仍然以 OAuth 2.0 方式处理。

常见问题排查 #
自检内容 #

确保方法的入参是否都正确,注意请求的 Http Method。

排查步骤 #

请求返回提示:{"code":"80021002","message":"illegal account"},可以到supOS环境中对其日志进行查看。

// 查看命名空间
k3s kubectl get ns

// 查看pod
k3s kubectl get pod -n {namespace}

// 查看pod日志
k3s kubectl logs {pod_id} -n {namespace}

在日志中可以看到 请求的入参、签名源、签名结果、响应信息。可以根据以上信息对问题进行排查。

评论 (0)
请登录以参与评论。
立即登录