最近はNode.jsばっかり触っている3年目エンジニアの松田です。
3年目にもなり、二ヶ月前から後輩のメンターをしています。
その後輩くんに「WebAPIってなんですか???」と聞かれ、、、
そういえば2年前の自分も同じことでかなり悩んでたなぁ...
と思ったので、まとめることにしました。
せっかくなので、ただ内容をまとめるだけでなく、
普段、どのようにキャッチアップ/学習をしているのかも一緒に書きます。
少しでも新米エンジニアの方にキャッチアップ方法が届けば幸いです。
日本語にしてみる
本題に入る前に、私が未知の英単語?にあった場合にやっている(いた)こととして、
まず単語を日本語に訳すところから始めています。
いきなり、単語をググるのではなく、日本語にしてどのような機能なのかあたりをつけてから調べています。
最初は、日本語に訳してもなんじゃらほい状態だと思います。特にWebとかAPIとか...。
慣れてくると、抽象的なことを学ぶ際にイメージしやすくなり、理解するまでがかなり近道になるので、是非試してみてください。
(先輩エンジニアの皆さん。そうですよね???)
ということで早速、訳していきましょう。
Q: APIって?
A: API (アプリケーション・プログラミング・インタフェース )のこと
アプリケーション・プログラミング・インタフェースって?
A: アプリケーション・プログラミング(アプリ)のインタフェース(境界線)
(日本語にしてみようとか言いつつ、日本語化が難しすぎ...)
インターフェースとは境界である
インタフェースという言葉を日本語に直訳すると、接点
とか境界
とか出ると思います。
ちょっとイメージがつきにくいかもしれないので、別の言葉で説明すると
ユーザインタフェース
とかオーディオインタフェース
だとイメージが付きやすいですかね。
ユーザインタフェース
はユーザと機械の接点/境界で、人(ユーザ)がコンピュータに指示を伝える、ものの総称のことで、例えば、リモコン(人の指示をTVに伝えるための接点)やアプリのボタン(人の指示をアプリに伝えるための接点)、キーボード(人の指示をコンピュータに伝えるための接点)です。
オーディオインタフェース
は言わずもがな、オーディオ機器に対しての接点の総称で、ギターとアンプを繋ぐシールドや、マイクとパソコンを繋いでいるゴツゴツした機器がオーディオインタフェースです。
改めて、アプリケーションプログラミングインタフェースとは???
アプリケーションプログラミング、要はプログラムがそれ同士と接続する部分の接点/境界のことです。
Java API ドキュメント
とか聞いたことはありませんか?
それは、自分が書いたプログラムとJavaのSDKが持っている機能、例えば、日付を処理するものとの接点/境界のことです。
プログラムはあくまで人が書いた処理なので、接点/境界も人が定義し、いろんなプログラムがアクセスできるようにしないといけません。
これはハードウェアインタフェース
をイメージすると分かりやすいですかね。
USBのインタフェースはUSBの規格に合わせたものでないと使用できませんし、
SDカードのインタフェースはSDカードしか刺さらないし、使用できません。
プログラムも一緒で接点(プログラムの入り口)を定義しないと使う側は使えないのです。
Javaを使う人向けにプログラムの入り口を定義した内容がまとまっているドキュメントがJava API ドキュメント
です。
上記のような背景があり、API
は仕様書
と言った意味を含んで使用する方もいます。
最近はAPIと調べると、後述するWebAPI
ばかりがヒットすると思いますが、APIの本来保つ意味は上記なんですよ。
(どやってますけど、あってますよね???)
日本語で調べると、いきなりググるより本来持つ意味がわかりやすかった気がしませんか?
Q: Webって?
A:WWW(World Wide Web)のこと
(これこそ日本語にできない...)
直訳すると、世界に広がるWebなんですが、
じゃあ「Webとは?」と気になると思うのですが、端的にいうと、
「それぞれの文章が網目上に繋がった情報網」という意味です。
いわゆるホームページのような文章が世界中の仮想文献(ホームページ)と繋がっていることをイメージしてもらえればと思います。
また、それを可能にするシステムの仕組みやルールだと思ってもらえれば、ここでは十分です。
※ (私があまり理解できていないこともあり)この辺りの詳細な解説を知りたい方は、Webの生い立ちとか歴史を調べてみると、Webがどういうものとして生まれてきたのか理解できると思います。この周辺の説明はそういった記事や文献にお任せします。。。
その仕組みやシステムの生い立ち・歴史を調べてみる
今回は記事が冗長になるので書きませんが、昔からある仕組みや概念の勉強する際には、生い立ちや歴史を調べることは結構有効だと思っています。その言葉がどういった背景
で生まれてきたのかを知ると理解度が深まるのではないかと思います。
なので、私が何かの概念や調べてもあまり分からないことは、少し文章多めの歴史から学べる記事や、本を読むようにしています。
特にWebやインターネットは私が生まれた時ぐらいからある技術なので、ながーい歴史があり、どういう時代背景があって生まれたものなのか、知ることで理解しやすくなるかなと思います。
ちなみに、私はWebを支える技術という書籍を読んで理解しました。
Q:WebAPIって?
A; WWWを可能にする仕組みや技術を用いたプログラム同士が接続する部分の接点/境界
と私は思っています。
これ以上説明するとあまりに長くなるのですが、
Webについて掘り下げなかったため、中途半端な理解になってしまったかもしれません、、、。
Webとはどう言った仕組みなのか、どのような歴史で出来上がってきたのか、
というのを調べてみるとより理解が深まると思います。
最後に
いかがだったでしょうか。
APIの理解というより、未知の単語との向き合い方や考え方が伝われば私は満足です。