難しいことを忘れてAPI周辺知識をシンプルに学ぶ



## 記事を書くに至る背景
初めて業務でAPI実装を担当したとき、「CRUD」や「HTTPメソッド」って言葉をよく耳にしていました。その時は「CRUD操作、あ〜あれね」なんて思いつつも、正直言ってそれらが一体どう関係しているのかさっぱり分かりませんでした。

なので、この記事では、APIの意味や、APIとCRUD、HTTPメソッドの関係について、「API周辺の知識をざっくり理解したい」という方向けに書いております。IT特有の難しい言葉をなるべく避け手描きます。また、この記事を読んで得られるAPIの理解度は、30%くらいです。なので初学者の方はこの記事を読んで、そこからより解像度の高い知識を他の記事等で身につけていってもらいたいです✌️

ゆくゆくは、この記事に潜んでいるであろう間違いに気づくくらいAPIのことを理解して欲しいです（誰）


## APIとは？
「API」とは「Application Programming Interface」の略です。
みなさん聞き飽きたかもしれませんが、直訳すると「アプリケーション間の接続部分」や「プログラム同士を繋ぐ場所」といった意味になります。簡単に言うと、異なるプログラムやシステム同士がデータや情報をやり取りするための「くっついている場所」のことを指します。


## くっついてる場所で一体何が起きているの？

ここでは、異なるプログラム同士が必要な情報（データ）をやりとりしています。

データのやり取りとかいうと一気にITぽくなるので、もう少し具体的に易しく言い換えます。

例えば、お天気アプリ（プログラム）Aは、明日晴れとか雨とかの天気の情報を持っています。そして、お散歩アプリ（プログラム）Bは、Aの天気の情報を自分のお散歩アプリ内で表示したいと思っています。でも、Bのお散歩アプリ（プログラム）は、天気の情報を表示させるプログラムを、自分で一から作り上げるのは、正直めんどくさいし、やりたくないと駄々をこねています。そこでお散歩アプリBは、「Aのお天気アプリから、その天気情報をもらって表示しちゃおう！」と思いました。

これがまさに、「BがAの機能を使う」ということです。つまり、プログラムAの持っている天気情報をプログラムBが借りて、プログラムBのアプリで使うわけです。

従って、異なるプログラム同士が「くっついている場所」では、プログラム同士で情報や機能を交換しているということがわかると思います。APIは、その「つなぎ目」の役割を果たしているのです。


## APIを叩くとは？
「APIを叩く」は、別のプログラムの機能を使うことです。
先ほどもお話にありましたが、APIを直訳すると、Application Programming Interfaceで、プログラム同士がくっついてる場所という意味になります。しかし、「くっついてる場所を叩く」というように直訳をすると、？となっちゃいます。

なので、「APIを叩く」というのは、実際に叩いでるのではなく、その「くっついている場所」で行われる一連の処理を指していると考えると良いと思います。

具体的には、別のプログラムが持っている機能やデータを使うために、その場所にリクエストを送って、何かを取得したり、処理をお願いしたりすること、になります。



## APIとHTTPメソッド
異なるプログラム同士がくっついている場所でのデータのやり取りは、APIを叩くことによって行われますが、実際にはそのやり取りの方法にHTTPという仕組みが使われます。HTTPは、インターネットでデータを送ったり受け取ったりするためのルールです。

このルールに従った、具体的な方法をHTTPメソッドといいます。

以下のような基本的な操作があります

**GET：データを「取得する」**


**POST：新しいデータを「送信する」**


**PUT/PATCH：データを「更新する」**


**DELETE：データを「削除する」**


つまり、APIを叩くときに、プログラム同士がくっついている場所では、HTTPメソッドという方法が使用され、データのやり取りが行われているのです。



## APIとCRUD
この２つの関係を説明する前に、CRUDとAPIの意味をおさらいします。

**CRUD : データベース操作（データを作成、取得、更新、削除）のこと。**

**API: 異なるプログラムがくっついている場所、そこでは、データのやり取りが行われている。**

これだけでは、APIとCRUDがどのように関係しているのかがイメージしづらいかもしれません。もう少し説明します。

先ほど、APIでは、データのやり取りが行われていることを学びました。
そして、この呼び出されているデータは、コンピュータの裏側にあるデータベースからやってきています。データベースは、データが保管されてある場所です。
なので、HTTPメソッドを通じて、データが呼び出されたり、追加されたり、更新されたり、削除されたりするお願いが届くと、裏方のデータベース側では、データの処理操作が行われます。これがCRUDというわけです。

例えるなら、お母さんと自分で服を決められない息子です。
服に無頓着な息子は、どの服を持っているのか把握できないし、いらない服を捨てることもできません。そこで、息子はお母さんにお願いして、服の整理をしてもらいます。このやり取りが、CRUD操作にあたります。


また、わがまま息子も成長して、もう着ない服があったり、もっと好きな服が見つかることもあります。そのとき、息子はお母さんに「古い服を交換して、新しい服をタンスに入れておいて〜」と頼むでしょう。

この場合、タンスの中の服の更新（UPDATE）が行われます。お母さんはタンスの中身をチェックして、不要な服を取り出し、代わりに新しい服を追加するのです。これは、CRUD操作でいう、データのアップデートですね。

さらに、わがまま息子はもう着ることがない服をお母さんに「これ、ダサいし、着たくないから捨てて！」とお願いすることもあります。この場合は、お洋服の処分（DELETE）が行われます。CRUD操作でいうデータの削除です。

全てをまとめると以下のようになります。

**データの取得（GET）**: 息子が、お母さんに「タンスの中の服を見てきて〜」と頼む。この操作が「データを取得する」と同じです。
**データの追加（POST）**: 息子が、新しい服を買ってきて「タンスに入れておいて〜」とお願いする。これがデータを新たに追加する操作です。
**データの更新（UPDATE）**: タンスの中の服を新しいものや息子が好きな服に変えること。これがデータを新たに更新する操作です。
**データの削除（DELETE）**: 不要な服（データ）をタンス（データベース）から削除する操作です。



## 余談：APIを実装するとは？
「APIを実装する」はAのプログラムがBのプログラムと交じ合えるように、準備をする、言い換えれば、環境を造ることです。他のプログラムの機能を使用する際には、自分のプログラムとのデータのやり取りが必要になるので、どのようなデータがもらえるのか、そのデータの型はどのようなものかなどを定めた環境を整備することが必要になります。これがAPI実装というわけです。

例えるなら、「イタリア人と話すとき、自分もイタリア語を話せるようにイタリア語を勉強しておく」みたいな感じです。
API実装もそれと同じように、違うプログラムの機能を使用したいとき、言い換えるならば、片方のプログラムがもう片方のプログラムが持っているデータを受け取りたいとき、そのデータを受け取れる準備する必要があるのです。