弟にAPIについて説明したのだが
昨日の出来事
弟「APIってなに?」
兄「アプリケーションプログラミングインターフェースの略」
弟「アプリケーションプログラミングインターフェースってなによ。」
兄「うーん。。」
APIってなに?
「API」この用語はIT界隈にいるとよく聞くことになるが、その使われ方が色々ありすぎて最初のころは戸惑った。なので弟に説明した内容をここにも書いときます。
Wikipediaには
アプリケーションプログラミングインタフェースとは、広義の意味ではソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様である。 APIには、サブルーチン、データ構造、オブジェクトクラス、変数などの仕様が含まれる。 (wikipedia参考)
wikipediaには上のように書いてあります。しかし正直言って全く想像がつかないです。
APIって何するものなの?
APIというのは何かをするものを表すのではなく何かをするもののスイッチみたいなもののことを言います。
なのでプログラムという範囲から離れれば、部屋の電気をつけたり、消したりするスイッチもAPIと言ってもいいでしょう(注:プログラムではないですが)。
部屋の電気をつけたり消したりするスイッチは押されることで「部屋の電気をつけたり消したりする機能」が動き出すわけです。
このように何かの動作を動かす際のとっかかりの部分をインターフェースと呼ぶわけです。
APIを提供するって何?
じゃあAPIを提供するということはどうゆうことなのでしょうか?
先の部屋の電気の例で言えばスイッチが部屋の電気をつけたり消したりする機能を呼び出すために提供されていると考えられます。
実際にプログラムとしてはどうなっているの?
実際にプログラムに落として理解してみましょう。
├── api
│ └── Add.go
└── app.go
このような感じでディレクトリを作ってみました。
今回では以下のような機能を作ってみます
//api/Add.go
package api
//こっちがAPIとなる
func API(x int, y int) (int) {
return add(x, y)
}
//これが機能
func add(x int, y int) (int) {
return x + y
}
この例でいうとadd
という関数のインターフェースとしてAPI
という関数を作ってます。
注意:goがわからない方へ。
goでは関数名の一番最初の文字が大文字の場合のみ他のファイルで呼び出すことができます。ですのでこの例ですと、add関数は直接他のファイルから呼び出すことはできないのです。
//app.go
package main
import (
"fmt"
"./api"
)
func main() {
x := 3
y := 9
fmt.Printf("x : %d\n", x)
fmt.Printf("y : %d\n", y)
//ここでAPIを利用しています。
sum := api.API(x, y)
fmt.Printf("sum: %d\n", sum)
}
こちらでは提供されているAPIを利用しています。引数に整数型を二ついれて、API
という関数を呼び出せばadd
関数が使えるようになっているのです。
実際に動かすと
x : 3
y : 9
sum: 12
こうなります。
あれ、でもこれライブラリを利用してるだけじゃない?
そうなのです。だからAPIというのはわかりにくいのです。APIというのはいわゆる抽象名詞になるのでこれといったものがないのです。
だから、例のようにある機能を使う際の呼び出しのポイントと呼び出す際のルールのことをAPIであるという風に考える必要があるのです。
「ある機能を使う際の呼び出しのポイントと呼び出す際のルールのことをAPI」
プログラム上ではapi.API
で、ルールは整数の引数が2個という風になってます。
俺の知ってるAPIはURLがウンタラカンタラ
弟「えー、でも俺の知ってるAPIはURLを使ってなんかやれって言われたよ。」
兄「URLも一つのAPIになるんだよ。」
web系の人が思い浮かべるAPIはこっちのパターンが多いでしょう。URLも一つのAPIの形なのです。
# request
GET http://sample.com/users
# response
[
{
"name":"兄"
},
{
"name":"弟"
}
]
このような形でAPIは提供されていると思います。これがなんでAPIと言えるのでしょうか?
難しいことは考えずに単純に考えてみてください。
# request
GET http://sample.com/users
言ってしまえば、このURLは一つのルールになってます。sample.com/usersとやればさっきのレスポンスが返って来るわけですから。このURLを覚えとけばこのレスポンスは必ず受け取れるのです。
まとめ
弟「うーん。まあなんかの機能使うときの決まりごとのことをAPIって呼ぶってことでいいの?」
兄「それでおk」
・・・・
読んでくれた方の理解の少しでも助けになれば幸いです。ありがとうございました。
補足
APIを叩くって何?
「叩く」というのは「利用する」と同じ意味と考えて大丈夫です!
APIサーバーって何?
APIサーバーはさっきのURLの例のように、あるURLでリクエストを受けたときに、なんらかの処理を起こして規定のレスポンスを返すサーバーになります。