【初学者】APIって何ですか？

## はじめに
**※この記事は、『[はじめてのアドベントカレンダー](https://qiita.com/advent-calendar/2023/first-time)』の17日目に参加しております。**

今回、個人開発のアプリを作成するにあたり、初めてAPIを叩いてみました。

そもそもAPIとは何なのか？という部分が曖昧だったので、調べてみることにしました。

実際に「[OpenWeatherMap API](https://openweathermap.org/)」を使用し、情報を取得するまでの流れをまとめた記事はこちらになります。

https://qiita.com/rk2530/items/8fdf6807e4f7cc33afbd

:::note info
APIにはさまざまな種類がありますが、今回は主に**Web API**についてまとめました。
:::

## 注意点
::: note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合がございます。
もし間違いがあればご指摘いただけますと幸いです。
:::

## APIとは
APIは「**Application Programming Interface（アプリケーション・プログラミング・インターフェース）**」の略で、

>あるソフトウェアプログラム(アプリケーション)が、他のソフトウェアやハードウェア等、外部とやりとりをするために備えている機能や規則の集まりです - 人間のユーザーインターフェイスと比較されます。APIは、それを提供するアプリケーションと、第3者のソフトウェアやハードウェアといった他の項目との間の、単純な契約(インターフェイス)

という意味だそうです。

https://developer.mozilla.org/ja/docs/Glossary/API

また、APIの仕組みはよく**電気のコンセント**に例えられるそうです。

>実世界の例として、あなたの家、アパートや他の住処にある電気のコンセントについて考えて下さい。あなたの家で機器を使いたい時には、電源コードのプラグをコンセントに差し込めば事足ります。電源に直接結線したりしないでしょう — そんなのは非効率ですし、あなたが電気工事士でなければ、やってみるには難しいし危険です。

https://developer.mozilla.org/ja/docs/Learn/JavaScript/Client-side_web_APIs/Introduction#api_%E3%81%A3%E3%81%A6%E4%BD%95

普段電気のコンセントにプラグを差すとき、内部でどのような処理がされているか考えている方はあまりいらっしゃらないかと思います。

APIもそれと同じで、コンセントに差す（APIを通じてリクエストを送る）と、内部の複雑な処理をAPIが行ってくれて、電流が流れる（レスポンスが返ってくる）というように考えると、ちょっとイメージがつきやすい気がします💡

ここからは、Web APIの概要や仕組みについて書いていきたいと思います。

## Web APIとは
- Webベースのアプリケーションやサービス間での通信を可能にするAPI
- インターネットを介してデータを交換し、プログラム間で情報を共有することが主な目的

## Web APIの種類
**■REST（Representational State Transfer）API**
- 最も一般的なWeb APIのタイプ
- シンプルでスケーラブルなアーキテクチャを持ち、リソース指向
- CRUD（`Create`, `Read`, `Update`, `Delete`）操作をHTTPメソッド（`GET`, `POST`, `PUT`, `DELETE`）にマッピングする

**■SOAP（Simple Object Access Protocol）API**
- プロトコルの厳密なセットに基づいたより正式なAPI
- XMLベースのメッセージフォーマットを使用し、セキュリティやトランザクション管理が強化されている

**■GraphQL API**
- クライアントが必要なデータの形式を指定できる、より柔軟なAPI
- クエリ言語を利用して、特定のデータ要素の取得が可能

**■WebSocket API**
- リアルタイムの通信をサポートするAPI
- 双方向の通信チャネルを提供し、Webアプリケーションでのリアルタイムデータのストリーミングに適している

チーム開発でWebSocketを使用したのですが、WebSocketもAPIの一種であることをこの記事を書いていて知りました…

▼チーム開発　2人協力型のホラー×謎解きゲーム「[MISERY](https://misery-seven.vercel.app/)」

https://misery-seven.vercel.app/

## Web APIの仕組み
**リクエストの発行**
APIの使用者（通常はクライアントアプリケーション）が、特定のデータやサービスの要求を行います。この要求は「リクエスト」と呼ばれ、通常HTTPプロトコルを使用して送信されます。

**APIへのリクエスト転送**
リクエストはインターネットを介してAPIの提供元（サーバー側）に送信されます。リクエストはAPIの特定のエンドポイントに対して行われ、必要な情報（例えば特定のデータを取得するためのパラメータや資格情報）が含まれています。

**情報の処理と集約**
APIの提供者はリクエストを受け取り、その内容に基づいて必要な情報を処理、集約します。

**レスポンスの生成と送信**
情報が処理された後、APIはその結果をクライアントに返します。この応答は「レスポンス」と呼ばれ、通常JSONやXMLの形式でエンコードされます。

![eb046b43cd351fbc16194d39b608fa02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3467801/f19fa5f9-08aa-2e86-447d-1af9bc575e81.png)

## 個人開発におすすめのWeb API
最後に、個人開発におすすめのWeb APIを調べてみました。

**■[Google Maps API](https://developers.google.com/maps?hl=ja)**
- 地図表示、位置情報サービス、ルート検索など、地理的情報を扱うアプリケーションに最適
- ウェブアプリやモバイルアプリに簡単に統合できる

**■[Twitter API](https://developer.twitter.com/en/docs)**
- ツイートの投稿、読み取り、ユーザー情報の取得など、Twitterの機能をアプリケーション内で使用できる
- ソーシャルメディア連携やデータ分析に適している

**■[Stripe API](https://stripe.com/jp)**
- オンライン決済の処理と管理を行うことができる
- 電子商取引やオンラインビジネスに最適

**■[Spotify API](https://developer.spotify.com/documentation/web-api)**
- 音楽検索、プレイリストの作成、ユーザーの再生履歴など、Spotifyの音楽関連データにアクセスできる
- 音楽アプリや音楽データ分析に利用できる

**■[Qiita API](https://qiita.com/api/v2/docs)**
- 記事の検索、投稿、更新、削除などが可能
- 技術コンテンツの集約、分析、自分のQiita記事の管理など、さまざまな用途に利用できる

## まとめ
APIについて深掘りしてみましたが、普段使用しているサービスにもAPIがたくさんあり、とても身近なものなんだなぁと感じました。

今回は取り上げられませんでしたが、Web API以外にも
- ライブラリベースのAPI（例：JavaのStandard Edition API、Pythonの標準ライブラリ）
- クラスベースのAPI（例：JavaのSwingライブラリ）
- ハードウェアAPI（例：カメラ、センサー、プリンター用のAPI）
- オペレーティングシステムAPI（例：Windows API、POSIX API）
- データベースAPI（例：JDBC［Java Database Connectivity］、ODBC［Open Database Connectivity］）

など、さまざまな種類のAPIがあり、とても勉強になりました。

最後まで読んでいただきありがとうございました！