hasura-rest-hands-on/docs/create-rest-endpoint.md
2021-07-25 10:51:51 +09:00

73 lines
4 KiB
Markdown

# REST APIエンドポイントの作成
ここまでは、GraphQLを使った操作を試しました。この時点でリクエストヘッダーに秘密鍵を与えれば、実際にGraphQL APIエンドポイントを利用することが可能です。
このハンズオンでは最後にREST APIエンドポイントを作成し、WebアプリケーションからGraphQL APIではなくREST APIを利用します。ここからはそのための手順を説明します。
## 設計
Hasuraは、GraphQL QueryをREST化することが可能です。このハンズオンでは、次の仕様のREST APIエンドポイントを作成します。
| 名称 | HTTPメソッドとパス | 説明 |
| ------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------- |
| ページの取得 | `GET /api/rest/page/:id` | 割り当てられた識別子 `id` をもつページを取得します。レスポンスボディには `data.page.content` プロパティを含みます。 |
| ページの更新 | `PUT /api/rest/page/:id` | 割り当てられた識別子 `id` をもつページを更新します。リクエストボディには `content` プロパティを与えます。 |
## 「ページの取得 (`GET page/:id`)」エンドポイントの作成
ページを取得するためのREST APIエンドポイントを作成します。
コンソールのトップ画面のGraphiQLのパネルにアクセスし、次のコードを書きます。
```graphql
query getPage($id: Int!) {
page: pages_by_pk(id: $id) {
id
content
}
}
```
![](https://lh3.googleusercontent.com/WpWX9e0zMECBpUvdyFXyPAxKauwgpNVAwGSLzjt3M99aeL9t90CrqZrdpEf39uh5SKPBeYvfMX0i6KvTuXf39_rccK1o7aohwFL_OCmz0TX-i0Lc2tlJpk5gPMdTrEqzKyElKvPzEQ=w1280)
[REST]ボタンを選択し、REST APIエンドポイント作成フォームを表示します。次の必要事項を入力し、作成ボタンを選択しエンドポイントを作成します。
| 項目 | 説明 | 内容 |
| -------- | ----------------------- | ---------- |
| Name | エンドポイントの名称 | get page |
| Location | `/api/rest/` 以降のパス | `page/:id` |
| Method | HTTPメソッド | `GET` |
![](https://lh3.googleusercontent.com/fKkiNL4nWYUtiG8OfAk8mhTxdJuZQclLLBWheVclr4EcC7ggsZzpI4mTYGQ-6pvWZWApa2acaUJKVjOFy5oHwqhtVfn4arYX01B29yUvOQwWPRIq-6JOBFNTfP_FxoNJNRaseYEMbw=w1280)
## 「ページの更新 (`PUT page/:id`)」エンドポイントの作成
ページを更新するためのREST APIエンドポイントを作成します。
コンソールのトップ画面のGraphiQLのパネルにアクセスし、次のコードを書きます。
```graphql
mutation putPage($id: Int!, $content: jsonb!) {
page: insert_pages_one(
object: { id: $id, content: $content }
on_conflict: { constraint: pages_pkey, update_columns: content }
) {
id
content
}
}
```
![](https://lh3.googleusercontent.com/yeEU1sF7DR3VA7tWn-FDofpFIfK93q2hssqnn25c_-0bnAbo8WdzdTahQ3HVst7hCniT5hJqHgWS9Pu9zTQorHxErtdp8PSFJmgsU6R0G_oPzF__Up-aSdHQWFc_uuWyVU_Ux50jlw=w1280)
[REST]ボタンを選択し、REST APIエンドポイント作成フォームを表示します。次の必要事項を入力し、作成ボタンを選択しエンドポイントを作成します。
| 項目 | 説明 | 内容 |
| -------- | ----------------------- | ---------- |
| Name | エンドポイントの名称 | put page |
| Location | `/api/rest/` 以降のパス | `page/:id` |
| Method | HTTPメソッド | `PUT` |
![](https://lh3.googleusercontent.com/NUKkifFtbdjjti9tga3fHp0-iIc4e48Cz2HrBOUngbaDad5an29hJ9ucn7kG3MXLIyZw80wpfG3aZZrS9kDEYUnl9cV3VB0oZ6LqIRKbHlgUGBF2PJJC9ifLCABZhmn1Rv8u9mZ8qw=w1280)
作成が完了すると作成したREST APIエンドポイントの一覧が表示されます。