Web APIとは何なのか

# Web APIとは何なのか

厳格な定義はないが、広義にはHTTPプロトコルを用いてネットワーク越しに呼び出すアプリケーション間、システム間のインターフェースのこと。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/23101/1a93b788-14fb-576e-486c-e987d4399a70.png)

APIの機能はわかっているけれども、その中身の実際の動作は詳しくわからない(知らなくてもよい)機能の塊を、外部から呼び出す仕様のことを指す。また、上記図の右側の「呼ばれる側のシステム」そのものをWeb APIと呼ぶこともある。
※APIとはApplication Programming Interfaceの略。

# Web APIの重要性

Web APIの重要性は年々高まっている。
※以下の図は[オージス総研グループ](https://www.ogis-ri.co.jp/otc/hiroba/technical/WebAPI/part1.html)のもの

![0.png](https://qiita-image-store.s3.amazonaws.com/0/23101/97580ada-e7bf-2796-2228-1d551e430ae3.png)

### Web APIの歴史

古くから知られており非常に普及したWeb APIとして、2003年に公開されたAmazonの[Product Advertising API](https://affiliate.amazon.co.jp/gp/advertising/api/detail/main.html)がある。
※ちなみに、当時はAWS(Amazon Web Service)という言葉そのものがProduct Advertising APIのことを意味していた。
このAPIはアフィリエイトと結び付けられており、これを使うことで誰もが簡単にAmazonの商品を自分のサイトから販売し、その収益の一部を得ることができたという点からインターネットの世界に大きなインパクトを与えた。これは企業や個人の開発者が簡単に収益を上げる方法として非常に注目されて普及し、更にブログの普及と相まってAmazonで商品を購入するためのリンクがいたるところで貼られるようになり、結果として**Amazonの収益を大きく押し上げる結果になった。**

もう1つの歴史としてTwitterがある。Twitterは2006年からAPIを公開していた。Twitterはかなりシンプルなサービスだったため、APIを使うことでほとんどの操作を行うことができた。例えば、開発者がより使いやすさを追求したTwitterクライアントを作ったり、Twitterに投稿されたデータを使って分析を行うサービスや、botと呼ばれる機械的に生成したメッセージを投稿するシステムなど、さまざまな周辺サービスが開発された。それにより、**Twitterはほとんどの情報が集まる場になっていき、巨大なエコシステムができあがった。**

Amazon、Twitterともに、自分たちのデータをAPI経由で無料で提供しているので損しているようにも見えるが、**新しいシステム、サービスを公開する力を持った開発者にAPIを公開することで、彼らがサービスに付加価値を与えてくれて、コアとなる自分たちのサービスがより発展する力をもらうことが出来た。**


### Web APIでの利用を前提としたサービスの登場

[Twilio](http://twilio.kddi-web.com/)のようなAPIの利用を前提としたサービスも数多く登場している。コストだけを見るとこうしたサービスは自前で運用するよりも割高に見えるが、自前で運用した場合に発生する人件費や開発にかかる時間等を考えると割安であり、急速に利用されるようになってきている。その一翼をWeb APIが担っているわけである。

### スマホアプリの登場

スマホアプリがサーバと通信をする場合、Web APIを利用するケースが最も一般的である。この場合、APIは自分たちが公開するスマホアプリとサーバを繋ぐためのもので一般には公開されないものも多いが、HTTPを利用してインターネット経由でアクセス可能なAPIを作るという意味では、一般公開されるWeb APIとなんら違いはない。このようにスマホアプリの登場もWeb APIの重要性の一因となっている。

### APIエコノミーという考え方の登場

Web APIを公開することで外部サービスとの連携を容易にして新たな価値が生まれ、サービスやビジネスが発展していくことは「APIエコノミー」と呼ばれ、近年非常に注目されている。APIエコノミーの急速な広がりにより、APIそのものに注目したサービスも登場している。

[今、起こりつつあるAPIエコノミーとか何か？](http://jp.techcrunch.com/2013/04/29/20130428facebook-and-the-sudden-wake-up-about-the-api-economy/)
[繋ぐことで生まれる｢APIエコノミー｣の衝撃](http://toyokeizai.net/articles/-/107473)
[IBM - API エコノミー - Japan](http://www.ibm.com/middleware/integration/jp-ja/api-economy.html)

また、Apigeeの戦略担当副社長であるSam Ramjiによると、今や自らのWebサイトで直接サービスを行う「直接販売」から、Web APIを公開しそれを複数組み合わせたアプリケーションがユーザーにサービスを行う「間接販売」モデルになったと述べている。つまり、サービスの価値を直営店(自分のサービス)で提供するだけでなく、小売店(他のアプリケーション)で利用できるようにしなければ、自社のサービスを拡販していくことは難しい世の中になってきているということ。そういったことからも、サービスを活性化させていくにはAPIの公開は非常に重要である。

ただ、日本ではまだAPIを公開するという潮流は本格化はしていない。

### マイクロサービスアーキテクチャという考え方の登場

[マイクロサービスアーキテクチャ](https://html5experts.jp/miyuki-baba/14776/)の台頭により、モノリシックなシステムをマイクロサービス化し、各マイクロサービスをWeb APIで連携させるようなリプレイスが近年増えている。こういった流れもWeb APIの重要性の一因となっている。

# Web APIで何を公開するべきか

何を公開するかの考え方の軸として、APIを公開することで自らの利益に貢献できるものは何か？を軸にすると良い。何らかのサービスを運営しているなら、そのサービスのコアとなっている価値ある部分を全て公開するべきである。例えば、ECサイトを運営している場合、商品の検索、購入、不動産情報サイトを運営している場合、物件検索、絞り込み、間取りの情報取得等がそれらにあたると思う。このようにそのサービスが価値を生み出している部分を公開するべきである。ただし、個人情報の類や業務上守秘義務があるような情報は当然ながら公開は控えるべきである。

# Web APIを公開することのリスク

APIに対して一定時間内に多くのアクセスがあると、負荷がかかり過ぎてサーバがダウンしてしまう可能性がある。サーバがダウンしAPIが利用できなくなるということは[可用性](https://ja.wikipedia.org/wiki/%E5%8F%AF%E7%94%A8%E6%80%A7)の観点から避けるべきである。こういったリスクに対して、多くのAPIがレートリミット(一定時間あたりにAPIを使用できる回数)を設けている。その制限を超えてAPIを利用する場合には、提携関係を結んで利用料を払うことで制限なく利用させたりしている。

# Web APIを公開することで得られるもの

Web APIを公開することで、様々な付加価値を他の企業や個人が提供してくれるようになり、運営しているサービスの価値や情報の質が上がる可能性が十分にある。例えば、個人や企業で何らかのサービスを運営していると、新しい機能等のアイデアが色々と出てくるが、工数や予算の関係上、必ずしもそれらの機能を全部実装できるわけではない。しかしAPIを公開すれば、思いついてはいたが優先順位を下げていた機能や、全く思いつきもしなかった新しい発想の機能を、他の誰かがAPIを利用して作ってみてくれる可能性がある。

# Web APIを美しく設計する重要性

### 設計の美しいWeb APIは使いやすい

APIを作り公開する場合、そのAPIを利用するのは自分ではないケースが多い。APIを設計するからには多くの人に利用してもらいたいので、そのためにもAPIを利用する側にはストレスなく使ってもらえるよう、使いやすさを意識する必要がある。

### 設計の美しいWeb APIは変更しやすい

Webサービスやシステムはどんどん進化していく。公開した当時と同じ状態のまま2年も3年も運用が続けられるケースは少ない。進化していけばインターフェースであるAPIも変化を余儀なくされる。ただ、APIは自分たちと関係ない第三者が使っている場合も多く、その場合いきなりAPIの仕様が変わってしまうと、そうした人たちの作ったシステムやサービスがいきなり動かなくなる、といったことも考えられる。こうした事態はAPIを提供する側としては避けなければならない。そのためにもAPIの変更をいかに利用者に影響なく変更できるかを意識する必要がある。

### 設計の美しいWeb APIは頑強である

Web APIはインターネットを通じて提供するため、誰でもアクセス可能になってしまう。そのため、セキュリティの問題が必ず発生する。APIといえど、ウェブサイトと同じHTTPを利用している以上、ほぼ同等のセキュリティの問題を意識する必要がある。

### 設計の美しいWeb APIは恥ずかしくない

Web APIは通常のウェブサイト等とは異なり、主に開発者が目にするものである。開発者は他の開発者を、開発したコードやインターフェース等の成果物で判断する。そのため、開発者目線で美しくない、センスの疑われるAPIを公開してしまうと、そのサービスの開発者の技術レベル、そのサービス、APIを提供している会社そのものが疑われる。そういった意味で恥ずかしくないAPIを意識する必要がある。

# Web APIの種類

### [XML-RPC](https://ja.wikipedia.org/wiki/XML-RPC)

### [SOAP](https://ja.wikipedia.org/wiki/SOAP_(%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB))

2000年代前半まで主流だったWeb API。SOAPのようなXMLベースで仕様が複雑なものは近年ではあまり使われなくなってきている(最近はLL(Lightweight Language)が主流となってきており、その潮流もある)

### [REST](https://ja.wikipedia.org/wiki/REST)

最近ではWeb API = REST、なくらい現在主流なWeb API。
関連　[リソース指向アーキテクチャ(ROA)とは何なのか](http://qiita.com/ARS_2000/items/0f3a55e422d5cc9f1b9c)
###

# 海外・国内の便利なAPI一覧

[海外・国内の便利なAPI一覧](http://smsurf.app-rox.com/api/)

# 参考
[Web API: The Good Parts](https://www.oreilly.co.jp/books/9784873116860/)
[APIファーストで開発する7つのメリット](https://developer.ntt.com/ja/blog/API%E3%83%95%E3%82%A1%E3%83%BC%E3%82%B9%E3%83%88%E3%81%A7%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B7%E3%81%A4%E3%81%AE%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88)