WEB APIについて調べてみた -1章編-

##背景
WEB APIを知った被っていたような気がして、本家のオライリーに助けを求めた。

###読んだ本
O'Reillyの本を読んでみた
[WEB API The Good Parts](https://honto.jp/netstore/pd-book_26352551.html)

###章立て
全部で6章構成＋付録が記載されている。
今回は1章のみ読んだものをまとめる。
メモ程度の記述なので悪しからず。

##はじめまして、API
###Web APIって何？
1章の冒頭から、Web APIとは何なのかの説明が記載されている。
著書内で定義するAPIは以下の通りである。
>HTTPプロトコルを利用してネットワーク越しに呼び出すAPI

どうやって動いているのか詳細には知らないけど、機能の塊を外部から呼び出す為の仕様のことを指す、とのこと。
APIを利用することによって、プログラムからアクセスしてデータを機械的に利用することが出来るとされている。
ここで言うところの「機械的に」の意図として、ブラウザを使って人間が直接アクセスすることを目的としたURIではない、と位置付けたかったとあった。
あくまでも「機械的に」データを利用することが目的とされているのだ。

###Web APIの重要性
ここではまず、重要と言われる所以を知る為に、歴史ベースで説明が記載されている。

・Web APIとして古くから知られているものの代表として、**Amazon**の**「Product Advertising API」**というものが存在する。
　このAPIは2003年に公開され、出来たことにより、誰でも簡単にAmazonの商品を自分のサイトから販売し、
　その収益の一部を得ることが出来るようになったのだった。
　そしてその結果、Amazonの収益を大きく押し上げる一因となったのである。
・もう一つ、APIを使って成功した会社は**Twitter**だ。
　2006年からAPIをずっと公開していたことと、シンプルなサービスが功を奏し、さまざまな周辺サービスが開発され情報が集まる「場」になっていった。

・AmazonもTwitterもどちらも自分たちが資金を投じて作ったシステムを無料で公開している為、一見損をしているように見えがちだが、公開することにより開発者などより多くの他者によってサービスへの付加価値が付与されていき、結果的にコアとなる自分たちのサービスがより発展する力をもらうことが出来ている構造となった。

・Web APIでの利用を前提としたサービスも生まれている。
　例として、**[Twilio](https://www.twilio.com/ja/)**と呼ばれるものが挙げられている。

・全てを自前で用意するのではなく、こうしたエコシステムに参加することで、そのサービス自身もユーザーにより受け入れられやすくなる。

###モバイルアプリケーションとAPI
モバイルアプリケーションを構築する為に、Web APIを用意する機会も増えてきている。

###APIエコノミーとは？
APIエコノミーとは、**Web APIを公開することで外部サービスとの連携を容易にして新たな価値が生まれ、サービスやビジネスが発展していくこと**である。
公開する流れはどんどん増えていくとされている。

###さまざまなAPIのパターン
WebAPIを設計しなければならない場面が増えてきている。
以下の状況が例として挙げられていた。
>・公開しているウェブサービスのデータや機能のAPI公開
・他のページに貼り付けるウィジェットの公開
・モダンなウェブアプリケーションの開発
・スマートフォンアプリケーションの開発
・ソーシャルゲームの開発
・社内システムの連携

####公開しているウェブサービスのデータや機能のAPI公開
外部にAPIを公開し始めたサービスとして、世の中にインパクトを与えたAmazonやTwitterなどは、API公開の最初の礎を築いた。
さまざまなAPIを集め、その情報を公開しているディレクトリサービスが存在する。
[ProgrammableWeb](https://www.programmableweb.com/apis/directory)を見てみると良い。
世の中にあるAPIがディレクトリごとに管理されている。

####他のページに貼り付けるウィジェットの公開
ページを開くと、誰もが簡単に自分のサイト上で公開できるようウィジェットが用意されているのが一般的となった。
こうした他のページに貼り付ける目的で提供されるJavascriptファイルはサードパーティJavascriptとも呼ばれる。
サードパーティJavascriptはバックエンドにあたるAPIにアクセスして、情報の送受信を行う。
仮にもし、他のページに自分のサービスの情報や機能を貼り付ける仕組みを提供したいと考えた時、バックエンドとなるAPIを設計する必要がある。
　→この場合、ブラウザを使って他のページからAPIへのアクセスが行われる為、クロスドメインでのアクセスのサポートを行う必要あり。

####モダンなウェブアプリケーションの構築
昔は1ページごとに遷移していたウェブサイトも、今や1つのサイトで簡潔するような仕組みになりつつある。
1サイトで完結するには、必然的にWebAPIを設計する必要が出てくる。
　→上記のようなサービスを構築する一般的な方法は、**AJAX**と呼ばれるJavascriptからウェブサーバにアクセスして、リソースを取得するというもの。
　→そのリソースを取得する為に、Web APIが使われる。

####スマートフォンアプリケーションの開発
スマホのアプリケーションでもWeb APIは当たり前に用いられている。
APIのアップデートなど、戦略的に行う必要がある。

####ソーシャルゲームの開発
ソシャゲは他の人と協力して課題をクリアしていくゲームの為、他のプレイヤーと関わるという性質上サーバとの通信が必ず発生する。
リアルタイム性はそこまで求められなくても、チート方法など悪用されるケースもある為、APIもセキュリティを強化する必要が出てくる。

####社内システムの連携
社内システムにおけるWeb APIも同様にセキュリテイや利便性を考慮して構築する必要がある。

###何をAPIで公開するべきなのか？
簡潔に言うと、**そのサービスができることをすべてAPI経由で行えるようにすること**とあった。
例として、ECサイトであれば商品の検索や購入、おすすめの情報の取得ができるようになれば良い。
不動産情報サイトであれば、物件検索や絞り込み、間取り情報の取得が出来れば良いし、写真共有サイトであれば、写真の投稿やタグ付けなどが行えればOK

####APIを公開するリスクは？
このリスクは**ない**と断定はしていないが、心配すること自体杞憂で終わるとしている。
また、WebページをAPIに変換するサービスも出てきているので、先に自分たちで公開してしまった方が、返って扱いやすくなるとしている。
>API変換サービス
・[import.io](https://www.import.io/)
・[kimono](http://www.kimonolabs.com/)

###Web APIを美しく設計する重要性
なぜ美しく設計する必要があるのか、以下引用を記述する。
>・設計の美しいWeb APIは使いやすい
・設計の美しいWeb APIは変更しやすい
・設計の美しいWeb APIは頑強である
・設計の美しいWeb APIは恥ずかしくない

###Web APIを美しくするには？
構築にあたって、まず何をAPIとして公開するのか決める必要がある。
更に、アクセス先となるエンドポイントを決め、やりとりの方法や適切なレスポンスデータの形式を考え、セキュリティやアクセス制限などについても考える必要がある。（考えることがいっぱいだ。。）
2章からこの原則について触れていくらしいが、根幹となる思想は2つある。
>・仕様が決まっているものに関しては、仕様に従う
・仕様が存在していないものに関してはデファクトスタンダードに従う

ただ漠然と「他がそうしているから」という理由でAPIを設計するのではなく、それがなぜそういう仕様になっているのかを理解することで、より美しいAPIを設計出来るようになると筆者は述べていた。
美しく設計したいので、2章も読み進めることとする。

##まとめ
・WebAPIは公開してないならした方がいいよ
・WebAPIは美しく設計しよう
（小並感）

##参考資料
[ウィジェットとは何か](https://time-space.kddi.com/mobile/20200917/2971)