🐥

APIとは?を整理してみる(Web API,ライブラリとの違いなど)

2022/05/18に公開

はじめに

はじめまして,遠藤和真です。

地方公立高校から東大に合格し,東大で修士号(工学)を取得しました。

新卒で就職したばかりですが,大学在学中からエンジニアとしてインターンをしていたり,研究でもシステム開発をしていたので,エンジニア歴は5~6年になります。

この記事の内容

API は【Application Programming Interface】の略で,現代のITシステムの根幹をなすものとなっています。

しかし,APIという単語が広く使われるようになったが故に,情報が錯綜し,APIという単語の持つ意味が分かりづらくなっていると感じています。

この記事では,APIとWeb API,ライブラリとの違いに着目しつつAPIとは何かについて整理していきます。

APIとは

IBMのウェブサイト(What is an Application Programming Interface (API) | IBM https://www.ibm.com/cloud/learn/api)によれば,APIとは,

An application programming interface, or API, enables companies to open up their applications’ data and functionality to external third-party developers, business partners, and internal departments within their companies. This allows services and products to communicate with each other and leverage each other’s data and functionality through a documented interface. Developers don't need to know how an API is implemented; they simply use the interface to communicate with other products and services. API use has surged over the past decade, to the degree that many of the most popular web applications today would not be possible without APIs.

【和訳:アプリケーションプログラミングインターフェース(API)は、企業が自社のアプリケーションのデータや機能を、外部のサードパーティ開発者、ビジネスパートナー、企業内の各部門に開放することを可能にするものである。これにより、サービスや製品が相互に通信し、文書化されたインターフェースを通じて互いのデータや機能を活用できるようになる。開発者は、APIがどのように実装されているかを知る必要はなく、単に他の製品やサービスと通信するためにインターフェースを使用するだけでよい。APIは過去10年間で急速に普及し、現在最も人気のあるWebアプリケーションの多くは、APIなしには実現できないほどだ。】

となっています。

重要なのは,「サービスや製品が相互に通信し、文書化されたインターフェースを通じて互いのデータや機能を活用できるようになる」という部分でしょう。

もっと分かりやすくいえば,「サービス・プロダクト間で,他のサービス・プロダクトのデータや機能を使わせてもらうためのインターフェース」といえます。

インターフェースであるとはどういうことかというと,イメージとしては,サイゼリヤの注文票のようなものです。すなわちサイゼリヤというレストランでは紙の注文票に食べたい商品の番号を書いて店員さんに渡し,お店はその注文票を元に料理を配膳しますが,このとき注文票と店員さんがお客さんと厨房の間のインターフェースとなっています(もっと良い例があったら教えてください…)。


(画像はhttps://emnaayadi.com/2021/11/02/api-testing/より)

APIの何がいいのか

また,同じIBMのサイトでは,APIにより得られる恩恵(benefits)として以下の4つが挙げられています。

  • Improved collaboration(コラボレーションの改善)
  • Easier innovation(イノベーションを簡単に)
  • Data monetization(データをマネタイズする)
  • Added security(セキュリティを強化する)

サービス・プロダクト間で機能を分担して共有することで,こうした恩恵が得られることとなります。

2つ目の「イノベーションを簡単に」という視点は良いですね。「新結合」,もしくは「融合」によりイノベーションが生まれるということは一般に言われています(シュンペーターとは? イノベーション理論の実践例から考察する:日経ビジネス電子版)。APIはまさに「新結合」のインターフェースとなり,提供側のデータや機能を活用しつつ新たな価値を比較的簡単に生むことが可能になります。

3つ目の「データをマネタイズする」という部分は少し性質が異なります。

これはAPI提供側が,利用側にAPI利用に関して利用料金をとることで,API提供側にもインセンティブが生まれ,ビジネスとして成立するということを示しています。これにより,APIエコノミーという単語も生まれました

(APIエコノミー(Application Programing Interface Economy) | 用語解説 | 野村総合研究所(NRI) https://www.nri.com/jp/knowledge/glossary/lst/alphabet/api_economy)。

Web APIとは

Web APIとはweb技術を通じて提供されるAPIという文脈で用いられることが多いです。

Web APIとは、httpやhttpsなどWeb技術を用いて実現されるAPIの一類型です。API(Application Programming Interface)とは、プログラムの機能の一部を別のプログラム上で利用できるように共有する仕組みです。

https://blog.hubspot.jp/api-web

APIの定義でwebやhttpといった単語は登場しませんでした。Web APIはAPIの一種ということになります。しかし,個人的な体感として,ビジネスの文脈でAPIという単語が使われる時はこのWeb APIを指していることが多い気がします。これは前述したAPIエコノミーがWeb APIにより発展しているからではないかと思います。

RESTful API

エンジニアとしてはRESTful APIという単語もよく聞きます。これは,Web APIのうち現在主流のもの,と考えて差し支えないと思います。

APIがRESTfulであるとは,以下のような場合です。

  • クライアント、サーバー、リソースからなるクライアント/サーバーアーキテクチャで、要求は HTTP 経由で管理される
  • ステートレス・クライアントサーバー通信。get 要求の間にクライアント情報は格納されず、各要求は独立しており、分離している
  • クライアントとサーバーのやり取りを効率化する、キャッシュ可能なデータ
  • 標準化された形式で情報を転送するための、コンポーネント間で統一されたインタフェース。以下の要件を満たすこと
    • 要求されるリソースは識別可能で、クライアントに送信される表現とは切り離されている
    • クライアントが受け取る表現には操作に十分な情報が含まれているので、クライアントは表現を通じてリソースを操作できる
    • クライアントに返される自己記述的メッセージには、クライアントが情報をどのように処理すべきかを記述する十分な情報が含まれている
    • ハイパーテキスト/ハイパーメディアが利用可能。つまり、リソースにアクセスした後、クライアントはハイパーリンクを使用して現在利用できるその他すべてのアクションを見つけられる
  • 要求された情報の取得に関係する、各タイプのサーバー (セキュリティ、負荷分散などを実行) を、クライアントからは参照できない階層に整理する階層化システム
  • コードオンデマンド (任意):実行可能コードを要求されたときにサーバーからクライアントに送信して、クライアントの機能を拡張する機能

REST API (RESTful API) とは | Red Hatより引用)

APIとライブラリの違いとは

ライブラリで提供される関数等をAPIと呼んでいるケースも耳にします。

例えばMDN Web Docsでは,

Application Programming Interfaces (APIs) は、開発者が複雑な機能をより簡単に作成できるよう、プログラミング言語から提供される構造です。複雑なコードを抽象化し、それにかわる簡潔な構文を提供します。

と述べられています。

これはまさしくライブラリのようなものを想定していると考えられます。

このように広義のAPIとしてライブラリをAPIと呼ぶ場合があります。

また,APIとライブラリの違いについて分かりやすかった説明として,このサイトでは,以下のように述べられています。

APIとライブラリはどちらも便利な機能を呼び出すという意味では同じです。しかし、APIとライブラリはそれぞれ下のような特徴をもっています。

  • APIは既存のソフトやウェブサービスを簡単に利用するためのもの
  • ライブラリは数学の関数群やファイル操作の機能群といったそれ単体では意味をなさないもの
    この二つより呼び出す機能が何に属しているかによってAPIかライブラリかの判別ができるのではないでしょうか。

ライブラリの中でも機能が単体で意味をなすものはAPIに分類されることがあると考えれば良さそうですね。

おわりに

いかがだったでしょうか。一口にAPIといっても様々な種類があることが分かります。読み手としては,APIという単語については文脈を見てどういう意図で使われているかを注意する必要があります。書き手としては,APIという単語を使う際にはできるだけWeb APIという単語を使うなど誤解が生じないように注意したいです。

Discussion