APIの意味勘違いしてない?
はじめに
みなさんはAPIって知ってますか?
と、質問するとおそらく人によって返ってくる答えが違うと思います。
1.例えばエクセルVBAの上級者なら「あー、あの難しい記法使って、裏技とかやるやつ?」って思うかもしれません。
2.Javaの入門書を勉強中の人なら、「Javaの標準関数とか使うやつでしょ?」って言うでしょうか。
3.HTML・Javascriptの開発者なら「Googleとかと連携するやつだよね?」って言いそうです。3
これらは全て正解です。
上記のAPIはそれぞれ、
1.Windows API
2.Java API
3.Web API
と呼ばれています。
つまり、単にAPIと表記する場合、本来は上記のような各API全てをひっくるめたものをいいます。
ただ、実際の会話では、文脈に合わせて省略してAPIと呼ぶことが多いというだけです。
そもそもインターフェースの意味知ってる?
APIが、Application Programming Interfaceの略だってことはみなさんご存知だと思います。
ApplicationとProgrammingは分かると思いますが、Interfaceって意味知ってますか?
インターフェースとは何かと何かの接続するところの規格という意味です。
例えばスマホと充電ケーブルのインターフェースはUSBタイプC、とかになります。
これは分かりやすくて、インターフェースが違うと明らかに動きません。
というか分かりやすくするために、関係ない接続穴は形を変えているからです。
どう考えてもHDMIポートにUSBケーブルは刺さりません。
だから間違えて壊すという危険も未然に防いでいます。
もう少し例をあげます。
スマホとヘッドホンのインターフェースならイヤホンジャックだったり、Bluetoothだったりですね。
ちなみに、人間とパソコンにもインターフェースがあって、それはパソコンの画面やキーボード、マウス、マイクやカメラになります。
逆に、組み立て後のパソコンにおいては人間と内臓メモリや人間とCPUはインターフェースとは言いません。
ある意味、人間の目や耳もインターフェースです。
目が見える人は通常画面に出力された内容は目で人間の入力し脳が処理します。
だけど、アプリによっては目が見えない人のためのインターフェースとして音声読み上げソフトが用意されていたりします。
郵便物の受け渡しを処理と捉えるなら、郵便番号+住所や玄関ドアがインターフェースであり、部屋の中身はインターフェースではありません。
ものすごく使い道多い言葉ですね。
なんとなく共通点は伝わってきたでしょうか?
ようするにインターフェースとはブラックボックスとブラックボックスの繋ぎ方であり、その中身の事を何も知らなくても扱えるようにする方法、ということになります。
あなたはスマホのエンジニアでもない限りスマホの中身を分解して中身を完璧に把握しているわけではないと思いますが、それでも日々スマホ充電をすることが出来ていますね?
CPUや内蔵メモリなんか見たことなくてもアプリを動かすことが出来ているはずです。
もちろん郵便配達員に部屋の中を見せなくても荷物は届けてもらえているはずです。
使用者は、そのインタフェースの事さえ知っていれば、内部の仕組みは知らなくてもいい、これが大事なんです。
じゃあプログラミングで使うインターフェースってなに?
以上の説明でをプログラミングにあてはまえるとなんだと思いますか?
JavaやPHPやってる人ならClass Trait Interfaceという分類分けでのInterfaceがパッと思いつくと思います。
実際それもその通りで、ようは関数の型定義がインターフェースってことになります。
冒頭で書いたWebAPIやJavaAPI 、WindowsAPIは関数の型定義さえ合わせれば呼び出せるようになっています。
C++などを除いて、ほとんどの型付け言語では関数を定義すると暗黙的にその型のインターフェースとしての機能を含むため、型違いの引数を受け取ろうとするとシステムエラーになります。
これは前述のUSBインターフェースの話でいえば、USB端子をHDMIポートに刺そうとしているから弾かれているということです。無理矢理さしたら当然壊れます。
そして、関数の中身の動きを知らなくても、インターフェース(=引数の型と正常値)さえ知っていれば期待した結果を受け取れますね。
余談
例えば、外部サービスとファイルをやり取りして連携する場合は、以下のようなことを決めたりします。
・ファイルの形式:CSVやYAML、プロパティなど、どれを使うか
・やりとするファイルの置き場所。サーバ・ディレクトリ。
これらはデータフォーマットと呼ぶことが一般的なようです。
しかし、案件によってはインターフェースと記述されている場合もあります。
また、通信の取り決めだと以下のようなものがあります。
・プロトコル:HTTPやFTP、SSH、SOAP通信、など。ときには独自規格の場合も。
・通信内容のデータ部分の書式:JSON、XML、バイナリ列など
これも一般的にはインターフェースとは言わないようですが、文脈によってはインターフェースと表記される場合があります。
「他社との連携や、複数の種類の装置間を連携するための取り決め」という意味を強調したい文脈でインターフェースと表記されることがあるようです。
おわりに
いかがだったでしょうか?
APIの説明と言いつつインターフェース中心の話になりましたが。
この意味が理解できるようになると、初心者にはとっつきにくいclassとinterfaceの違いや使い道なども自然にわかるようになってくると思います。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion