# supos-java-openapi-httpclient **Repository Path**: huang-jian-bo/supos-java-openapi-httpclient ## Basic Information - **Project Name**: supos-java-openapi-httpclient - **Description**: 适配supOS的JAVA版本的OpenAPI调用脚手架 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2025-01-13 - **Last Updated**: 2026-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # supOS-OpenAPI-SDK(Java) [![Apache2.0](license.svg)](http://www.apache.org/licenses/LICENSE-2.0) - [supOS-OpenAPI-SDK(Java)](#supos-openapi-sdkjava) - [1. 介绍](#1-介绍) - [1.1. 使用的技术栈](#11-使用的技术栈) - [1.2. supOS兼容列表](#12-supos兼容列表) - [2. 部署教程](#2-部署教程) - [2.1. 基于Maven的源码编译方式](#21-基于maven的源码编译方式) - [3. 使用说明](#3-使用说明) - [3.1. 配置maven引用](#31-配置maven引用) - [3.2. 创建客户端(普通模式)](#32-创建客户端普通模式) - [3.3. 创建客户端(Spring-boot模式)](#33-创建客户端spring-boot模式) - [3.4. 创建客户端(高代码APP)](#34-创建客户端高代码app) - [3.5. 创建客户端(基于Spring boot开发的高代码APP)](#35-创建客户端基于spring-boot开发的高代码app) - [3.6. 动态传递配置参数](#36-动态传递配置参数) - [4.接口使用说明](#4接口使用说明) - [4.1. 接口说明](#41-接口说明) - [4.2. 接口示例](#42-接口示例) ### 1. 介绍 欢迎使用supOS JAVA版本的OpenAPI调用SDK。本SDK适配目前市面上常见的supOS商业版本,支持高代码APP开发者、外部系统集成商等; 支持完整的supOS OpenAPI调用能力,包括参数校验、异常捕获、语言传递、租户配置及上传文件、下载文件等功能,且封装了对AK/SK的签名算法及对Token认证的支持,方便开发者进行使用。 #### 1.1. 使用的技术栈 | 序号 | 名称 | 版本 | 说明 | |----|-------------|---------|-----------------| | 1 | fastjson2 | 2.0.54 | 参数JSON序列化 | | 2 | httpclient5 | 5.4.1 | HTTP客户端组件,支持连接池配置 | | 3 | java | (>=)1.8 | JAVA运行版本 | #### 1.2. supOS兼容列表 | 名称 | 版本 | |-------|-------------| | supOS | V3.50.XX.XX | | supOS | V4.XX.XX.XX | | supOS | V5.XX.XX.XX | | supOS | V6.XX.XX.XX | ### 2. 部署教程 #### 2.1. 基于Maven的源码编译方式 * 前提条件:部署Maven(>=3.0) > 执行以下指令查看Maven版本 ```shell mvn -version ``` * 下载代码 ```shell git clone https://gitee.com/huang-jian-bo/supos-java-openapi-httpclient.git ``` 或者 ```shell git clone git@gitee.com:huang-jian-bo/supos-java-openapi-httpclient.git ``` * 编译并部署开发组件 ```shell mvn clean package install -DskipTests=true ``` ### 3. 使用说明 #### 3.1. 配置maven引用 ```xml org.slf4j slf4j-api 1.7.36 com.alibaba.fastjson2 fastjson2 2.0.54 org.apache.httpcomponents.client5 httpclient5 5.4.1 io.gitee.huang-jian-bo openapi-httpclient-core 1.0.5 io.gitee.huang-jian-bo openapi-httpclient-httpclient5 1.0.5 ``` #### 3.2. 创建客户端(普通模式) 适用于外部服务调用supOS OpenAPI的场景。使用之前通过supOS的管理端申请到AK/SK账套 (系统配置->AK/SK管理) 后进行配置使用。 ```java // 设置调用参数 SuposApiClientConfig config = SuposApiClientConfig.of() .ticket("TYOEhrter970gUYETth==") // 令牌,可选。配置后将优先使用令牌认证 .accessKey("f1b8d10248b92c7566a4a0b55e103ca3") // AK,必填 .secretKey("d20d283d662294b9c360c28be4e8402a") // SK,必填 .endpoint("http://192.168.236.87:8080") // supOS请求地址,必填 .defaultLanguage(HttpLanguage.zh_CN) // 默认调用语言,非必填。默认中文 .appId("example") // 应用ID,必填。同申请AK/SK时填的APP ID .tenantId(ApiClientConstant.DEFAULT_TENANT); // 租户ID,非必填。默认为dt // 获取接口 SuposApiClient client = SuposApiClientFactory.getClient(config); ``` #### 3.3. 创建客户端(Spring-boot模式) 区别于普通模式,适用于基于Spring boot进行开发的应用集成SDK调用supOS OpenAPI。 使用之前需先在supOS的管理端申请到AK/SK账套。 通过Maven引用boot-starter包: ```xml io.gitee.huang-jian-bo openapi-httpclient-boot-starter 1.0.5 ``` application.yml配置示例如下: ```yaml supos: sdk: ticket: hAGmKomQ0BeI2oPiVYDcK access-key: f1b8d10248b92c7566a4a0b55e103ca3 secret-key: d20d283d662294b9c360c28be4e8402a endpoint: http://192.168.1.1:8080 app-id: example tenant-id: dt default-language: zh_CN service-name: "example" httpclient5: max-idle-time: 60000 connection-timeout: 5000 response-timeout: 60000 socket-timeout: 15000 rcv-buf-size: 8192 snd-buf-size: 8192 ``` SDK参数说明(supos.sdk): | 参数名称 | 参数说明 | |----------------------------|-------------------------------------------------------| | ticket | 配置令牌认证模式,当填写后调用时令牌认证优先于AK/SK | | access-key | AK,在supOS中申请获得 | | secret-key | SK,在supOS中申请获得 | | endpoint | supOS访问地址,格式为:http[s]://ip:port | | app-id | 应用ID,申请AK/SK时填的APP ID | | tenant-id | 租户ID,应用调用supOS的哪个租户,默认为dt | | default-language | 默认语言,应用调用supOS的语言环境,默认为中文 | | service-name | 应用服务名称,可与app-id一致 | HttpClient5参数说明(supos.sdk.httpclient5): | 参数名称 | 参数说明 | |-------------------|--------------------------------------| |max-idle-time| 连接最大空闲时间,单位毫秒。默认60000 | |connection-timeout| 获取连接超时时间,单位毫秒。默认5000 | |response-timeout| 请求响应超时时间,单位毫秒。默认60000 | |socket-timeout| TCP连接超时时间,单位毫秒。默认15000 | |rcv-buf-size| TCP接收缓冲区大小,默认8192。详见:TCP的SO_RCVBUF参数 | |snd-buf-size| TCP发送缓冲区大小,默认8192。详见:TCP的SO_SNDBUF参数 | #### 3.4. 创建客户端(高代码APP) 当应用是遵守supOS的高代码APP规范开发的应用并通过supOS的应用管理安装的应用APP, 则可以简化相关参数配置。SDK会自动读取应用容器中的相关参数的“环境变量”进行赋值。 读取的环境变量如下: | 环境变量名称 | 变量说明 | |-----------------------|-------------------------------------------------| | SUPOS_ADDRESS | supOS的访问地址,默认为http://supos-gateway.default:8080 | | SUPOS_APP_ID | 应用的APP ID | | SUPOS_APP_TENANT_ID | 应用当前所属的租户ID | | SUPOS_APP_ACCOUNT_ID | AK | | SUPOS_APP_SECRET_KEY | SK | |SUPOS_APP_SERVICE_NAME| 应用在K8S中的SVC名称 | 应用代码创建客户端代码如下: ```java SuposApiClient client = SuposApiClientFactory.getClient(SuposApiClientConfig.of()); ``` #### 3.5. 创建客户端(基于Spring boot开发的高代码APP) 如应用也是基于Spring boot开发,可参考Spring-boot模式,直接在Yaml中配置上述的环境变量来设置参数,示例如下: ```yaml supos: sdk: access-key: ${SUPOS_APP_ACCOUNT_ID} secret-key: ${SUPOS_APP_SECRET_KEY} endpoint: ${SUPOS_ADDRESS:http://supos-gateway.default:8080} app-id: ${SUPOS_APP_ID} tenant-id: ${SUPOS_APP_TENANT_ID:dt} default-language: ${OSLANG:zh_CN} service-name: ${SUPOS_APP_SERVICE_NAME} ``` 代码中使用客户端代码如下: ```java /** * 注入 */ @Autowired private SuposApiClient suposApiClient; ``` #### 3.6. 动态传递配置参数 支持在客户端的代码中动态的指定配置参数进行调用,示例如下: ```java suposApiClient .ticket("hAGmKomQ0BeI2oPiVYDcK") .accessKey("f1b8d10248b92c7566a4a0b55e103ca3") .secretKey("d20d283d662294b9c360c28be4e8402a") .tenantId(ApiClientConstant.DEFAULT_TENANT) .language(HttpLanguage.zh_CN) .callWithoutResponse(path, args, headers); ``` 上述参数,在调用时指定后将优先于初始化的配置。 ### 4.接口使用说明 本SDK对接口调用的参数进行高度的封装,以方便开发者进行代码编写。 #### 4.1. 接口说明 | 接口名称 | 功能说明 | |----------------------------|------------------------------------| | callWithResponse | 请求带返回参,此接口扩展了支持分页查询及传递数组、Map表等参数能力 | | callWithResponseNoArgs | 请求带返回参,且无请求参传递 | | callWithoutResponse | 请求不带返回参 | | callWithoutResponseNoArgs | 请求不带返回参,且无请求参传递 | | upload | 上传文件 | | download | 下载文件 | | getSupOSVersions | 获取supOS的版本信息 | #### 4.2. 接口示例 以“查询指定编码的公司的人员列表”的OpenAPI为例: * 定义请求参 ```java import com.sun.deploy.util.StringUtils; /** * 请求参 */ public class FindPersonsByCompanyArgs implements RequestArguments { /** * 定义URL的Path参数值 * 必录项 */ @PathParam private String companyCode; /** * 定义页号参数 */ @QueryParam private Integer current = 1; /** * 定义页码参数 */ @QueryParam private Integer pageSize = 20; /** * 定义模糊匹配关键字 */ @QueryParam private String keyword; /** * 定义一个自定义的请求头,发起请求时将会填充至HTTP请求头当中 */ @HeaderParam private String example; /** * 参数校验 * 当请求参中有必录项、限制长度、限制值范围等约束时,可以实现此接口进行参数校验。 * 此接口在请求发起前执行,如校验失败则请求中止 * * @return */ @Override public boolean validate() { if (StringUtils.isEmpty(this.companyCode)) { throw new NullPointerException("the field of CompanyCode is null"); } return true; } } ``` 上述示例中分别通过PathParam、QueryParam和HeaderParam的注解来表示请求的参数,上述注解在客户端发起请求时将被解释并进行HTTP协议赋值。注解说明如下: | 注解名称 | 说明 | |-------------|---------------------------------------| | PathParam | 用于配置URL的Path参数 | | QueryParam | 用于配置URL的Query参数 | | HeaderParam | 用于配置请求的HTTP自定义请求头,可为空 | | FormParam | 用于上传文件时携带请求参数,详见multipart/form-data协议 | | IgnoreParam | 主要用于进行JSON序列化时,忽略相关字段 | 并且,除了上述注解外,支持实现validate()接口来对参数进行有效性、完整性校验。 * 定义返回参 ```java /** * 返回参 */ public class Person { private String code; private String name; private Integer valid; } ``` * 发起调用 ```java // 定义请求地址 HttpPath findCompanyUrl = HttpPath.of("/open-api/organization/v2/companies/{companyCode}/persons"); // 定义请求头 //HttpHeader headers = HttpHeader.of(); // 空参 HttpHeader headers = HttpHeader.of().add("test", "test"); // 定义了一个test请求头 // 定义请求参 FindPersonsByCompanyArgs args = new FindPersonsByCompanyArgs(); args.setCompanyCode("1000"); // 设置公司编码为1000 args.setCurrent(2); // 设置页码为2 args.setKeyword("test"); // 设置查询关键字为test // 发起请求 // 返回分页数据 PageResult result = client.callWithResponseForPageResult(findCompanyUrl, args, headers, Person.class); ```