[Google Tasks API(V1)] Javaでタスクリストを作成・更新・削除する

Google Tasks API V1(Java)を使用して、
タスクリストを作成・更新・削除する方法
についてご紹介します。

タスクリストはタイトルのみ更新できます。

Googleカレンダーからのタスク参照では、
画面左下にあるリストの情報が取得できます。
<img width="380" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/dcf61ef1-bf17-74bc-e8e4-debd9461f990.png">

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

|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を実行するには、以下のスコープを指定してください。
```
TasksScopes.TASKS
```
[⧉[Google Tasks API(V1)] JavaでTasks APIを使う(2.2 Tasksインスタンスを取得)](https://qiita.com/doran/items/8a3b7e24d9e0417a7f9a#22-tasksインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    Tasks tasks = getTasks();
    Tasks.Tasklists tasklists = tasks.tasklists();
    
    TaskList content = new TaskList();
    Tasks.Tasklists.Insert insert = tasklists.insert(content);
    
    TaskList res = insert.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//tasks.googleapis.com/tasks/v1/users/@me/lists
が実行されます。

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

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

|メソッド|引数|説明|
|---|---|---|
|setId|String|タスクリストID|
|setTitle|String|タスクリストのタイトル|

### 1.3. レスポンスの内容

#### TaskList

|メソッド|戻り値|説明|
|---|---|---|
|getKind|String|リソースの種類<br>固定文字列："tasks#taskList"|
|getId|String|タスクリストID|
|getEtag|String|Eタグ|
|getTitle|String|タスクリストのタイトル|
|getUpdated|String|タスクリストの最終更新日時|
|getSelfLink|String|このタスクリストを指すURL|

## 2. タスクリストを上書き
指定したタスクリストを上書きします。

[2.2.3. リクエストボディ(TaskList)のsetId()](#223-リクエストボディ)は必須です。
タスクリストIDを2度指定することになりますが、指定がないと例外になります。

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

### 2.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
TasksScopes.TASKS
```
[⧉[Google Tasks API(V1)] JavaでTasks APIを使う(2.2 Tasksインスタンスを取得)](https://qiita.com/doran/items/8a3b7e24d9e0417a7f9a#22-tasksインスタンスを取得)
でスコープを指定してください。

### 2.2. 実行

```java
public static void main(String[] args) throws Exception{
    Tasks tasks = getTasks();
    
    Tasks.Tasklists tasklists = tasks.tasklists();
    TaskList content = new TaskList();
    content.setId("タスクリストID");
    Tasks.Tasklists.Update update = tasklists.update("タスクリストID",content);
    
    TaskList res = update.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
PUT:　https:\//tasks.googleapis.com/tasks/v1/users/@me/lists/{タスクリストID}
が実行されます。

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

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

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

### 2.3. レスポンスの内容

#### TaskList

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

## 3. タスクリストを更新
指定したタスクリストを更新します。

[2. タスクリストを上書き](#2-タスクリストを上書き)と違うところは、
指定した存在するタスクリストを更新します。

### 3.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
TasksScopes.TASKS
```
[⧉[Google Tasks API(V1)] JavaでTasks APIを使う(2.2 Tasksインスタンスを取得)](https://qiita.com/doran/items/8a3b7e24d9e0417a7f9a#22-tasksインスタンスを取得)
でスコープを指定してください。

### 3.2. 実行

```java
public static void main(String[] args) throws Exception{
    Tasks tasks = getTasks();
    
    Tasks.Tasklists tasklists = tasks.tasklists();
    TaskList content = new TaskList();
    Tasks.Tasklists.Patch patch = tasklists.patch("タスクリストID",content);
    
    TaskList res = patch.execute();
    System.out.println(res);
}
```
#### 3.2.1. HTTPリクエスト
PATCH:　https:\//tasks.googleapis.com/tasks/v1/users/@me/lists/{タスクリストID}
が実行されます。

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

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

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

### 3.3. レスポンスの内容

#### TaskList

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

## 4. タスクリストを削除
指定したタスクリストを削除します。

### 4.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
TasksScopes.TASKS
```
[⧉[Google Tasks API(V1)] JavaでTasks APIを使う(2.2 Tasksインスタンスを取得)](https://qiita.com/doran/items/8a3b7e24d9e0417a7f9a#22-tasksインスタンスを取得)
でスコープを指定してください。

### 4.2. 実行

```java
public static void main(String[] args) throws Exception{
    Tasks tasks = getTasks();
    
    Tasks.Tasklists tasklists = tasks.tasklists();
    Tasks.Tasklists.Delete delete = tasklists.delete("タスクリストID");
    
    delete.execute();
}
```
#### 4.2.1. HTTPリクエスト
DELETE:　https:\//tasks.googleapis.com/tasks/v1/users/@me/lists/{タスクリストID}
が実行されます。

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

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

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

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