[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|[レスポンスの内容](#23-レスポンスの内容)|
|3||[バケットを更新](#3-バケットを更新)|
||1|[スコープ](#31-スコープ)|
||2|[実行](#32-実行)|
||3|[レスポンスの内容](#33-レスポンスの内容)|
|4||[空のバケットを削除](#4-空のバケットを削除)|
||1|[スコープ](#41-スコープ)|
||2|[実行](#42-実行)|
||3|[レスポンスの内容](#43-レスポンスの内容)|

## 1. バケットを生成
指定したプロジェクトにバケットを作成します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
StorageScopes.CLOUD_PLATFORM
StorageScopes.DEVSTORAGE_FULL_CONTROL
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 bucketsu = storage.buckets();
    
    Bucket content = new Bucket();
    content.setName("バケット名");
    Storage.Buckets.Insert insert = bucketsu.insert("プロジェクトID",content);
    
    Bucket res = insert.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//storage.googleapis.com/storage/v1/b
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setEnableObjectRetention|Boolean|オブジェクト保持を永続的に有効にするか|
|setPredefinedAcl|String|バケットに定義する[アクセス制御リスト(ACL)の定義](#アクセス制御リストaclの定義)|
|setPredefinedDefaultObjectAcl|String|バケットに定義するデフォルトの[アクセス制御リスト(ACL)の定義](#アクセス制御リストaclの定義)|
|setProjection|String|設定するプロパティのセット<br>"full"(全てのプロパティ)、"noAcl"(ACL以外の全てのプロパティ)|

#### アクセス制御リスト(ACL)の定義
|定義値|内容|
|---|---|
|authenticatedRead|プロジェクトチームの所有者がOWNERアクセス権を取得し、アクセス権allAuthenticatedUsersを取得|
|private|プロジェクトチームの所有者がOWNERアクセス権を取得|
|projectPrivate|プロジェクトチームのメンバーは、それぞれの役割に応じてアクセス権を取得|
|publicRead|プロジェクトチームの所有者がOWNERアクセス権を取得し、 アクセス権allUsersを取得|
|publicReadWrite|プロジェクトチームの所有者がOWNERアクセス権を取得し、アクセス権allUsersを取得|

#### 1.2.3. リクエストボディ
Storage.Bucketsのsetメソッドにより、リクエストボディを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setName|String|【生成の場合のみ】<br><br>【必須】バケットの名前|	
|setAcl|List\<[BucketAccessControl](#bucketaccesscontrolset)\>|【上書きの場合は必須】<br><br>バケットのアクセス制御<br>【[Bucket.IamConfiguration.UniformBucketLevelAccess.setEnabled(false)](#bucketiamconfigurationuniformbucketlevelaccessset)の場合のみ】|
|setAutoclass|[Bucket.Autoclass](#bucketautoclassset)|バケットのAutoclass構成|
|setBilling|[Bucket.Billing](#bucketbillingset)|バケットの課金構成|
|setCors|List\<[Bucket.Cors](#bucketcorsset)\>|バケットのCross-OriginResourceSharing(CORS)構成|
|setCustomPlacementConfig|[Bucket.CustomPlacementConfig](#bucketcustomplacementconfigset)|【生成の場合のみ】<br><br>バケットのカスタムロケーション構成|
|setDefaultEventBasedHold|Boolean|eventBasedHoldを自動的に適用するか|
|setDefaultObjectAcl|List\<[ObjectAccessControl](#objectaccesscontrolset)\>|ACLが提供されていない場合に新しいオブジェクトに適用されるデフォルトのアクセス制御<br>【[Bucket.IamConfiguration.UniformBucketLevelAccess.setEnabled(false)](#bucketiamconfigurationuniformbucketlevelaccessset)の場合のみ】|
|setEncryption|[Bucket.Encryption](#bucketencryptionset)|バケットの暗号化構成|
|setIamConfiguration|[Bucket.IamConfiguration](#bucketiamconfigurationset)|バケットのIAM構成|
|setLabels|Map\<String,String\>|ユーザーが指定したバケットラベル<br>キー：バケットID|
|setLifecycle|[Bucket.Lifecycle](#bucketlifecycleset)|バケットのライフサイクル構成|
|setLocation|String|【生成の場合のみ】<br><br>バケットの場所|
|setLogging|[Bucket.Logging](#bucketloggingset)|バケットのログ構成|
|setRetentionPolicy|[Bucket.RetentionPolicy](#bucketretentionpolicyset)|バケットの保持ポリシー|
|setRpo|String|バケットのリージョン間レプリケーションの目標復旧ポイント<br>"DEFAULT"(デフォルトのレプリケーション)、"ASYNC_TURBO"(ターボ レプリケーション)|
|setSoftDeletePolicy|[Bucket.SoftDeletePolicy](#bucketsoftdeletepolicyset)|バケットの論理的な削除ポリシー|
|setStorageClass|String|バケットのデフォルトの[ストレージクラス](#ストレージクラス)|
|setVersioning|[Bucket.Versioning](#bucketversioningset)|バケットのバージョン管理構成|
|setWebsite|[Bucket.Website](#bucketwebsiteset)|バケットのWebサイト構成|

#### BucketAccessControl(Set)
|メソッド|引数|説明|
|---|---|---|
|setId|String|アクセス制御エントリID|
|setBucket|String|バケットの名前|
|setKind|String|リソースの種類<br>固定文字列："storage#bucketAccessControl"| 
|setDomain|String|エンティティに関連付けられているドメイン|
|setEmail|String|エンティティに関連付けられているメールアドレス|
|setEntity|String|権限を保持するエンティティ<br><br>次のいずれかの形式<br>user-{email}<br>group-{groupId}<br>group-{email}<br>domain-{domain}<br>project-{team-projectId}<br>allUsers<br>allAuthenticatedUsers|
|setEntityId|String|エンティティID|
|setEtag|String|アクセス制御エントリのHTTPエンティティタグ|
|setProjectTeam|[BucketAccessControl.ProjectTeam](#bucketaccesscontrolprojectteamset)|エンティティに関連付けられているプロジェクトチーム|
|setRole|String|エンティティのアクセス許可<br>"OWNER"、"READER"、"WRITER"|
|setSelfLink|String|このアクセス制御エントリへのリンク|

#### BucketAccessControl.ProjectTeam(Set)
|メソッド|引数|説明|
|---|---|---|
|setProjectNumber|String|プロジェクト番号| 
|setTeam|String|チーム役割<br>"editors"、"owners"、"viewers"|

#### Bucket.Autoclass(Set)
|メソッド|引数|説明|
|---|---|---|
|setEnabled|Boolean|Autoclassが有効か|
|setTerminalStorageClass|String|オートクラスが有効なバケット内のオブジェクトがアクセスされなかった場合に遷移する[ストレージクラス](#ストレージクラス)|

#### Bucket.Billing(Set)
|メソッド|引数|説明|
|---|---|---|
|setRequesterPays|Boolean|リクエスターの支払いが有効か|

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

#### Bucket.CustomPlacementConfig(Set)
|メソッド|引数|説明|
|---|---|---|
|setDataLocations|List\<String\>|デュアルリージョン バケットを構成するリスト|

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

#### ObjectAccessControl.ProjectTeam(Set)
|メソッド|引数|説明|
|---|---|---|
|setProjectNumber|String|プロジェクト番号| 
|setTeam|String|チーム役割<br>"editors"、"owners"、"viewers"|

#### Bucket.Encryption(Set)
|メソッド|引数|説明|
|---|---|---|
|setDefaultKmsKeyName|String|オブジェクトの暗号化に使用されるCloud KMS Key|

#### Bucket.IamConfiguration(Set)
|メソッド|引数|説明|
|---|---|---|
|setPublicAccessPrevention|String|バケットのパブリック アクセス防止"inherited"ステータス|
|setUniformBucketLevelAccess|[Bucket.IamConfiguration.UniformBucketLevelAccess](#bucketiamconfigurationuniformbucketlevelaccessset)|バケットの均一なバケットレベルのアクセス 構成|

#### Bucket.IamConfiguration.UniformBucketLevelAccess(Set)
|メソッド|引数|説明|
|---|---|---|
|setEnabled|Boolean|バケットが均一なバケットレベルのアクセスを使用するか|

#### Bucket.Lifecycle(Set)
|メソッド|引数|説明|
|---|---|---|
|setRule|List\<[Bucket.Lifecycle.Rule](#bucketlifecycleruleset)\>|ライフサイクル管理ルール|

#### Bucket.Lifecycle.Rule(Set)
|メソッド|引数|説明|
|---|---|---|
|setAction|List\<[Bucket.Lifecycle.Rule.Action](#bucketlifecycleruleactionset)\>|実行するライフサイクルアクション|
|setCondition|[Bucket.Lifecycle.Rule.Condition](#bucketlifecycleruleconditionset)|アクションが実行される条件|

#### Bucket.Lifecycle.Rule.Action(Set)
|メソッド|引数|説明|
|---|---|---|
|setStorageClass|String|新しい[ストレージクラス](#ストレージクラス)|
|setType|String|アクションのタイプ|

#### Bucket.Lifecycle.Rule.Condition(Set)
|メソッド|引数|説明|
|---|---|---|
|setAge|Integer|オブジェクトの経過時間|
|setCreatedBefore|DateTime|UTCで指定された日付の午前0時より前にオブジェクトが作成された時刻|
|setCustomTimeBefore|DateTime|オブジェクトのメタデータがこのライフサイクル条件で使用される日付よりも前の日付に設定された時刻|
|setDaysSinceCustomTime|Integer|オブジェクトに設定されたユーザー指定のタイムスタンプから経過した日数|
|setDaysSinceNoncurrentTime|Integer|オブジェクトの非現行タイムスタンプから経過した日数|
|setIsLive|Boolean|オブジェクトのライブバージョンと一致しているか|
|setMatchesPrefix|List\<String\>|オブジェクトの接頭辞|
|setMatchesSuffix|List\<String\>|オブジェクトの接尾辞|
|setMatchesStorageClass|List\<String\>|ストレージクラスを持つオブジェクト|
|setNoncurrentTimeBefore|DateTime|非最新になったオブジェクトの時刻|
|setNumNewerVersions|Integer|新しいバージョン|

#### Bucket.Logging(Set)
|メソッド|引数|説明|
|---|---|---|
|setLogBucket|String|現在のバケットのログを配置する宛先バケット|
|setLogObjectPrefix|String|ログオブジェクト名のプレフィックス|

#### Bucket.RetentionPolicy(Set)
|メソッド|引数|説明|
|---|---|---|
|setRetentionPeriod|Long|バケット内のオブジェクトを保持し、削除、置換、または非最新にすることができない期間(秒単位)|

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

#### Bucket.Versioning(Set)
|メソッド|引数|説明|
|---|---|---|
|setEnabled|Boolean|このバケットのバージョン管理が完全に有効か|

#### Bucket.Website(Set)
|メソッド|引数|説明|
|---|---|---|
|setMainPageSuffix|String|サフィックス|
|setNotFoundPage|String|オブジェクトが欠落している場合の名前付きオブジェクト|

#### ストレージクラス
|定義値|ストレージクラス|最小保存期間|回収料金|通常の月間可用性|
|---|---|---|---|---|
|STANDARD|標準ストレージ|なし|なし|マルチリージョンおよびデュアルリージョンで　>　99.99%<br>地域では 99.99%|
|NEARLINE|ニアラインストレージ|30日|あり|マルチリージョンおよびデュアルリージョンで 99.95%<br>地域では99.9%|
|COLDLINE|コールドラインストレージ|90日|あり|マルチリージョンおよびデュアルリージョンで 99.95%<br>地域では99.9%|
|ARCHIVE|アーカイブストレージ|365日|あり|マルチリージョンおよびデュアルリージョンで 99.95%<br>地域では99.9%|

### 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. バケットを上書き
指定したバケットを上書きします。

[3. バケットを更新](#3-バケットを更新)と違うところは、
指定した存在するバケットを新しいバケットに置き換えます。

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

### 2.2. 実行
バケットのアクセス制御(ACL)の指定は必須です。

```java
public static void main(String[] args) throws Exception{
    Storage storage = getStorage();
    Storage.Buckets buckets = storage.buckets();
    
    Bucket content = new Bucket();
    content.setAcl(new ArrayList<>());
    Storage.Buckets.Update update = buckets.update("バケットID", content);
    
    Bucket res = update.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
PUT:　https:\//storage.googleapis.com/storage/v1/b/{バケットID}
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setIfMetagenerationMatch|Long|メタ世代番号(metageneration)と一致する場合のみ設定を反映|
|setIfMetagenerationNotMatch|Long|メタ世代番号(metageneration)と一致しない場合のみ設定を反映|
|setPredefinedAcl|String|バケットに定義する[アクセス制御リスト(ACL)の定義](#アクセス制御リストaclの定義)|
|setPredefinedDefaultObjectAcl|String|バケットに定義するデフォルトの[アクセス制御リスト(ACL)の定義](#アクセス制御リストaclの定義)|
|setProjection|String|設定するプロパティのセット<br>"full"(全てのプロパティ)、"noAcl"(ACL以外の全てのプロパティ)|

#### 2.2.3. リクエストボディ
Bucketのsetメソッドにより、リクエストボディを追加できます。

[1.2.3. リクエストボディ](#123-リクエストボディ)と同じです。

### 2.3. レスポンスの内容
#### Bucket
[1.3. レスポンスの内容(Bucket)](#bucket)と同じです。

## 3. バケットを更新
指定したバケットのメタデータを更新します。

[2. バケットを上書き](#2-バケットを上書き)と違うところは、
指定したバケットのメタデータのみを更新します。

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

### 3.2. 実行

```java
public static void main(String[] args) throws Exception{
    Storage storage = getStorage();
    Storage.Buckets buckets = storage.buckets();
    
    Bucket content = new Bucket();
    //更新内容を設定します。
    
    Storage.Buckets.Patch patch = buckets.patch("バケットID", content);
    Bucket res = patch.execute();
    System.out.println(res);
}
```
#### 3.2.1. HTTPリクエスト
PATCH:　https:\//storage.googleapis.com/storage/v1/b/{バケットID}
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setIfMetagenerationMatch|Long|メタ世代番号(metageneration)と一致する場合のみ設定を反映|
|setIfMetagenerationNotMatch|Long|メタ世代番号(metageneration)と一致しない場合のみ設定を反映|
|setPredefinedAcl|String|バケットに定義する[アクセス制御リスト(ACL)の定義](#アクセス制御リストaclの定義)|
|setPredefinedDefaultObjectAcl|String|バケットに定義するデフォルトの[アクセス制御リスト(ACL)の定義](#アクセス制御リストaclの定義)|
|setProjection|String|設定するプロパティのセット<br>"full"(全てのプロパティ)、"noAcl"(ACL以外の全てのプロパティ)|

#### 3.2.3. リクエストボディ
Bucketのsetメソッドにより、リクエストボディを追加できます。

[1.2.3. リクエストボディ](#123-リクエストボディ)と同じです。

### 3.3. レスポンスの内容
#### Bucket
[1.3. レスポンスの内容(Bucket)](#bucket)と同じです。

## 4. 空のバケットを削除
指定した空のバケットを削除します。

このAPIで削除できるのはバケットが空の場合のみです。
バケットが空ではない場合は例外が発生します。

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

### 4.2. 実行

```java
public static void main(String[] args) throws Exception{
    Storage storage = getStorage();
    Storage.Buckets buckets = storage.buckets();
    
    Storage.Buckets.Delete delete = buckets.delete("バケットID");
    
    delete.execute();
}
```
#### 4.2.1. HTTPリクエスト
DELETE:　https:\//storage.googleapis.com/storage/v1/b/{バケットID}
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setIfMetagenerationMatch|Long|メタ世代番号(metageneration)と一致する場合のみ削除する|
|setIfMetagenerationNotMatch|Long|メタ世代番号(metageneration)と一致しない場合のみ削除する|

#### 4.2.3. リクエストボディ
リクエストボディはありません。

### 4.3. レスポンスの内容
レスポンスはありません。
削除に失敗した場合は例外が発生します。

<br>
<br>
おしまい。。