【AppSync】初めてのAppSync　#AWS

## AppSyncとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806193/f6f58f48-7df2-e70a-0361-2b10d9d20596.png)

### 一言要約
:::: note
AppSync は AWS の **GraphQL ※のマネージドサービス**。
※GraphQL は、REST API の限界を補完する形で登場し、必要なデータだけを効率よく取得できるのが特徴です。
::::

> よくワカラナイ…

AppSynの理解にたどり着くまでには
**①APIとは
②RestAPIとは
③GraphQLとは
④（やっと）AppSynの理解**
という順番になります。

さっそく一つ一つ見ていきましょう。


### もう少し詳しく

## ①API とは？
まず「API」とは、**アプリケーションがデータや機能を利用するための窓口**です。たとえば、スマホアプリがインターネットから最新のニュースを取得する時、ニュースサーバーと通信してデータを受け取るのに「API」を使います。この仕組みがあるおかげで、アプリとサーバーがスムーズにやり取りできるのです。

### 具体例
- **天気予報アプリ**: 気象データを持つサーバーと通信して最新の天気情報を取得。
- **SNS アプリ**: 自分のアカウントに関する情報や友達の投稿をサーバーから取得して表示。

API は、さまざまなアプリがデータや機能をやり取りするための「共通のルール」を提供するものです。

---

## ②REST API とは？
次に、**REST API** について見てみましょう。REST は、Web アプリケーションで広く使われている API の形式で、**各データの種類ごとに異なるURL（エンドポイント）を用意**します。そして、HTTP メソッド（GET, POST など）を使ってデータの取得や更新を行います。

### REST API の仕組み
たとえば、ブログアプリの場合、以下のようにデータを取得するエンドポイントを設定します。
- **投稿データ**: `/posts` という URL にアクセスすると、ブログ記事の一覧が取得できる。
- **コメントデータ**: `/comments` という URL にアクセスすると、コメントの一覧が取得できる。
- **ユーザーデータ**: `/users` という URL にアクセスすると、ユーザーの情報が取得できる。

これらのエンドポイントに対して個別にリクエストを送るため、**複数のデータが必要な場合、通信回数が増える**ことになります。たとえば、投稿データとコメントデータを同時に取得したいときは、別々のリクエストが必要です。

### REST API の課題
REST API は便利ですが、特定のケースでは非効率的になることがあります。たとえば、ブログの詳細ページを表示するために投稿データ・コメントデータ・ユーザーデータの3つが必要な場合、各エンドポイントに3回リクエストを送る必要があり、これが「通信オーバーヘッド」として負担になるのです。

---

## ③GraphQL とは？
**GraphQL** は、REST API の課題を解決するために Facebook が開発した API のクエリ言語です。GraphQL では、**単一のエンドポイント**（URL）から、複数の種類のデータを一度に取得できるようになります。

### GraphQL の仕組み
GraphQL では、クライアント（アプリのユーザー側）が「このデータが欲しい」とリクエスト内容を細かく指定できます。たとえば、ブログの詳細ページを表示するために必要な投稿・コメント・ユーザー情報を一度のリクエストで取得できます。

- **投稿データとコメントデータの同時取得**: `query { posts { title, content } comments { text, user } }` というクエリを送ると、必要な投稿データとコメントデータを一度に取得できます。
- **必要なデータだけ取得**: 必要なフィールド（例えば投稿のタイトルや本文のみ）を指定できるため、余計なデータが送られてくることがなくなります。

### GraphQL のメリット
1. **通信回数が減る**: 単一エンドポイントで複数のデータをまとめて取得できるため、通信回数が最小限になります。
2. **不要なデータを省ける**: クエリで必要な情報だけを指定できるので、余計なデータの受け取りを避けられます。

---

## REST API と GraphQL の違い

| 項目           | REST API                              | GraphQL                       |
|----------------|--------------------------------------|-------------------------------|
| エンドポイント | リソースごとに分けられる              | 単一のエンドポイント           |
| データ取得     | 各リソースに対して個別にリクエスト    | 必要なデータをまとめて取得     |
| 柔軟性         | クライアント側での取得が限定的        | クエリで取得内容を自由に指定   |
| 通信効率       | 必要なデータごとに通信回数が増える    | 通信回数を抑えつつデータ取得   |

このように、REST API はデータごとにエンドポイントが分かれ、アクセス回数が増えやすいのに対し、GraphQL は**一度のリクエストで必要なデータを効率的に取得**できるため、通信コストが抑えられるのが特徴です。

---

## ④Amazon AppSync の役割

AWS の **AppSync** は、GraphQL API を簡単に利用できるようにしたマネージドサービスです。複数のデータソース（DynamoDB、Lambda、RDS、HTTP API など）に接続して、サーバーレスでスケーラブルな API を構築できます。AppSync は、リアルタイムのデータ更新やロールベースのアクセス制御もサポートしているため、柔軟で安全なアプリケーションを構築するのに役立ちます。

### AppSync の主な特徴
1. **マルチデータソース対応**: DynamoDB や Lambda など、複数のデータソースに対応しているため、さまざまなデータを統合しやすい。
2. **リアルタイム更新**: GraphQL のサブスクリプション機能を活用し、リアルタイムでデータ更新が可能。これにより、チャットアプリやライブデータ表示のようなリアルタイム機能が必要なアプリに最適。
3. **セキュリティと RBAC**: Amazon Cognito と連携して、ユーザー認証やロールベースのアクセス制御（RBAC）を簡単に実現可能。これにより、特定のユーザーグループのみが特定のデータにアクセスできるように設定できます。

## もっと詳しくはBlackBeltから

<iframe width="560" height="315" src="https://www.youtube.com/embed/89NGPaxZlW0?si=Oa1sv-7_5WssEgT5" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

---

## まとめ

AppSync と GraphQL は、API 開発を一歩進めた新しいツールです。これらを使うことで、必要なデータだけを効率よく取得し、シンプルで柔軟な API を構築することができます。特に、REST API で生じがちな通信オーバーヘッドを解消し、一度のリクエストで複数のデータを取得できるのは大きなメリットです。

今や Web アプリケーションやモバイルアプリには、迅速でシンプル、そして拡張性のあるデータ取得方法が求められています。AppSync は、GraphQL の特徴を活かし、AWS の堅牢なインフラでそれを実現できるようにした強力なツールです。アプリ開発において、データの取得や操作をもっとシンプルにしたいと感じているなら、一度 AppSync と GraphQL を試してみてはいかがでしょうか。新しい API 開発のスタイルに出会えるかもしれません！