[Cloud Storage API(V2)] Javaでバケットを取得する

Cloud Storage API V2(Java)を使用して、
Cloud Storageのバケットのメタデータを取得する方法
についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Cloud Storage API(V2)] JavaでCloud Storageを使う](https://qiita.com/doran/items/2a5f7ef8070fd5b8c94d)
を参照ください。
:::

|No|||目次|
|---|---|---|---|
|1|||[バケット一覧を取得](#1-バケット一覧を取得)|
||1||[スコープ](#11-スコープ)|
||2||[実行](#12-実行)|
||3||[レスポンスの内容](#13-レスポンスの内容)|
|2|||[バケットを取得](#2-バケットを取得)|
||1||[スコープ](#21-スコープ)|
||2||[実行](#22-実行)|
||3||[レスポンスの内容](#13-レスポンスの内容)|

## 1. バケット一覧を取得
指定したプロジェクトのバケット一覧を取得します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
StorageScopes.CLOUD_PLATFORM
StorageScopes.CLOUD_PLATFORM_READ_ONLY
StorageScopes.DEVSTORAGE_FULL_CONTROL
StorageScopes.DEVSTORAGE_READ_ONLY
StorageScopes.DEVSTORAGE_READ_WRITE
```
[⧉[Cloud Storage API(V2)] JavaでCloud Storageを使う(2.2 Storageインスタンスを取得)](https://qiita.com/doran/items/2a5f7ef8070fd5b8c94d#22-storageインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    Storage storage = getStorage();
    Storage.Buckets buckets = storage.buckets();
    Storage.Buckets.List list = buckets.list("プロジェクトID");
    
    Buckets res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//storage.googleapis.com/storage/v1/b
が実行されます。

#### 1.2.2. クエリパラメータ
Storage.Buckets.Listのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setMaxResults|Long|取得するバケットの最大数|
|setPageToken|String|取得するページトークン|
|setPrefix|String|このプレフィックスで始まるバケットを取得|
|setProjection|String|返されるプロパティのセット<br>"full"(すべて)、"noAcl"(aclオブジェクト以外)|

### 1.3. レスポンスの内容
#### Buckets
|メソッド|戻り値|説明|
|---|---|---|
|getKind|String|リソースの種類<br>固定文字列："storage#buckets"|
|getNextPageToken|String|次のページトークン|
|getItems|List\<[Bucket](#bucket)\>|バケットのリスト|

#### Bucket
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|バケットID| 
|getName|String|バケットの名前|
|getSelfLink|String|バケットURI|
|getKind|String|リソースの種類<br>固定文字列："storage#bucket"|
|getAcl|List\<[BucketAccessControl](#bucketaccesscontrol)\>|バケットのアクセス制御|
|getAutoclass|[Bucket.Autoclass](#bucketautoclass)|バケットのAutoclass構成|
|getBilling|[Bucket.Billing](#bucketbilling)|バケットの課金構成|
|getCors|List\<[Bucket.Cors](#bucketcors)\>|バケットのCross-OriginResourceSharing(CORS)構成|
|getCustomPlacementConfig|[Bucket.CustomPlacementConfig](#bucketcustomplacementconfig)|バケットのカスタムロケーション構成|
|getDefaultEventBasedHold|Boolean|eventBasedHoldを自動的に適用するか|
|getDefaultObjectAcl|List\<[ObjectAccessControl](#objectaccesscontrol)\>|ACLが提供されていない場合に新しいオブジェクトに適用されるデフォルトのアクセス制御|
|getEncryption|[Bucket.Encryption](#bucketencryption)|バケットの暗号化構成|
|getEtag|String|バケットのHTTPエンティティタグ|
|getIamConfiguration|[Bucket.IamConfiguration](#bucketiamconfiguration)|バケットのIAM構成|
|getLabels|Map\<String,String\>|ユーザーが指定したバケットラベル<br>キー：バケットID|
|getLifecycle|[Bucket.Lifecycle](#bucketlifecycle)|バケットのライフサイクル構成|
|getLocation|String|バケットの場所|
|getLocationType|String|バケットが存在する場所のタイプ|
|getLogging|[Bucket.Logging](#bucketlogging)|バケットのログ構成|
|getMetageneration|Long|メタ世代番号(metageneration)|
|getObjectRetention|[Bucket.ObjectRetention](#bucketobjectretention)|バケットのオブジェクト保持設定|
|getOwner|[Bucket.Owner](#bucketowner)|バケットの所有者|
|getProjectNumber|BigInteger|バケットが属するプロジェクトのプロジェクト番号|
|getRetentionPolicy|[Bucket.RetentionPolicy](#bucketretentionpolicy)|バケットの保持ポリシー|
|getRpo|String|バケットのリージョン間レプリケーションの目標復旧ポイント|
|getSoftDeletePolicy|[Bucket.SoftDeletePolicy](#bucketsoftdeletepolicy)|バケットの論理的な削除ポリシー|
|getStorageClass|String|バケットのデフォルトのストレージクラス|
|getTimeCreated|DateTime|バケットの作成時刻|
|getUpdated|DateTime|バケットの更新された時刻|
|getVersioning|[Bucket.Versioning](#bucketversioning)|バケットのバージョン管理構成|
|getWebsite|[Bucket.Website](#bucketwebsite)|バケットのWebサイト構成|

#### BucketAccessControl
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|アクセス制御エントリID|
|getBucket|String|バケットの名前|
|getKind|String|リソースの種類<br>固定文字列："storage#bucketAccessControl"| 
|getDomain|String|エンティティに関連付けられているドメイン|
|getEmail|String|エンティティに関連付けられているメールアドレス|
|getEntity|String|権限を保持するエンティティ<br><br>次のいずれかの形式<br>user-{email}<br>group-{groupId}<br>group-{email}<br>domain-{domain}<br>project-{team-projectId}<br>allUsers<br>allAuthenticatedUsers|
|getEntityId|String|エンティティID|
|getEtag|String|アクセス制御エントリのHTTPエンティティタグ|
|getProjectTeam|[BucketAccessControl.ProjectTeam](#bucketaccesscontrolprojectteam)|エンティティに関連付けられているプロジェクトチーム|
|getRole|String|エンティティのアクセス許可<br>"OWNER"、"READER"、"WRITER"|
|getSelfLink|String|このアクセス制御エントリへのリンク|

#### BucketAccessControl.ProjectTeam
|メソッド|戻り値|説明|
|---|---|---|
|getProjectNumber|String|プロジェクト番号| 
|getTeam|String|チーム役割<br>"editors"、"owners"、"viewers"|

#### Bucket.Autoclass
|メソッド|戻り値|説明|
|---|---|---|
|getEnabled|Boolean|Autoclassが有効か|
|getTerminalStorageClass|String|オートクラスが有効なバケット内のオブジェクトがアクセスされなかった場合に遷移するストレージクラス|
|getTerminalStorageClassUpdateTime|DateTime|最後に更新された時刻| 
|getToggleTime|DateTime|最後に有効または無効になった時刻|

#### Bucket.Billing
|メソッド|戻り値|説明|
|---|---|---|
|getRequesterPays|Boolean|リクエスターの支払いが有効か|

#### Bucket.Cors
|メソッド|戻り値|説明|
|---|---|---|
|getMaxAgeSeconds|Integer|プリフライト応答で使用されるAccess-Control-Max-Ageヘッダーで返される値(秒単位)|
|getMethod|List\<String\>|応答ヘッダーメソッド|
|getOrigin|List\<String\>|CORS応答ヘッダーを受信できるオリジンのリスト|
|getResponseHeader|List\<String\>|HTTPヘッダーのリスト|

#### Bucket.CustomPlacementConfig
|メソッド|戻り値|説明|
|---|---|---|
|getDataLocations|List\<String\>|デュアルリージョン バケットを構成するリスト|

#### ObjectAccessControl
|メソッド|戻り値|説明|
|---|---|---|
|getKind|String|リソースの種類<br>固定文字列："storage#objectAccessControl"| 
|getDomain|String|エンティティに関連付けられているドメイン|
|getEmail|String|エンティティに関連付けられているメールアドレス|
|getEntity|String|権限を保持するエンティティ<br><br>次のいずれかの形式<br>user-{email}<br>group-{groupId}<br>group-{email}<br>domain-{domain}<br>project-{team-projectId}<br>allUsers<br>allAuthenticatedUsers|
|getEntityId|String|エンティティID|
|getEtag|String|アクセス制御エントリのHTTPエンティティタグ|
|getProjectTeam|[ObjectAccessControl.ProjectTeam](#objectaccesscontrolprojectteam)|エンティティに関連付けられているプロジェクトチーム|
|getRole|String|エンティティのアクセス許可<br>"OWNER"、"READER"、"WRITER"|

#### ObjectAccessControl.ProjectTeam
|メソッド|戻り値|説明|
|---|---|---|
|getProjectNumber|String|プロジェクト番号| 
|getTeam|String|チーム役割<br>"editors"、"owners"、"viewers"|

#### Bucket.Encryption
|メソッド|戻り値|説明|
|---|---|---|
|getDefaultKmsKeyName|String|オブジェクトの暗号化に使用されるCloud KMS Key|

#### Bucket.IamConfiguration
|メソッド|戻り値|説明|
|---|---|---|
|getPublicAccessPrevention|String|バケットのパブリック アクセス防止"inherited"ステータス|
|getUniformBucketLevelAccess|[Bucket.IamConfiguration.UniformBucketLevelAccess](#bucketiamconfigurationuniformbucketlevelaccess)|バケットの均一なバケットレベルのアクセス 構成|

#### Bucket.IamConfiguration.UniformBucketLevelAccess
|メソッド|戻り値|説明|
|---|---|---|
|getEnabled|Boolean|バケットが均一なバケットレベルのアクセスを使用するか|
|getLockedTime|DateTime|変更するための期限|

#### Bucket.Lifecycle
|メソッド|戻り値|説明|
|---|---|---|
|getRule|List\<[Bucket.Lifecycle.Rule](#bucketlifecyclerule)\>|ライフサイクル管理ルール|

#### Bucket.Lifecycle.Rule
|メソッド|戻り値|説明|
|---|---|---|
|getAction|List\<[Bucket.Lifecycle.Rule.Action](#bucketlifecycleruleaction)\>|実行するライフサイクルアクション|
|getCondition|[Bucket.Lifecycle.Rule.Condition](#bucketlifecyclerulecondition)|アクションが実行される条件|

#### Bucket.Lifecycle.Rule.Action
|メソッド|戻り値|説明|
|---|---|---|
|getStorageClass|String|新しいストレージクラス|
|getType|String|アクションのタイプ|

#### Bucket.Lifecycle.Rule.Condition
|メソッド|戻り値|説明|
|---|---|---|
|getAge|Integer|オブジェクトの経過時間|
|getCreatedBefore|DateTime|UTCで指定された日付の午前0時より前にオブジェクトが作成された時刻|
|getCustomTimeBefore|DateTime|オブジェクトのメタデータがこのライフサイクル条件で使用される日付よりも前の日付に設定された時刻|
|getDaysSinceCustomTime|Integer|オブジェクトに設定されたユーザー指定のタイムスタンプから経過した日数|
|getDaysSinceNoncurrentTime|Integer|オブジェクトの非現行タイムスタンプから経過した日数|
|getIsLive|Boolean|オブジェクトのライブバージョンと一致しているか|
|getMatchesPrefix|List\<String\>|オブジェクトの接頭辞|
|getMatchesSuffix|List\<String\>|オブジェクトの接尾辞|
|getMatchesStorageClass|List\<String\>|ストレージクラスを持つオブジェクト|
|getNoncurrentTimeBefore|DateTime|非最新になったオブジェクトの時刻|
|getNumNewerVersions|Integer|新しいバージョン|

#### Bucket.Logging
|メソッド|戻り値|説明|
|---|---|---|
|getLogBucket|String|現在のバケットのログを配置する宛先バケット|
|getLogObjectPrefix|String|ログオブジェクト名のプレフィックス|

#### Bucket.ObjectRetention
|メソッド|戻り値|説明|
|---|---|---|
|getMode|String|バケット内のオブジェクト保持構成|

#### Bucket.Owner
|メソッド|戻り値|説明|
|---|---|---|
|getEntity|String|形式のエンティティ| 
|getEntityId|String|エンティティID|

#### Bucket.RetentionPolicy
|メソッド|戻り値|説明|
|---|---|---|
|getEffectiveTime|DateTime|retentionPolicyが有効になった時刻|  
|getIsLocked|Boolean|保持ポリシーがロックされているか|
|getRetentionPeriod|Long|バケット内のオブジェクトを保持し、削除、置換、または非最新にすることができない期間(秒単位)|

#### Bucket.SoftDeletePolicy
|メソッド|戻り値|説明|
|---|---|---|
|getEffectiveTime|DateTime|論理的な削除ポリシーが有効になる日時|
|getRetentionDurationSeconds|Long|論理的に削除されたオブジェクトが保持され、完全に削除できない期間(秒単位)|

#### Bucket.Versioning
|メソッド|戻り値|説明|
|---|---|---|
|getEnabled|Boolean|このバケットのバージョン管理が完全に有効か|

#### Bucket.Website
|メソッド|戻り値|説明|
|---|---|---|
|getMainPageSuffix|String|サフィックス|
|getNotFoundPage|String|オブジェクトが欠落している場合の名前付きオブジェクト|


## 2. バケットを取得
指定したバケットのメタデータを取得します。

### 2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
StorageScopes.CLOUD_PLATFORM
StorageScopes.CLOUD_PLATFORM_READ_ONLY
StorageScopes.DEVSTORAGE_FULL_CONTROL
StorageScopes.DEVSTORAGE_READ_ONLY
StorageScopes.DEVSTORAGE_READ_WRITE
```
[⧉[Cloud Storage API(V2)] JavaでCloud Storageを使う(2.2 Storageインスタンスを取得)](https://qiita.com/doran/items/2a5f7ef8070fd5b8c94d#22-storageインスタンスを取得)
でスコープを指定してください。

### 2.2. 実行

```java
public static void main(String[] args) throws Exception{
    Storage storage = getStorage();
    Storage.Buckets buckets = storage.buckets();
    Storage.Buckets.Get get = buckets.get("バケットID");

    Bucket res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//storage.googleapis.com/storage/v1/b/{バケットID}
が実行されます。

#### 2.2.2. クエリパラメータ
Storage.Buckets.Getのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setIfMetagenerationMatch|Long|メタ世代番号(metageneration)と一致する場合のみ結果を受け取る|
|setIfMetagenerationNotMatch|Long|メタ世代番号(metageneration)と一致しない場合のみ結果を受け取る|
|setProjection|String|受け取るプロパティのセット|

### 2.3. レスポンスの内容
#### Bucket
[2.3. レスポンスの内容(Bucket)](#bucket)と同じです。
<br>
<br>
おしまい。。