[Cloud Storage API(V2)] JavaでCloud StorageのHMACキー情報を取得する

Cloud Storage API V2(Java)を使用して、
Cloud StorageのHMACキー情報を取得する方法
についてご紹介します。

**HMACキーとは**
アカウントに関連付けられた認証情報の一種です。 
HMACキーを使用して署名を作成すると、その署名がCloudStorageに対するリクエストに組み込まれます。

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

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

## 1. HMACキーリストを取得
指定したプロジェクトのHMACキーリストを取得します。

### 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.Projects projects = storage.projects();
    Storage.Projects.HmacKeys hmacKeys = projects.hmacKeys();
    Storage.Projects.HmacKeys.List list = hmacKeys.list("プロジェクトID");
    
    HmacKeysMetadata res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//storage.googleapis.com/storage/v1/projects/{プロジェクトID}/hmacKeys
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setMaxResults|Long|取得する最大数|
|setPageToken|String|取得するページトークン|
|setServiceAccountEmail|String|取得するHMACキーのサービスアカウントのメールアドレス|
|setShowDeletedKeys|Boolean|DELETED状態のキーを含めるか|

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

#### HmacKeyMetadata
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|HMACキーID|	
|getKind|String|リソースの種類<br>固定文字列："storage#hmacKeyMetadata"|
|getAccessId|String|HMACキーのアクセスID|	
|getEtag|String|HMACキーのHTTPエンティティタグ|	
|getSelfLink|String|リソースへのリンク|
|getProjectId|String|キーが認証するサービスアカウントを所有するプロジェクトID|	
|getServiceAccountEmail|String|キーに関連付けられたサービスアカウントのメールアドレス|	
|getState|String|キーの状態<br>"ACTIVE"、"INACTIVE"、"DELETED"|
|getTimeCreated|DateTime|HMACキーの作成時刻|
|getUpdated|DateTime|HMACキーメタデータの更新時刻|

## 2. HMACキーを取得
指定したHMACキーのメタデータを取得します。

### 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. 実行
HMACキーのアクセスIDは、[HmacKeyMetadata](#hmackeymetadata)のgetAccessId()で取得できる値を使用します。

```java
public static void main(String[] args) throws Exception{
    Storage storage = getStorage();
    Storage.Projects projects = storage.projects();
    Storage.Projects.HmacKeys hmacKeys = projects.hmacKeys();
    Storage.Projects.HmacKeys.Get get = hmacKeys.get("プロジェクトID","HMACキーのアクセスID");

    HmacKeyMetadata res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//storage.googleapis.com/storage/v1/projects/{プロジェクトID}/hmacKeys/{HMACキーのアクセスID}
が実行されます。

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

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