#035 流石に知らないと恥ずかしいAPIの話

2022/5/1 ·

  • ひまじんプログラマーの週末エンジニアリングレッスンです 今週もいいレッスンをお届けしますはい賢くなっていきましょうというわけで このラジオはですねひまじんの中級エンジニアが送る駆け出しエンジニアをキャリアアップさせるラジオということでやってます 本日はリモートでお送りしておりますはいちょっとなんで会話のテンポが悪いかもしれないですね そうなんですよ



  • その辺はすまんということで自己紹介僕は中級エンジニアのカイチです同じく中級エンジニアのノリですじゅんぺくんお休みです中級同士が集まって何してるんですか今日はちょっと素振りですねメンタリングの素振りそうねちょっといないけどいると仮定して進めていきますよはいいきましょうはいということで本日は用語解説のコーナーということでね待ってましたはい待ってました



  • 一番ためになるやつそうなんだ確かに聞けば純粋に知識になるからねそうですそうです本日はですね駆け出しプログラマーを悩ませがちな単語APIについて解説していこうと思いますAPIやたら聞くめちゃくちゃ聞くよねこれ特に最近はどんどん増えてるんじゃないのそうですね



  • 何なんでしょうもうなんか適当な単語プラスAPIってつけたらなんか何でもあるんじゃないかとすら思ういや本当だよねなんかもうAPIしかなくねぐらいの勢いになってきてるよねもうなってると思いますということでじゃあまずAPIがAPIとは何の略でしょうやばい聞きまずいどっちでいけばいいんだ



  • どっちに行けばいいんだろうね普通でいいよ普通にアプリケーションプログラミングインターフェースですねアプリケーションプログラミングインターフェースですねまずこの名前が良くないと思わないかい良くないすごくイメージつきにくいよねなんか広くないですかアプリケーションときてプログラミングときてインターフェースときてますからね全部抽象的な3つが合わさってなんか



  • 余計抽象的になってるというかねインターフェースだけ過労死でちょっと絞ってる感ありますけどアプリケーションプログラミングに至ったらちょっと文句言いたいですねまあそうだよねアプリケーションってだいたいプログラミングでできてるもんねそうそうそうつまり何なんですかこれはつまりですねプログラムとプログラムがやり取りするための規約みたいな規約というか



  • インターフェースですねつまり普通のアプリケーション入り口出口みたいな入り口出口例えばだけど普通のさウェブのアプリケーションとかってさプログラム向けじゃなくてユーザー向けにインターフェースが作られてるじゃないですか人間というか画面とかそうですね人間向けのインターフェースですねそうですそうですでもこのAPIっていうのはその名前の通りアプリケーションとか他のプログラム



  • に対してインターフェースを公開してますよっていうのがまずAPIの大きな意味かなと私は思っておりますなるほどとにかくプログラミング向けのインターフェースなんですねそういうことですプログラム向けインターフェースこれを使うことによって何が嬉しいかというとですね例えばタベログとか



  • ああいうウェブサイトっていろんなお店の情報とか口コミ情報とかユーザー情報とかもうパンパンにデータ入ってるわけじゃないですかそうですねである日なんかこれから自分のウェブサイト作りたいなーって人が自分のサイトにお店の情報をたくさん載せたいぞとはいはいはいでもそれをわざわざデータベースであの1から登録するのしんどいじゃないですか



  • いや地獄ですね地獄なんですよそれは地獄でもそれってもう既にタベログのデータベースに入ってますよねとはいなのでそのタベログが公開しているAPIを使うことによってですねなんとプログラムとプログラムが通信をしてあたかも自分のサイトで持ってるかのように使うことができるわけですねなるほどじゃあなんて言うんでしょう



  • Gitに載ってるコードを使うみたいな感じで自分のサイトで他の人が培った情報を扱えるようになるんですねそういうこと他のサービスを取り込めるみたいなイメージだよね簡単に言うと超便利超便利なんですよなのですごく使われてますそして食べログ側もメリットがあってサービスによるんですけどだいたいそのAPIを公開することによって多分追加でお金もらってますよね



  • 情報提供料だからタベログはもうタベログで普通にタベログ使ってもらってる部分でもお金をもらってるしそのAPIを公開して他のウェブサーバーとかがそのAPIを使うことによってもお金をもらってるというわけですよ公開する側にもある程度メリットあるよねっていうそういうものですねとで



  • APIってそんな感じで結構幅広い意味で使われるんですけど今APIといえばだいたいWeb APIというものを指しますよね多分そんな気はしますというかそうだと思ってますWeb APIとAPIの違いというかどういう括りなんですか個人的にはHTTPを介してWebサーバー同士が通信しているのがWeb APIかなみたいなイメージですね



  • 他にもAPIいろいろあってプログラミング言語とブラウザが通信するAPIとかもあるよねそういうのはウェブを介してないのかなっていうイメージプログラミング言語とアプリそうですねローカルの中でやってますからねそうですねネットを通じてHTTPでやり取りしてるのをウェブAPIって言うんじゃないかなそれはそうだと思いますこの辺の正確な定義どうなんだろう



  • Web APIはその名の通りWeb上に公開されていて外部から呼び出して利用が可能なAPIですとWebに公開されているものってことですねですねなのでこのラジオを聞いているようなおそらくWeb系の方々が聞いているんじゃないかなって勝手に思っているのでそうですね確かに我々が使うのはだいたいWeb APIになってくるかなという感じですねあんのかなそうじゃないのあんのかなあるか



  • 講義で言ったら例えばハードウェアで例えばカメラを買いましたとそのカメラと端末を直接つないでそのカメラ内の何かの機能を使ったらWeb APIじゃないですねそれもカメラAPIですねカメラAPIかわかんないけどそういうのじゃなかったらWebアプリとかだったらWeb APIですよねさすがに多分なんかあるのかな



  • 他だと自社内の何か呼び出すときはWeb APIじゃないのかもしれないJavaScriptから結構ブラウザのAPI呼び出すこと多いかななるほど確かにそれはありそう多分あの辺はAPIって呼んでる気がする確かちなみに業務中もAPIって言います?いやーあんま呼ばないかな勉強するときに単語として入ってくるけどあんまもうなんか



  • こういう機能JavaScriptにあるよねぐらいに気持ちで使うかなそうですよねAPIって言ったらイコールWeb APIっていう会話がされてるとされてると思いますたまにそうじゃない人いるから気をつけなきゃいけないですけどねそうですねAPIって単語出てきたら少しどっちかなって思う必要がありますねあと個人的にはAPIWeb APIの中でもさらに2種類に分かれてると思っててほう



  • 一つがさっき言ったタブログみたいな感じで自分たちのサーバーが持ってる情報をみんな使ってねーって開放するタイプのやつデータベースそのまま参照して返してくれる系のやつってことですかねそういう本当に見知らぬ人たちにたくさん使ってもらうためのAPIとあとは自分のサイトでしか使わないクローズドなAPIもあるかなと思ってて



  • 最近だとSPAというかシングルページアプリケーションの略なんですけどJavaScript使ってデータだけ取ってきてそれをクライアント側で埋め込むみたいな形のウェブサイト増えてるんで結構そういう社内だけで使うAPIとかも多いかなって気がしますね最近実はこれAPIめっちゃ増えてるんですよ知ってますか?



  • めっちゃ増えてる僕とかってSESと言われてる業界じゃないですかすごくAPIについて求められてますね多分市場的にAPI案件が増えてるってことですかそうそうAPIの開発経験あるかどうかみたいなへーそうなんだめっちゃ増えてますねワンアプリケーション少なくとも1APIな気がしますねうん



  • 特に最近だとさ1個のサービスでもさスマホ版とアプリ版とスマホアプリ版とウェブ版みたいな感じで複数デバイスで使ってたりするじゃないですかはいもうスマホなんてiOS版とAndroid版みたいな感じですしねそうそうそうそうそんな感じでちょっとマルチデバイス化が進んでるんでね



  • HTMLで埋め込んで返すみたいな従来のウェブサーバーの形式だとあんまり効率よくないんですよどっちかっていうとデータだけ返してもらってあとはクライアント側でどうにかする方が効率よくなってるので結構ウェブAPI求められる開発経験求められる機会が増えてるなって気がしますね確かにな格優僕も今API作ってますしねそうなんだ



  • はいAPI作っておけば間違いないかもしれないですね確かにAPIでちょっと今回は駆け出し向けってことなのでざっくりWebAPIがどんな形式で作ること多いのかっていう話もしておきますかはいお願いします普通のWebサーバーってリクエスト飛ばしたらHTML返ってきますよねはいそうですねそれをブラウザが読み込んで画面を作ってるわけですと



  • でもAPIって実はURLがあってそこにリクエスト飛ばすってのは変わんないんですけどHTMLとかに埋め込まずに返すんですよねデータだけで何ですかじゃあ0101みたいなの返ってくるんですかそんなにねシステマチックじゃないですよく使われてるのはですねJSON形式とかJSON?はいJavaScript Object Notationかな



  • 初めて知ったマジで?そうなんだJavaScriptのオブジェクト型とすごく互換性あるデータの形なんですけどよく使いますよねそうですJSONよく使われる理由としては言語にまず依存してないJavaScriptって名前ついてるくせに他の言語でも結構利用できますよねPHPとかPythonとかおそらくどの言語でもいけるだろうとはい



  • そういう形式でキーバリューの形かな多分あれはキーバリューですねネームっていうキーがあってそこにネームの値が入っててみたいな感じのちょっと配列っぽいそういったデータを返してくれますよとJSONはやっぱり互換性も高くてデータの形式も軽いのであと見やすいとっていうところもあってリクエスト飛ばすとJSONでデータだけを返してくれるっていうケースが多いですね



  • あとはJSONを受け取ったブラウザが一個一個そのデータ見てページに埋め込んでいくとそういう使い方しますよねこの後どうしようそうですよね着地むずいですよね着地むずいなこれざっくりAPIってものを話したので実際世の中にどんなのがあるかっていうところでさっきみたいなタベログ



  • だったら多分お店の情報とか口コミ情報とかを取得JSONで返してくれるAPAがあったりとか楽天とかも結構あるかな楽天ブックスだったら本の情報たくさん取れるしトラベルだったら旅館の情報とか入ってくるんじゃないですかねあとはLINEとかも多分APA公開してるかな



  • ありますねメッセージ飛ばしたりメッセージ飛ばしたりとかログイン機能を提供したりとかそういうAPIもありますよねなのでこういうAPIを使うとすでに世の中にある他のウェブサーバーの機能を使って自分のサイトにいろいろデータを組み込んだりできるので爆速で開発できるし嬉しいよねというのが今回のウェブAPIでございました



  • あれですかねよくブログとかで見る広告表示されてるとこもあれはAPIですかねあれはですねどうなんだろうなJavaScriptのAPI呼び出してると思ってました多分JavaScript埋め込んでるんですけどそのJavaScriptが広告提供してるところのAPI叩いてると思いますねAPIを使うことでAPI叩くって言うよねそうですね確かになんで叩くのかわからないけど



  • HTMLって他に言わないよなURL叩いたらとかDV叩くって言わないよなDV叩くは言わないな本当にデータベースビンタしてるみたいな確かになんでAPI叩くって言うんだろうこっから始まったんだろうねちょっとググっていいですかAPIなぜ叩くというのかというところなんですがこれは完全にちゃんとしたソースの情報は全くございませんと前提としてそれは前提に



  • それを心に留めた上でスタックオーバーフローに同じ質問をしている人がいてですね回答で僕がなるほどって思ったのでそうであってほしいと思っている説なんですけどこれは英語圏のエンジニアが使うHIT APIの和訳HIT APIなんかAPI HITって言うんですね本当かどうかわからんけど確かになあんま聞いたことないな



  • ないか迷子で見ないものそうですねドアを叩くみたいなニュアンスなのかなみたいなところがありますねコールAPIっていうのも見たことあるけどなコールの方がなんかしっくりくるなですよねAPIコールとかよく言うよな言うよなAPI呼ぶってAPIコールとかなんか見たことあるなちなみに今ヒットAPIで検索したら



  • 一件しか出てきませんでしたねじゃあ嘘じゃん危ねー危ねー信じるとこだっただいたいWhat is an API callとかAPI callってのが出てきますねじゃあ謎ですねやっぱ確かに誰が広めたんだろう絶対誰かが広めてるっすよねなんかの本に書いてたのかな叩くか呼ぶ方が実態には合ってるよねこれもまた怪しい情報ですけどうんうん



  • サーバー系のエンジニアはコマンドを叩くと表現することが多いがネットワークのSEはコマンドを打つと表現することが多い的なところもあってそういうロールによって言い方が異なることもあるよみたいな情報もありますねなるほどねこの辺は叩くっていう人もいれば呼ぶっていう人もいるのでひまじんプログラマーの見解としては呼ぶですかこれはそうだけどおすすめは叩くって言った方がいいかなっていうそうなんですねなんかちょっと知ってるなって感じしない



  • 確かにこなれてる感ありますねこなれてる感あるよねいい悪いは置いといていや叩くってなんだよって言われた時にちょっといいエビデンスないのが申し訳ないですけどこれは監修ということでね珍しくない表現だと思いますね確かにあとAPA関連だとあれじゃないエンドポイントって単語最初いまいちつかみにくくない



  • エンドポイントは最初イメージつかないですねそれも合わせて解説しておくとエンドポイントはですねそのAPAの呼び出し口の住所みたいなもんですよね住所?そうですねモモにWebAPAだったら多分HTTPメソッドとURLのパスの部分の組み合わせになるのかなっていう感じなんですけどそういう入り口の部分APAの処理が始まるのことをエンドポイントって言いますよね



  • もっと僕ちょっと淡い理解というか抽象的な理解をしてましたとにかく入り口と玄関玄関だと思ってましたウェブサイトでいうURL入力するところみたいな感じだよねなのでエンドポイント叩いてとかも言うかもそうなんだそれはあんまり言ったことない独自かありうる



  • 伝わりますけどね別に急にエンドポイント叩くって言われてもエンドポイント叩くんかって思うここのエンドポイント叩けばみたいななのでAPI系だとエンドポイントって単語も知っておいた方がいいかなってちょっと今思いましたそれはいいと思いますということでこれ本当ならね実際になんかAPI使ってコード書くのが一番分かりやすいと思うんですけど



  • ラジオでそれをやっても再現できないのでねぜひこの説明でざっくりAPIがどんなものか伝わってたら嬉しいような気がしますねはい今更の思いつきなんですがこういう用語解説をするときってこの本これ学ぶならいいよとか紹介できるとより良いかもしれないでは最後にAPIを学ぶためのおすすめの一冊を紹介してさよならとしましょう



  • オライリーのWeb API the good partsっていう本があってですね出たーこれはですねすごくいいですね薄いんですけど分かりやすいとにかく分かりやすいこれでいいこれ読んどきゃこれ一冊読んだらだいたいAPI設計できるようになると思いますそうですね薄くてなんかあんなにしっかりしてるのはなかなかないよね



  • 俺1年目の半年でも読めたしそう分かりやすいんだよねあれ分かりやすいなのであれやるとURLの設計どうすればいいかとかうんうんうんリクエストレスポンスに何含めればいいかとかそういうところも含めて結構知れるのでAPI作んなきゃなっていう人はぜひ読んだ方がいいと思いますねあれは読んでくださいリンクは概要欄に貼っておきますのでそれでは皆さん



  • 良いAPIライフをバイバイ

0:00 22:47

#035 流石に知らないと恥ずかしいAPIの話