CData Software ハンズオン（CData API Server で作成したWebAPIにPostmanからアクセス）

# 使用する製品

- [CData API Server](http://www.cdata.com/jp/apiserver/)
- [Postman](https://www.getpostman.com/)
- [MySQL Community Edition](https://www.mysql.com/jp/products/community/)

# 前提

下記の手順を実施してブラウザからCData API Serverにアクセス出来る事。

[CData Software ハンズオン（RDBからWebAPIをポイント＆クリックで作成 編）](https://qiita.com/kuwazzy/items/c664570c9d4732a57fac)

# 手順

## データの取得（GET：Select）

CData API ServerのAPIタブを開き、作成したAPIのリソース（例：sakila_actor）のHTTPメソッドのGETのURLエンドポイント（例： http://localhost:8387/api.rsc/sakila_actor/ ）を手元に控えておきます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/02f2f7ac-9131-174f-c441-7f9783b7c510.png)

また、「設定 > ユーザー」タブで作成した、ユーザのAuthトークンを控えておきます。権限が、GET（読み取り）　だけでなくPOST,PUT,MERGE,PATCH,DELETEといった更新系のメソッドも付与してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/e9e0a9ab-a476-33e9-11f6-7acd48c7ed4e.png)

Postmanを起動します。CreateNewのダイアログが表示されますが、今回は右上の×ボタンをクリックしてダイアログを閉じます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/deb4a439-bf01-3f4e-d1b9-13d409ed31e6.png)

右側のNewTabでHTTPメソッドが「GET（取得）」となっていることを確認して右横の「Enter request URL」に先の手順で手元に控えたURLエンドポイント（例： http://localhost:8387/api.rsc/sakila_actor/ ）をセットします。URLの下に、「Authorization」「Headers」といったタブが並んでいるので「Headers」を開き、HTTPリクエストのHeaderに指定するAuthトークンの情報をセットします。

| Key       | Value |
|:-----------------|:------------------|
| x-cdata-authtoken  | 上記手順で取得したAuthトークンの値 |

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/58ec1917-5810-ce87-7ab7-1fa2859b411f.png)

青い「Send」ボタンをクリックしてリクエストを投げてみます。下部のレスポンスの「Body」として、MySQLの該当テーブルに格納されているデータがJSON形式のデータとして表示されれば成功です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/68f53105-8cd0-c81e-f65c-cdba90216ddf.png)

MySQL Workbenchを開き、該当テーブルのデータを取得して同じ内容か確認してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/405ef13f-3aa1-3a32-8c4d-bb8d0a433869.png)

## データの作成（POST：Insert）

再び、CData API ServerのAPIタブを開き、作成したAPIのリソース（例：sakila_actor）のHTTPメソッドのPOSTのURLエンドポイント（例： http://localhost:8387/api.rsc/sakila_actor/ ）を手元に控えておきます。また、POSTのレコードを開くとJavascriptからの呼び出しサンプルが表示されます。「Javascript」を「CURL」に切り替えるとコマンドラインCURLでの実行サンプルが表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/1180fbc6-9d3f-cc0f-b687-8dd359336c60.png)

下記例の青文字部分が、MySQLに登録する値でJSON形式のデータとなります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/170d5b9b-55b1-1608-ce4d-f020e44728b5.png)

「actor_id」と「last_update」は自動でセットされる項目なので「first_name」「last_name」のみのjSONデータを準備します。

```json
{
 "first_name": "テスト名１",
 "last_name": "テスト姓１"
}
```

Postmanで新しいタブを作成して下記の情報をセットします。
| 項目       | 値 |
|:-----------------|:------------------|
| HTTPメソッド  | POST |
| Request URL  | 例： http://localhost:8387/api.rsc/sakila_actor/ |
| Headersタブ  | 上記GETの手順と同じAuthトークンの情報をセット |
| Boadyタブ  | 「raw」を選択、 「Text」から「JSON（application/json）に変更、 上記のJSONデータをセット|

青い「Send」ボタンをクリックしてリクエストを投げてみます。Responseの「Status：201 created」で、下部のレスポンスの「Body」として登録したJSON形式のデータとして表示されれば成功です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/5047d94b-33fa-3161-0054-050b1b408b92.png)

MySQL Workbenchを開き、該当テーブルのデータを再度取得してデータが登録されたか確認してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/7d5c9365-5b4e-47b2-2591-2b53c7fea09c.png)

## データの更新（PUT：Update）

再び、CData API ServerのAPIタブを開き、作成したAPIのリソース（例：sakila_actor）のHTTPメソッドのPUTのURLエンドポイント（例： http://localhost:8387/api.rsc/sakila_actor(<actor_id>) ）を手元に控えておきます。「actor_id」部分は更新するレコードの「actor_id」(例：http://localhost:8387/api.rsc/sakila_actor(201) )をセットしてください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/6f494562-8c28-111e-d819-583d0845f63d.png)

更新するJSONデータを準備します。

```json
{
 "first_name": "CData",
 "last_name": "太郎"
}
```

Postmanで新しいタブを作成して下記の情報をセットします。
| 項目       | 値 |
|:-----------------|:------------------|
| HTTPメソッド  | PUT |
| Request URL  | 例： http://localhost:8387/api.rsc/sakila_actor(201) |
| Headersタブ  | 上記GETの手順と同じAuthトークンの情報をセット |
| Boadyタブ  | 「raw」を選択、 「Text」から「JSON（application/json）に変更、 上記のJSONデータをセット|

青い「Send」ボタンをクリックしてリクエストを投げてみます。Responseの「Status：200 OK」で、下部のレスポンスの「Body」として更新したJSON形式のデータとして表示されれば成功です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/dc1800e4-6c5d-12c4-c5b1-bce1f110f577.png)

MySQL Workbenchを開き、該当テーブルのデータを再度取得してデータが更新されたか確認してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/38e9785d-008e-22a2-55f5-0478803c6e4a.png)

## データの削除（DELETE：Delete）

再び、CData API ServerのAPIタブを開き、作成したAPIのリソース（例：sakila_actor）のHTTPメソッドのDeleteのURLエンドポイント（例： http://localhost:8387/api.rsc/sakila_actor(<actor_id>) ）を手元に控えておきます。「actor_id」部分は削除するレコードの「actor_id」(例：http://localhost:8387/api.rsc/sakila_actor(201) )をセットしてください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/542ece81-2437-a68e-48c7-540d2625f04a.png)

Postmanで新しいタブを作成して下記の情報をセットします。
| 項目       | 値 |
|:-----------------|:------------------|
| HTTPメソッド  | DELETE |
| Request URL  | 例： http://localhost:8387/api.rsc/sakila_actor(201) |
| Headersタブ  | 上記GETの手順と同じAuthトークンの情報をセット |

青い「Send」ボタンをクリックしてリクエストを投げてみます。Responseの「Status：204 No Content」が表示されれば成功です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/103ed9af-bb90-c3df-7b8d-a061b600cabb.png)

MySQL Workbenchを開き、該当テーブルのデータを再度取得してデータが削除されたか確認してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/e4a35ca7-a693-1542-4352-97f406ebb823.png)

# まとめ

PostmanからのHTTPリクエストでMySQLのデータのCRUD操作を行うことができました。