APIとは?

アプリケーションプログラミングインターフェース(API)とは、ソフトウェアの一部が他のソフトウェアの機能の一部を利用するための仕様です。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • 「API」を定義する
  • APIコール、APIエンドポイント、APIスキーマ、API連携について説明する
  • Web API、SOAP API、REST APIについて説明する
  • APIのセキュリティ保護について理解する

記事のリンクをコピーする

アプリケーションプログラミングインターフェース(API)とは?

アプリケーションプログラミングインターフェース(API)は、あるソフトウェアプログラムが別のソフトウェアプログラムにデータを送信するための一連の仕様です。APIを利用することで、開発者は冗長的な作業を避けることができます。既存のアプリケーションの機能をビルドして再構築する代わりに、APIが要求する書式にしたがってリクエストを行うことで、既存の機能を新しいアプリケーションに取り込むことができます。

APIは「インターフェース」であり、あるものが別のものと対話する方法を意味しています。実際の例として、ATMには画面といくつかのボタンというインターフェイスがあり、顧客は銀行とやり取りして、現金を引き出すなどのサービスを要求することができます。同様に、APIは、あるソフトウェアの一部が他のプログラムとやり取りして必要なサービスを得る方法です。

ジェニファーが、通勤する人が出勤前に国道の交通状況をチェックするためのWebサイトを作ったとします。ジェニファーは、自分のWebサイトのユーザーにこの情報を提供するために、複雑な国道の追跡システムを設定するために多くの時間とお金を費やすことになります。しかし、このようなシステムは、すでに外部の第三者によって作られており、その機能は存在しています。ジェニファーのWebサイトでは、このような確立されている技術を再開発する代わりに、外部の国道の追跡サービスが提供するAPIを使用します。こうすることでジェニファーは、ウェブサイトの他の部分の構築に集中することができるようになります。

APIコールとは?

APIコール(APIリクエストとも呼ばれる)は、APIの使用をトリガーする、API宛のメッセージのことです。例に戻ると、ジェニファーは自分のWebサイトを読み込む際に、高速道路の追跡サービスに対するAPIコールを自動的に生成するように構築します。その応答は、そのサービスからWebサイトに返され、最新の高速道路交通情報を表示することができます。

APIコールは、APIの要件に従った書式でなければ動作しません。APIの要件は「スキーマ」と呼ばれます。スキーマには、各リクエストに対して提供されるレスポンスの種類も記述されています。

ある通勤者がジェニファーのWebサイトを利用して、国道192号線の交通状況を確認したとします。Webサイトはこの情報を提供するために「国道192号線」というメッセージのAPIコールを送信します。国道追跡サービスのAPIサーバーはこのメッセージを受信し、国道192号線の所要時間を返信します。APIのスキーマを次のように考えてみましょう:

APIリクエスト API応答
「国道192号線」 国道192号線の所要時間
「国道217号線」 国道217号線の所要時間
「国道225号線」 国道225号線の所要時間

(なお、これは非常に単純化された例あり、実際のAPIのリクエスト、レスポンス、スキーマはより複雑なものになります)。

ここで、ジェニファーのWebサイトが「国道ASDFGHJ」に対するAPIリクエストを送信したとします。これは国道の実名のみを許可するAPIのスキーマに従ったものではないため有効なリクエストではありません。サーバーはこのようなリクエストに対して、使用可能なレスポンスを提供することはできません。

APIエンドポイントとは?

エンドポイントとは、通信路の終端を指します。APIエンドポイントは、APIレスポンスの発信元となる場所のことです。

この例では、API接続のクライアントはジェニファーのWebサイトであり、エンドポイントはAPIをホストするサーバーです。ジェニファーのAPIコールはレスポンスを得るために、APIサーバーが担当する特定のURL(URLはwww.cloudflare.com/learningのようなWebアドレスです)に移動する必要があります。

API連携とは?

API連携とは、APIを利用して2つ以上のアプリケーションを組み合わせることです。これは、営業チームとマーケティングチームを1つのオフィスに統合することで、2つのチームが協力し合い、互いの努力から利益を得ることができるようなものです。API連携は、一般的に2つのアプリケーションやデータベース間でデータを同期させるためにも使用されます。

Web APIとは?

オペレーティングシステムからソフトウェアライブラリまで、コンピュータコードを伴うものなら何でもAPIを持つことができます。Web APIは、インターネット経由でアクセスするWebアプリケーションでの使用に特化したものです。

Web APIは、現代のインターネットにとって非常に重要なものです。ほぼすべてのユーザー向けアプリケーションは、APIに依存して機能しています(ジェニファーのWebサイトだけではありません!)。ソフトウェア開発の考え方全体がAPIの使用に依存しています。そのような考え方の1つがJAMstackであり、JAMはJavaScript、API、Markupを表しています。他の例としては、アプリケーションを構成するさまざまな機能を呼び出すためにAPIを使用するマイクロサービスアーキテクチャがあります。これらのアプローチによらずに作られたアプリケーションも、通常はAPIに依存しています。

SOAP APIおよびREST APIとは?

SOAP APIとREST APIは、異なるカテゴリーのAPIを表しています。

SOAP(Simple Object Access Protocol)は プロトコルの一種です。SOAP APIは、SOAPプロトコルのみを使用するAPIです。

REST(REpresentational State Transfer)は、Webサービスのアーキテクチャスタイルの一つです。REST APIは、RESTアーキテクチャを使用してビルドされたすべてのAPIを指します。SOAP APIとは異なり、REST APIはあらゆるプロトコルで動作します。現在のほとんどのAPIはREST APIです。

APIはセキュリティリスクをもたらすか?

ユーザーにアプリケーションの使用を許可するとそれが悪用されるリスクがあるように、APIもAPIクライアントにサービスを悪用されるリスクがあります。さらに、Web API の呼び出しはインターネット上を移動するため、他のネッ���ワーク上に流れるデータと同様に、傍受、スプーフィング、または改ざんされる恐れがあります。

APIセキュリティは、APIを攻撃や悪用から保護するための実践方法です。現代のインターネットにおけるAPIの重要性を考えると、APIセキュリティはWebアプリケーションセキュリティの中核的な要素であると言えます。重要なAPIセキュリティの対策には次のようなものがあります:

  • レート制限:異常な数のAPIリクエストを行うクライアントは、他のクライアントのAPIの速度を低下させたり、クラッシュさせたりすることがあります。レート制限は、特定のAPIエンドポイントから一定時間内に受けることができるAPIリクエストの数に上限を設定するものです。
  • DDoS攻撃対策:レート制限と同様に、分散サービス妨害(DDoS)からの保護は、一度に大量のリクエストを送信してAPIを使い果たす、または過負荷状態にすることを目的としたDDoS攻撃を阻止します。
  • 認証:APIリクエストが攻撃者ではなく、正当なソースから送られたものであることを確認するために、APIエンドポイントとクライアントを認証することは重要です。相互TLS認証(mTLS)は、API認証の最も効果的な形式の1つです。
  • スキーマの検証:APIリクエストがAPIのスキーマに従ったものでない場合、APIは機密情報を公開してしまうなど、予期しない方法で反応する可能性があります。スキーマの検証を有効にすることで、APIがそのようなリクエストを拒否することができます。

Cloudflare API Shieldには、これらの機能をはじめ、その他のAPIの脅威から保護するためのセキュリティ機能が搭載されています。APIセキュリティについての詳細はAPIセキュリティとは何か?をご覧ください。