[Cloud Storage API(V2)] Javaでバケットのアクセス制御リスト(ACL)エントリを取得する

Cloud Storage API V2(Java)を使用して、
Cloud Storageのバケットのアクセス制御リスト(ACL)エントリを取得する方法
についてご紹介します。

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

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

## 1. ACLリストを取得
指定したバケットのACLエントリのリストを取得します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
StorageScopes.CLOUD_PLATFORM
StorageScopes.DEVSTORAGE_FULL_CONTROL
```
[⧉[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.BucketAccessControls access = storage.bucketAccessControls();
    Storage.BucketAccessControls.List list = access.list("バケットID");
    
    BucketAccessControls res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//storage.googleapis.com/storage/v1/b/{バケットID}/acl
が実行されます。

#### 1.2.2. クエリパラメータ
クエリパラメータはありません。

### 1.3. レスポンスの内容
#### BucketAccessControls
|メソッド|戻り値|説明|
|---|---|---|
|getKind|String|リソースの種類<br>固定文字列："storage#bucketAccessControls"|
|getItems|List\<[BucketAccessControl](#bucketaccesscontrol)\>|ACLのリスト|

#### BucketAccessControl
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|アクセス制御エントリID|
|getKind|String|リソースの種類<br>固定文字列："storage#bucketAccessControl"|
|getBucket|String|バケットの名前|	
|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"|

## 2. ACLを取得
指定したACLエントリのメタデータを取得します。

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

### 2.2. 実行
エンティティは、[BucketAccessControlのgetEntity()](#bucketaccesscontrol)で取得できる値を使用します。

```java
public static void main(String[] args) throws Exception{
    Storage storage = getStorage();
    Storage.BucketAccessControls access = storage.bucketAccessControls();
    Storage.BucketAccessControls.Get get = access.get("バケットID","エンティティ");
    
    BucketAccessControl res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//storage.googleapis.com/storage/v1/b/{バケットID}/acl/{エンティティ}
が実行されます。

#### 2.2.2. クエリパラメータ
クエリパラメータはありません。

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