lakefs sdk 使用


因为lakefs 是基于openapi 开发的后端,所以提供sdk 是很简单的,同时官方的sdk就是基于代码生成的

构建sdk

官方提供了中央仓库里的,也可以自己构建

  • java 版本自己构建
cd clients/java
mvn clean package install -Dmaven.test.skip -Dgpg.skip

使用

  • maven 引用
<dependencies>
     <dependency>
         <groupId>io.lakefs</groupId>
         <artifactId>api-client</artifactId>
         <version>0.56.0</version>
     </dependency>
</dependencies>
  • 代码集成
    lakefs sdk 的集成模式就是标准openapi client 的处理,初始化ApiClient,获取token,具体业务操作api初始化传递 ApiClient
    进行业务操作就可以了,整体还是比较简单的
 
package com.dalong;
 
import io.lakefs.clients.api.*;
import io.lakefs.clients.api.auth.HttpBearerAuth;
import io.lakefs.clients.api.model.AuthenticationToken;
import io.lakefs.clients.api.model.LoginInformation;
import io.lakefs.clients.api.model.Repository;
 
import java.util.function.Consumer;
 
public class App {
    public static void main(String[] args) throws ApiException {
        ApiClient defaultClient = Configuration.getDefaultApiClient();
        defaultClient.setBasePath("http://localhost:8000/api/v1");
        RepositoriesApi repositoriesApi = new RepositoriesApi(defaultClient);
        AuthApi authApi  = new AuthApi(defaultClient);
        LoginInformation loginInformation =  new LoginInformation();
        loginInformation.secretAccessKey("xxxxxxxx");
        loginInformation.setAccessKeyId("xxxxxx");
        AuthenticationToken jwtToken =  authApi.login(loginInformation);
        HttpBearerAuth jwt_token = (HttpBearerAuth) defaultClient.getAuthentication("jwt_token");
        jwt_token.setBearerToken(jwtToken.getToken());
        try {
            repositoriesApi.listRepositories("","",null).getResults().forEach(new Consumer<Repository>() {
                @Override
                public void accept(Repository repository) {
                    String repoFormat = "createtime: %s====storagenamespace: %s=====default branch: %s========repositry id: %s";
                    System.out.println(String.format(repoFormat,repository.getCreationDate(),repository.getStorageNamespace(),repository.getDefaultBranch(),repository.getId()));
                }
            });
        } catch (ApiException e) {
            System.err.println("Exception when calling ActionsApi#getRun");
            System.err.println("Status code: " + e.getCode());
            System.err.println("Reason: " + e.getResponseBody());
            System.err.println("Response headers: " + e.getResponseHeaders());
            e.printStackTrace();
        }
    }
}

说明

官方代码库中的文档还是比较全的,可以直接参考使用,同时对于apiclient 在多线程环境,官方建议是使用独立的
参考实例

 
package com.dalong;
 
import io.lakefs.clients.api.ApiClient;
import io.lakefs.clients.api.Configuration;
 
public class SingletonApiClient {
 
    private SingletonApiClient() {
    }
 
    private static ThreadLocal<ApiClient> _threadLocal =
            new ThreadLocal<ApiClient>() {
                @Override
                protected ApiClient initialValue() {
                    return Configuration.getDefaultApiClient();
                }
            };
 
    public static ApiClient getInstance() {
        return _threadLocal.get();
    }
 
}

使用

ApiClient defaultClient = SingletonApiClient.getInstance();

参考资料

https://docs.lakefs.io/reference/api.html#/
https://github.com/treeverse/lakeFS/tree/master/clients/java