[今更]API Gatewayについてまとめてみた[自分用]

API Gatewayについて自分用にまとめてみました

## そもそもAPIとは何か

「Application Programming Interface」の略。
インターフェイスとは「繋ぐもの」という意味です。身近にあるものだとrightningケーブルや、USBケーブルなどもインターフェイスの1種になります。

なのでそのまま訳すと、アプリケーションとプログラミングを繋ぐものということになります。

例えばtwitterでは、最新のツイートを取得する機能などが公開されています。

利用申請などをし登録をすると、APIのベースとなるURLが用意されておりAPIキーという認証情報を指定して利用します。

サイトにtwitterのタイムラインが埋め込まれていたり、youtubeの動画をyoutube以外のサイトで再生したりなどといった用途に使うものというイメージです。

参考サイト
https://webpia.jp/application_programming_interface/


## API Gatewayとは何か

上記で説明した内容のAWSバージョンと考えてもらえればイメージがしやすいかと思います。
インターネット上でAWSのリソースを使えるようにするためのものです。

API Gatewayを使うことによって簡単にAPIの作成、管理、監視などが行えます。

## 早速使ってみる

今回は他サービスとの連携はせずMockという固定のjsonを返すだけで設定してみます。

![スクリーンショット 2022-12-04 18.36.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/10b4a4fa-fc27-afda-85d8-a2cfff5aa8c1.png)

API GatewayのコンソールからRest APIの構築を選択し任意のAPI名を入力、エンドタイプをリージョンを選択してAPiの作成をクリック

![スクリーンショット 2022-12-04 18.39.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/c0ff4e52-93bf-9a5b-5340-44df477f73b0.png)

まだ何もリソースのないAPIができました。リソースを作成するので「アクション」からリソースの作成を選択します。

![スクリーンショット 2022-12-04 18.41.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/af2a8453-af2d-92cd-e738-bf8a45f20a89.png)

リソースの作成画面です。任意のリソース名を入力後、リソースの作成をクリック

![スクリーンショット 2022-12-04 18.43.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/069abea0-3e96-ddc3-f47e-832752d71ac3.png)

「sample」というリソースができたのでアクションからメソッドの作成を選択します。

![スクリーンショット 2022-12-04 18.45.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/cbe6fa4f-0f1b-72b7-b95b-b58a984e6ae2.png)

メソッドの作成画面です。「GET」を選択、Mockを選択し「保存」します。

![スクリーンショット 2022-12-04 18.56.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/e85b023f-df06-7dac-4403-00a2d550bd01.png)


「統合レスポンス」→「マッピングテンプレート」からjson入力欄に以下のように入力します。

```
{
    "statusCode": 200,
    "body": {
        {
            "report_id": 5,
            "report_title" : "Hello, world"
        },
        {
            "report_id": 7,
            "report_title" : "Good morning!"
        }
    }
}

```

ダブルクオーテーションの部分は適宜変えても大丈夫です。

画面上部にあるメソッドの実行リンクから戻り念のためテスト実行します。

![スクリーンショット 2022-12-04 19.00.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/28543840-e769-1f15-35e2-8cd60eedba26.png)


レスポンス200で正常に動作しているようです。

![スクリーンショット 2022-12-04 19.02.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/b54bad36-7bfc-fe42-2a16-bd2859d7a879.png)

次は「アクション」からAPIのデプロイを選択します。

![スクリーンショット 2022-12-04 19.04.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/8056ce85-498e-3385-4010-542fa28d8b24.png)

任意のステージ名を入力してデプロイをクリックします。

![スクリーンショット 2022-12-04 19.05.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/1e549bfe-cfc1-94e0-4024-2dee4a3b5802.png)

デプロイできました。

ここで少しハマりましたが、devステージのURLではなく以下のスクショのGETのページのURLからjsonレスポンスを受け取るようにします。

![スクリーンショット 2022-12-04 19.12.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/57c5b805-9f2a-3d7a-7c0c-25ac21f32a4e.png)

インターネットを介して、レスポンスを受け取ることができました。

![スクリーンショット 2022-12-04 19.14.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/6c6fcc39-4ec1-ceda-d783-c3f32aeae329.png)

お疲れ様でした。