为了确保高质量并与其他 Cloud 库保持一致,Storage Transfer Service 的文档现在使用 Cloud 客户端库(而不是 Google API 客户端库)。如需详细了解这两种选项,请参阅客户端库说明。
Google API 客户端库仍会收到更新,但文档中不再提及该库。
本指南介绍了在使用 Storage Transfer Service 时存在的主要差异,并提供了有关在迁移到 Cloud 客户端库时更新客户端的说明。
Java
更新依赖项
如需切换到新库,请将对 google-api-services-storagetransfer
的依赖项替换为 google-cloud-storage-transfer
。
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-storage-transfer</artifactId> <version>0.2.3</version> </dependency>
如果您使用的是不带 BOM 的 Gradle,请将此代码添加到您的依赖项中:
implementation 'com.google.cloud:google-cloud-storage-transfer:0.2.3'
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>24.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage-transfer</artifactId>
</dependency>
在大多数情况下,代码可以非常轻松地从 API 客户端库转换为 Cloud 客户端库。以下是这两种 Java 客户端之间的一些主要区别
客户端实例化
Cloud 客户端库通过在后台处理客户端实例化,减少了许多与客户端实例化相关的样板文件。
GoogleCredentials credential = GoogleCredentials.getApplicationDefault();
if (credential.createScopedRequired()) {
credential = credential.createScoped(StoragetransferScopes.all());
}
Storagetransfer storageTransfer = new Storagetransfer.Builder(Utils.getDefaultTransport(),
Utils.getDefaultJsonFactory(), new HttpCredentialsAdapter(credential))
.build();
StorageTransferServiceClient storageTransfer = StorageTransferServiceClient.create();
模型类的构建器
Cloud 客户端库中的模型类使用构建器,而不是构造函数。
TransferJob transferJob =
new TransferJob()
.setStatus("ENABLED");
TransferJob transferJob =
TransferJob.newBuilder()
.setStatus(Status.ENABLED)
.build();
列表操作会返回可迭代对象
Cloud 客户端库中的列表操作会返回简单的可迭代对象,而不是 API 客户端库中的分页结果。
public class StoragetransferExample {
public static void main(String args[]) throws IOException, GeneralSecurityException {
Storagetransfer storagetransferService = createStoragetransferService();
Storagetransfer.TransferJobs.List request = storagetransferService.transferJobs().list();
ListTransferJobsResponse response;
do {
response = request.execute();
if (response.getTransferJobs() == null) {
continue;
}
for (TransferJob transferJob : response.getTransferJobs()) {
System.out.println(transferJob);
}
request.setPageToken(response.getNextPageToken());
} while (response.getNextPageToken() != null);
}
public static Storagetransfer createStoragetransferService()
throws IOException, GeneralSecurityException {
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
GoogleCredential credential = GoogleCredential.getApplicationDefault();
}
return new Storagetransfer.Builder(httpTransport, jsonFactory, credential)
.build();
}
}
public class StoragetransferExample {
public static void main(String args[]) throws Exception {
StorageTransferServiceClient storageTransfer = StorageTransferServiceClient.create();
ListTransferJobsRequest request = ListTransferJobsRequest.newBuilder().build();
for (TransferJob job : client.listTransferJobs(request).iterateAll()) {
System.out.println(job);
}
}
}
示例比较
下面,我们列出了旧版 API 客户端库示例,并将其与使用 Cloud 客户端库的等效示例进行了对比。如果您之前使用过这些示例,可以通过此对比了解如何将代码迁移到新的 Cloud 客户端库。
从 Amazon S3 转移
转移到 Nearline
检查最新的转移操作
Python
更新依赖项
如需使用新库,请添加对 google-cloud-storage-transfer
的依赖项。系统将使用它,而不是 google-api-python-client
中的资产识别客户端。
pip install --upgrade google-cloud-storage-transfer
客户端实例化
使用 storage_transfer
模块,而不是 googleapiclient.discovery
。
示例比较
为了说明这两个库之间的差异,这里将旧的 API 客户端示例与其在 Cloud 客户端库中的等效示例并排显示。
从 Amazon S3 转移
转移到 Nearline
请注意 google.protobuf.duration_pb2.Duration
的导入。
检查最新的转移操作
注意 storage_transfer.TransferOperation.deserialize
的用法