JAVA SDK

一、准备工作

下载SDK的jar包

qlen-sdk-1.0.0.jar
下载地址:https://docs.qlen.cn/downloads/qlen-sdk-1.0.0.jar

安装

命令行进入存放下载的qlen-sdk-1.0.0.jar的目录,通过下面命令添加到Maven本地仓库:

mvn install:install-file -DgroupId=com.qilian.qlen -DartifactId=qlen-sdk -Dversion=1.0.0 -Dpackaging=jar -Dfile=qlen-sdk-1.0.0.jar

引用

在你的项目中添加SDK的依赖:

<dependency>
    <groupId>com.qilian.qlen</groupId>
    <artifactId>qlen-sdk</artifactId>
    <version>1.0.0</version>
</dependency>

二、访问示例

在SDK中访问QLEN云端接口的主类是com.qilian.qlen.sdk.QlenCloud,为了节约资源和提高效率,QlenCloud以单例模式运行。 标准的访问流程如下:

QlenCloud qc = QlenCloud.newInstance();
qc.setHost(Host.DEMO);
qc.setLevel(Level.HEADERS);
qc.setSecretKey("5d950c3112a74cc0b14db7d401a63bca", "46bPSOTIx0ImtoNq");
QlenNode node = qc.getLatestNode(); //获取最新的节点

上面代码中:
第1行,获取QlenCloud对象。
第2行,设置QLEN主机地址类型,上线前测试时使用Host.DEMO,表示连接演示主机,如果不调用,默认连接正式环境主机地址。
第3行,设置http通讯内容打印级别,如果不调用,默认不输出http日志。
第4行,设置服务编码和安全码,访问受限资源时,QlenCloud会自动获取或管理令牌。
第5行,是具体业务接口调用,这里是获取最新的节点。
提示:QlenCloud会自动获取和管理令牌,接入时,你无需手动去获取、更新和管理令牌。另外,因为QlenCloud是以单例模式运行,所以,在你的应用生命周期中只需要第一次调用时做第2~4行的设置,以后都可以直接用第1行的方式获取对象,不用重新设置。
比如,在正式的生产环境,你可以简化如下:
在你的应用启动的时候调用一次设置:

QlenCloud.newInstance().setSecretKey("5d950c3112a74cc0b14db7d401a63bca", "46bPSOTIx0ImtoNq");

访问业务接口时直接调用业务接口:

QlenNode node = QlenCloud.newInstance().getLatestNode(); //获取最新的节点

三、异常处理

每个业务函数都会抛出QlenException异常,通过调用该异常的get函数就可以获知具体的异常类别:

// 错误编码
int getErrorCode();
// 错误名称
String getErrorName();
// 详细错误信息
String getMessage();

具体的错误编码、错误名称以及详细错误信息请参考接口规范中的请求失败响应对照表。

四、函数详述

系统函数

/**
* 获取QlenCloud实例,QlenCloud以单例模式运行,默认为正式环境主机地址,无日志输出
* @return
*/
public static QlenCloud newInstance();

/**
* 设置服务编码和安全码
* @param serviceId 服务编码
* @param secretKey 安全码
*/
public void setSecretKey(String serviceId, String secretKey);

/**
* 设置QLEN主机地址类型
* @param host QLEN主机地址类型,PROD:为正式环境主机地址,DEMO:为演示环境主机地址
*/
public void setHost(Host host);

/**
* 设置http通讯内容打印级别
* @param level 打印http通讯内容,参考okhttp3.logging.HttpLoggingInterceptor.Level
*/
public void setLevel(Level level);

/**
* 获取QLEN主机地址类型
* @return
*/
public Host getHost();

/**
* 获取http通讯内容打印级别
* @return
*/
public Level getLevel();

/**
* 获取刷新令牌的时间间隔,单位秒
* @return
*/
public int getRefreshTokenInternal();

/**
* 设置刷新令牌的时间间隔,单位秒。注意:该时间不能超过QLEN平台的令牌过期时间,
* 否则接口访问时可能会出令牌过期错误
* @param refreshTokenInternal
*/
public void setRefreshTokenInternal(int refreshTokenInternal);

令牌模块函数

/**
* 新建令牌
* @return
* @throws QlenException
*/
public String newToken() throws QlenException;

/**
* 获取令牌,如果存在未过期令牌直接返回,否则新建令牌
* @return
* @throws QlenException
*/
public String getToken() throws QlenException;

/**
* 验证令牌是否有效
* @param token
* @return
* @throws QlenException
*/
public boolean checkToken(String token) throws QlenException;

/**
* 销毁或删除令牌
* @param token
* @throws QlenException
*/
public void deleteToken(String token) throws QlenException;

存证模块函数

/**
* 文件上传
* @param fileName 文件完整路径和文件名
* @param isEscrow 是否存证
* @param isPublic 是否公开
* @param userId 用户编码
* @param title 标题
* @param note 注释
* @return 文件编码
* @throws QlenException
*/
public String uploadFile(String fileName, boolean isEscrow, boolean isPublic, String userId, 
        String title, String note) throws QlenException;

/**
* 下载文件
* @param fileId 文件编码
* @param os 保存文件的输出流
* @return 原始文件名
* @throws QlenException
*/
public String downloadFile(String fileId, OutputStream os) throws QlenException;

/**
* 下载文件
* @param fileId 文件编码
* @param savePath 保存文件路径
* @return 原始文件名
* @throws QlenException
*/
public String downloadFile(String fileId, String savePath) throws QlenException;

/**
* 验证文件,返回和验证文件特征一致的节点
* @param fileName
* @return 返回和验证文件特征一致的节点
* @throws QlenException
*/
public QlenNode checkFile(String fileName) throws QlenException;

公证模块函数

/**
* 新建节点
* @param userId 用户编码
* @param referHash 引用哈希
* @param referType 引用关系类型
* @param hashVendor 哈希提取者
* @param hashAlgorithm 哈希提取算法
* @param infoHash 信息哈希或文件编码
* @param infoId 信息标识
* @return 刚创建的节点
* @throws QlenException
*/
public QlenNode createNode(String userId, String referHash, ReferType referType, 
        HashVendor hashVendor, HashAlgorithm hashAlgorithm, String infoHash, String infoId) throws QlenException;

/**
* 获取最新节点
* @return
* @throws QlenException
*/
public QlenNode getLatestNode() throws QlenException;

/**
* 获取指定节点哈希的节点
* @param nodeHash 节点哈希
* @return
* @throws QlenException
*/
public QlenNode getNodeByNodeHash(String nodeHash) throws QlenException;

/**
* 通过节点序号获取节点
* @param nodeSeq 节点序号
* @return
* @throws QlenException
*/
public QlenNode getNodeByNodeSeq(long nodeSeq) throws QlenException;

/**
* 获取指定信息哈希的节点
* @param infoHash 信息哈希
* @return
* @throws QlenException
*/
public QlenNode getNodeByInfoHash(String infoHash) throws QlenException;

/**
* 获取所有节点(最新的20条)
* @return
* @throws QlenException
*/
public PageList<QlenNode> getNodes() throws QlenException;

/**
* 获取所有节点
* @param pageNum 页码
* @param pageSize 每页节点数
* @param isReverse 是否反向
* @return
* @throws QlenException
*/
public PageList<QlenNode> getNodes(int pageNum, int pageSize, boolean isReverse) throws QlenException;

/**
* 通过引用哈希获取节点(最新的20条)
* @param referHash 引用哈希
* @return
* @throws QlenException
*/
public PageList<QlenNode> findByReferHash(String referHash) throws QlenException;

/**
* 通过引用哈希获取节点
* @param referHash 引用哈希
* @param pageNum 页码
* @param pageSize 每页节点数
* @param isReverse 是否反向
* @return
* @throws QlenException
*/
public PageList<QlenNode> findByReferHash(String referHash, int pageNum, int pageSize, boolean isReverse) throws QlenException;

/**
* 通过用户编码获取节点(最新的20条)
* @param userId 用户编码
* @return
* @throws QlenException
*/
public PageList<QlenNode> findByUserId(String userId) throws QlenException;

/**
* 通过用户编码获取节点
* @param userId 用户编码
* @param pageNum 页码
* @param pageSize 每页节点数
* @param isReverse 是否反向
* @return
* @throws QlenException
*/
public PageList<QlenNode> findByUserId(String userId, int pageNum, int pageSize, boolean isReverse) throws QlenException;

/**
* 通过服务编码获取节点(最新的20条)
* @param serviceId 服务编码
* @return
* @throws QlenException
*/
public PageList<QlenNode> findByServiceId(String serviceId) throws QlenException;

/**
* 通过服务编码获取节点
* @param serviceId 服务编码
* @param pageNum 页码
* @param pageSize 每页节点数
* @param isReverse 是否反向
* @return
* @throws QlenException
*/
public PageList<QlenNode> findByServiceId(String serviceId, int pageNum, int pageSize, boolean isReverse);

辅助模块函数

/**
* 获取节点统计信息
* @return
* @throws QlenException
*/
public NodeSummary getNodeSummary() throws QlenException;

/**
* 获取服务统计信息
* @return
* @throws QlenException
*/
public PageList<ServiceSummary> getServiceSummary() throws QlenException;

/**
* 检测用户编码是否有效
* @param userId 用户编码
* @return
* @throws QlenException
*/
public boolean checkUser(String userId) throws QlenException;