API超入門！最速で使えるAPIを実装する

# はじめに
こんにちは、ユーゴです。
最近、趣味でクラウドプラットフォームを遊んでいます。AWS, GCP, Azureなど色々と試しており、「こんなことができるのか、すげ〜」という感じです。
今回は、AWSを使用して、「とにかくAPIを自作してみたい！」という方に実装方法を紹介します。

# 結論
1. 「**Lambda**」でバックエンドを作成
2. 「**API Gateway**」でエンドポイントを作成
これだけで、APIを実装できます。しかも、今回はGUI操作で完結します。

# 対象読者
・**サーバーなんもワカランの人**
→ 今回は、サーバーレスで実装できます。AWS偉大。GASのデプロイと似たような感じです(GASでもAPIは作れるけど、APIのためのデプロイという感じではないので、APIを体系的に学習できない)

・**APIはちょっと分かるの人**
→ 「Slack API 叩いてみたことはある」という感じで、なんとなくAPIがどういうものか分かっていれば十分です

# 0. AWSアカウントを作成
今回は、APIを作成するために、AWSを使用して構築していきます。そのため、まずはAWSアカウントを作成しましょう。

こちらからアカウント作成が可能です。
[AWS Console - Signup](https://portal.aws.amazon.com/billing/signup?refid=94c18984-27d1-4395-8dae-cdbf523f1ae5&redirect_url=https%3A%2F%2Faws.amazon.com%2Fregistration-confirmation&language=ja_jp#/start/email)

よくあるサービス登録の手順なので、指示に従っていけば簡単に作成できると思います。

# 1. 「Lambda」でバックエンドを作成
AWSのコンソールにアクセスできたら、画面上部の検索バーに「Lambda」と入力し、「Lambda」をクリックします。

![スクリーンショット 2024-02-26 19.24.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/88898701-9372-4ee0-af92-7ed8c3ae519a.png)

---
画面が遷移したら、やや右上にある「関数の作成」をクリックします。

![スクリーンショット 2024-02-26 19.24.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/9ba82456-fab9-2f6d-b833-c7ce90765dfc.png)

---
①：関数名を入力します。今回は「qiita_test」としました。
②：言語を選択します。今回は「Python3.12」を選択しました。

どちらもお好みで入力してください。

![スクリーンショット 2024-02-26 19.27.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/a056b91f-dabf-6519-4f55-f028772b6a70.png)

---
入力できたら、右下の「関数の作成」を押します。
すると、数秒後に以下のような画面に遷移します。

![スクリーンショット 2024-02-26 19.31.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/c150f578-fd70-017b-a820-e6251868f583.png)

---
通常は「コードソース」の部分で、バックエンドを書いていきます。が、今回はデフォルトのままにします。何が行われているかというと、APIがコールされたら、レスポンスとして以下を返します。

```json
{
    'statusCode':200,
    'body':JSON.dumps('Hello from Lambda!')
}
```

![スクリーンショット 2024-02-26 19.32.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/609825e5-5809-cdc2-9faf-ddf125c5a013.png)

# 2. 「API Gateway」でエンドポイントを作成
画面上部の検索バーから、「api」と入力すると、「API Gateway」が出てくると思うので、それをクリックします。

![スクリーンショット 2024-02-26 19.34.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/e58c39ad-556b-39e4-8dfb-d20a210b4f3f.png)

---
すると、初回は以下のような画面が出てきます。今回は「REST API」で構築します。「REST API」の「構築」をクリックしてください。

![スクリーンショット 2024-02-26 19.36.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/be88330c-da99-a806-634d-8fafc75dff6e.png)

---
画面が遷移すると、以下のようになります。
「API名」を入力してください。今回は、「qiita_test_api」としました。
入力したら、「APIを作成」ボタンをクリックしてください。

![スクリーンショット 2024-02-26 19.39.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/3c6ac9d0-1ab0-bce5-3478-4c6a062642c9.png)

---
しばらくすると、以下のような画面になります。
「リソースを作成」をクリックしてください。

![スクリーンショット 2024-02-26 19.41.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/19b615ce-4fc9-7c97-2341-ba5ae88cda30.png)

---
しばらくすると、以下のような画面になります。
「リソース名」を入力してください。このリソース名は、APIを叩くときのURLに含まれます。今回の例だと、「http://〜〜〜/sample」というようになります。「〜〜〜」の部分は後ほど自動で割り当てられます。
入力したら、「リソースを作成」ボタンを押してください。

![スクリーンショット 2024-02-26 19.42.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/dd4d4df2-7f7c-2886-0468-c7b69ca709a1.png)

---
しばらく待つと、作成されたのが確認できます。

![スクリーンショット 2024-02-26 19.45.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/74358952-4bca-de3a-7aee-c3c31bc3f0ba.png)


---
作成されたリソース(今回は「sample」)が選択されているのを確認し、「メソッドを作成」ボタンをクリックします。

![スクリーンショット 2024-02-26 19.45.29のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/906d0d7d-763f-79b4-1604-82c6decc62d8.png)

---
画面が遷移したら、以下のようになります。
まず、「メソッドタイプ」を「GET」にします。
次に、「Lambda関数」の入力フィールドをクリックすると、作成したLambda関数一覧が表示されます。arnとはリソースを一意に識別するUIDのようなものです。末尾に、自分で決めた関数名も足されているので、すぐに見つけられます。
入力したら、「メソッドを作成」ボタンを押します。

![スクリーンショット 2024-02-26 19.49.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/4bfcbc49-b8bc-9c7e-2c50-c58a3da420c7.png)

![スクリーンショット 2024-02-26 19.52.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/b641b70a-0e90-7596-6994-fd8cc89e625b.png)

---
しばらくすると、GETが作成されたことが確認できます。

![スクリーンショット 2024-02-26 19.58.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/24b58f21-2d0e-5830-4b59-7310f8a3c177.png)

---
次に、「APIをデプロイ」ボタンをクリックしてください。

![スクリーンショット 2024-02-26 19.58.09のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/8f384cfa-bb82-057b-e696-09e9de433c6e.png)

---
ポップアップが出てきたら、「ステージを選択」をクリックし、

![スクリーンショット 2024-02-26 19.59.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/d0409aa5-da8c-79f1-5eec-3db3812331ee.png)

「新しいステージ」をクリックし、

![スクリーンショット 2024-02-26 19.59.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/198f32de-996a-0654-fc21-bdf02826e35b.png)

ステージ名を入力します。今回は「wip」としました。「dev」や「prod」など、必要に合わせて命名を考えてください。こちらも、「http://〜〜〜/wip/sample」のように、エンドポイントに含まれます。
入力したら、「デプロイ」を押します。

![スクリーンショット 2024-02-26 19.59.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/b87bf6b3-b4b0-f013-1ca5-e31974a68759.png)

---
デプロイすると、以下のような画面になります。
赤枠が、APIのエンドポイントです。「エンドポイント/リソース」というようなURLになります。
URLはコピーしておきましょう。画面を変えてしまっても、後から左のメニューで「ステージ」を選択すると確認できます。

![スクリーンショット 2024-02-26 20.03.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/72ddb582-538e-8ff9-a731-fd2b0e394ee2.png)

# 3. 確認
ターミナルで、curlを使って確認します。なお、確認方法はPostmanでもなんでもいいです。GASでUrlfetchしてもいいです。

```bash:リクエスト
curl 'https://{ID}.execute-api.ap-northeast-1.amazonaws.com/wip/sample'
```

```bash:レスポンス
{"statusCode": 200, "body": "\"Hello from Lambda!\""}
```

### 【補足】
・{ID}の部分は、APIデプロイ時のものをコピーしておけば気にしなくて大丈夫です。
・コピーしたURLに加えて、「sample」のようにリソース名を忘れないでください。

# まとめ
いかがだったでしょうか。今回は、AWSを使ったAPI実装の超入門編を紹介しました。

CI/CDにハマっていた時、Unityの成果物を自動で商品としてパッケージングするフローを作成しており、その一環で自分でAPIを作ってみたいと思ったのですが、「サーバーを立てる」「ポート開放する」「エンドポイントを設定する」など、ワケワカランの連続でした。その後紆余曲折しているうちに、AWSにたどり着いたという経緯がありました。今となっては、オンプレでサーバー立てて、マシンとルーターでポート開放の設定をして、fast apiでエンドポイントを設定して...というのもできるようになりましたが、まずはAWSでAPIをざっくりと作れるようになれると良いと思います。それに、今回のようにクラウドでも実務としてAPIを作ることはあると思います。個人情報などコンプラ的にオンプレの方がいいなどがあったときに、生々しいAPI作成の道を学習すれば良いかと思います。

AWSはこれだけでなく、
・サーバーを物理で用意しなくても構築できる(EC2)
・データベースをクラウド上で構築できる(RDS)
・ウェブアプリケーションをホストできる(Amplify)
といった具合で、とても多機能で便利なプラットフォームです。ゲーム畑の人間でしたが、大規模なゲーム開発でも基盤にできるのではないかと考えています。

また、クラウドプラットフォームはAWSに限らず、GCPやAzureなどたくさん種類があるので、お好みやプロジェクトに合わせて、選定してみてください。

このように、クラウドプラットフォームの扱い方から、Unityでゲーム制作に役立つ情報まで、プログラミングに関わる幅広い知見を取り扱っています。お役に立てましたら、いいね, LGTM, フォロー等よろしくお願いいたします！