メインメージ

APIとは?

API(Application Programming Interface)とは、接続先のOSを呼び出すことや互いのソフトウェアやアプリケーション機能の一部を共有することです。APIを通じて連携をすることで、アプリケーション機能を拡張させ、双方のアプリが更に便利になることがメリットです。人間がコンピュータを利用する際はGUI(Graphical User Interface)を通じてOSやアプリケーションを利用しますが、コンピュータはプログラムを通じてOSやアプリケーションの機能利用するので、プログラマ(アプリケーションエンジニア)はCUI(Character-based User Interface)を用いてソフトウェアやアプリケーションを開発します。一方でAPIは、アプリケーション開発で既存のライブラリを使う場合に用いられ、用意されたAPIに従って処理を記述することで、ライブラリの中身を知らなくてもライブラリが持つ機能を使用できます。OSが提供する機能を呼び出すために使われるAPIもあれば、他のアプリケーションが提供する機能を呼び出すために使われるAPIも存在します。

APIとGUIとCUIの関係図

GUIは画面デザインを通じて人間(エンドユーザなど)が操作をし、CUIは黒い画面の文字だけの画面で人間(主にエンジニア)が認識します。
APIはプログラムを通じてアプリケーションやOSの機能を呼び出すよう指示をします。

APIの定義と意味

APIの定義は、プログラムを通じてアプリケーションやソフトウェアの資源を利用するための接続口のことです。APIの意味は、ソフトウェアの機能を共有できる仕組みのことです。APIはソフトウェアからOSの機能を利用するための仕様、インターフェイス(やり取りの橋渡しをする機能)の総称でアプリケーション開発を容易にすることも出来ます。

APIの種類

APIの種類はWebで利用されるAPIと、プロトコル仕様によって考え方が異なります。以下の表でまとめましたので御覧ください。

Web公開と非公開

名称 概要 公開/非公開
Open API あるアプリケーションの機能や管理するデータ等を他のアプリケーションから呼び出して利用するための
接続仕様・仕組みを指します。それを他の企業等に公開することを「オープンAPI」と呼びます。
公開
Partner API 例えばAmazonは「セリングパートナーAPI」をユーザ登録をした開発者限定に公開をしています。 限定公開
Closed API 企業やグループ企業内部で利用するものや、
業務提携をしているパートナー企業内で業務用に限定されて利用することが多いAPIのことです。
非公開
Composite API 一つのAPI連携で、複数のWebアプリケーションや他のAPIにアクセスできる手法で
「コンポジットAPI」と呼びます。
サービスによる

プロトコル(通信方法)

名称 概要
REST API HTTPリスエクストとレスポンスのメソッドを利用した通信方法
XML-RPC データ形式にXMLを利用しエンコード(符号化)してリクエストされ、レスポンスもXML形式でやり取りされる
JSON-RPC サーバ側が実装しているメソッドをクライアントが呼び出すことによって処理を行う仕組みのこと
SOAP Simple Object Access Protocolの略でXMLのみを使用してメッセージングサービスを提供

Web APIと機能

Web APIとは、インターネット上で公開されているWebサービスを呼び出すことで、他のサービスと連携することも出来ます。インターネット上で公開されているサービスはクラウドサービスと呼ばれ、インターネットの向こう側に存在する意味を持つことから雲のイメージで図を描かれています。インターネットに公開されているAPIはGoogle,twitter,Outlook,Windowsなど各社様々な機能を提供しています。

Web APIの例

APIとは、わかりやすく具体例で説明

Web APIを例に説明しますと、アプリケーション開発では複数のWebサービスなどを連携して新たにサービスを作ることしますが、これを「マッシュアップ」と呼びます。例えば、毎週決まった曜日と時間にメッセージを自動送信するWebアプリを作るなどを作成する場合、時計機能とメッセージ送信機能のAPIを組み合わせると、メッセージアプリを通じて通知が届く仕組みを作ることが出来ます。マッシュアップは企業が取り組む「クラウドネイティブ」で利用されております。

API通信の仕組み(構築・開発・実装・連携・認証)

Web API通信の仕組みで考えると、構築・開発・実装・連携・認証の順番で各フェーズに分けて考えることが出来ます。構築ではサーバや開発環境の構築など準備段階のフェーズです。開発から連携まではプログラミングでアプリケーション設計の仕組みを考えたり、ソースコードを書くプログラムや、動作確認のデバッグ作業などが中心です。認証のフェーズでは、インターネット経由で利用できる大規模サービスとの連携で、利用側では対象サービスのアカウント取得、提供側では認証設定のシステム運用管理やセキュリティ対策が必要とされます。

Web API通信を実現する流れ

Web APIは通信を実現するためには、各フェーズに対して具体的にするべきことが異なります。

Web API通信の仕組み(イメージ)

Web APIは、Webのクライアントがデータを送信(リクエスト)して、サーバからデータを返送(レスポンス)してもらう原理を利用して、Webを通じてユーザではなくプログラムが直接サービスを利用するための窓口の役割をします。クライアントサイドのプログラムがWeb APIにWeb(主にインターネット)経由でデータを送信することで、データを受け取ったサーバサイドのWebサーバがデータを処理し、再びWeb(主にインターネット)経由でクライアントに処理結果のデータを返信します。APIはHTMLの文書ではなくXMLやJSONのような構造化されたデータが返信されるため、プログラムにとっては受信したデータを処理しやすくなります。

Web API通信の流れ

Web APIは、アプリケーションがWebサーバの機能を利用するためにインターフェイスです。
ユーザがWebブラウザから操作しなくてもアプリケーションが直接Webサービスを利用できます。

Web API構築

クラウド環境でWeb API環境の構築をする際は「テナント」「リージョン」「アベイラビリティゾーン」の観点で全体像を把握します。テナントとは1つのアプリケーションや1つのシステムなどの細かな単位で用意する場合や、目的やプロジェクト単位に応じて大まかに分割する場合など方法は多くあります。AWSやOpenStackなどのパブリッククラウドを利用する場合は、テナントごとに料金が発生しますので多くのテナントを構築すると月額の料金がテナントの数に応じて上昇する為、利用する分など計画をする必要があります。リージョンは地理的に遠くに離れた複数の箇所にクラウドインフラを提供されているものもあり、それぞれのインフラのことを示します。災害の影響に伴い停電によるサーバやネットワーク機器が稼働しなくなるシステムダウンに備えて、地理的に離れた地域にバックアップを取ることをDR(ディザスタリカバリ)と呼び、災害や感染症など社会的に大きな影響が及ぼす出来事が起こっても事業やサービスを継続する対策として必要とされます。アベイラビリティゾーンは、同一リージョン内でそれぞれのサーバやネットワーク機器などの単位でバックアップをとるなど冗長化をすることです。機器単体が故障などの原因で稼働しなくなってしまった場合でも、同じ役割を果たす機器が冗長化していることで、システム障害の際に補うことができ、大規模障害に発展することなく収束することができるため、障害復旧までの対応が素早く行えWebサービスなどの稼働に大きな影響を及ぼすこと無く収束することが可能です。

API通信サーバとネットワーク機器

APIを外部ネットワークと通信する場合は「グローバルIPアドレス」をネットワーク機器に付与させる必要があります。主に仮想ルータと呼ばれるネットワーク機器で通信を行いますが「NAT機能」と呼ばれるものでプライベートIPアドレスからグローバルIPに変換を行い通信を確立することが出来ます。仮想ルータとサーバ(インスタンス)(主にAPIサーバ)と通信を行う場合はプライベートIPアドレス同士で同一ネットワーク内で通信を行います。AWSの場合は「Elastic IP」OpenStackの場合は「フローティングIP」と呼ばれます。

Web API開発

API開発は、設計(デザイン)の部分にフォーカスをして考えることが重要です。理由は、利用する開発者が他のうまく設計されたインターフェイスと同じくらい、便利でシンプルなものであることを期待するためです。つまり、アプリケーション機能を接続するために、モバイルアプリやWebアプリのUIデザインのようにプログラムの世界でも簡単でシンプルなものが、多くの人達に利用しやすいことで、設計の観点で考えることが重要となります。

APIプログラミング

APIの目的はプログラミングの部分で何であっても、開発者がそれぞれの目標をできるだけ単純に達成できるようにすることにあります。ソフトウェアには流行があり、ソフトウェアを使ってデータや機能を提供する方法は様々なものが存在するため、今後も様々な方法が登場するでしょう。APIを開発するときは、例えばRPC、REST、gRPC、GraphQLなどのテクノロジーをどれでも使うことが出来、これらのテクノロジーの一部はアーキテクチャスタイルであり、残りはプロトコルやクエリ言語で、これらを「APIスタイル」とも呼ばれます。

Web API実装

人間がアプリケーションのUIを利用してアプリケーションを操作するのと同じように、アプリケーションも別のアプリケーションのプログラミングインターフェイスを使ってアプリケーションを操作できます。UIが入力フィールド、ラベル、ボタンなどを提供するのに対し、APIは関数を提供します。画面上に表示された要素がそれらの使い方に応じて異なるフィードバックを返すのに対し、関数は入力データを要求したり、アクションを開始できます。厳密にはAPIは何らかのソフトウェアによって公開されるインターフェイスにすぎなく、内部の実装(そのAPIが呼び出されたときにソフトウェアの内部で実際に呼び出されれるコード)を抽象化したものに過ぎません。

APIとアプリ

APIはアプリケーション(ソフトウェア)をLEGOブロックのように変えることが出来ます。例えばSNSで利用されているアプリケーションで、バックエンドAPIはSNSアプリケーションとWebサイトの両方で使われることがあり、実装は全く異なります。バックエンドは共有する写真とメッセージを受け取ると、どちらかのアプリケーションから送信されたとしても、サービスプロバイダのAPIを使って写真の格納を委託できます。また独自に開発したタイムラインソフトウェアモジュールのAPIを使って写真のIDとメッセージを格納することもできます。APIは一つの機能だけ提供しているものもあれば複数の機能を提供しているものもあり、LEGOブロックのように組み合わせることで、実装は自由自在に無限の方法で考えられます。

Web API連携

API連携は、簡単にシステム・サービスの質が向上する点がメリットです。ゼロベースで機能開発をすること無く既存の提供されているAPIを利用することで、様々なサービスを共用利用することが出来システム・サービスの質が向上します。また、開発コストも削減するとともにスピードもはめることが出来ますので、必要な機能開発に開発リソースを回すことなどプロジェクト進行の点でも優位に働くことが多くあります。しかし、APIを提供している企業への依存があるため、何らかの理由で停止してしまった場合は、ソフトウェア開発も止まる影響があることがデメリットです。一般的な対策は、信頼できる企業が提供しているものを選定する、例えばGoogle、Apple、Amazonなどの企業が提供しているAPIは世界的に利用されているものがあり、アップデートやセキュリティ対策も頻繁に行われており、情報も豊富に提供されておりまます。開発者はこれらのAPIを利用しアプリケーション開発を実施することで、API連携を実現しています。

Web API認証

API認証はセキュリティ対策のために、開発者が認証をして利用するため、アカウントを取得するなど限定して公開されているものです。エンドユーザ(利用者)でもアプリケーションによってはログインして利用するアプリケーションがあり、その中でAPI連携がされているため、アプリケーション同士認証しあいAPI連携がされています。インターネット上で提供されているAPIに不正アクセスが有ると、提供しているAPIに不具合が生じ、アプリケーションの機能が停止してしまうなどのシステム障害が発生してしまうリスクがあります。セキュリティ対策のためにAPI認証技術は重要な役割を担います。

API認証方式の仕組み

一般的にAPI認証方式の仕組みは「標準化されたHTTP認証方式」「APIキー認証」「Form認証 / アクセストークン認証」の3つの方法があります。標準化されたHTTP認証方式は、MD5 (Message Digest 5)と呼ばれる方法が有名で、Basic認証の平文でパスワードを送信する欠点を改善した認証方式で、IDとパスワードをハッシュ化して送信します。(「参考】MD5安全性の限界に関する調査研究報告書(IPA))APIキー認証は、セキュリティ認証でアカウントを所持しているユーザなど特定の人に限定して利用をするために、比較的に簡易的な方法で認証手段を用いるために利用されます。Form認証、アクセストークン認証は、認証鍵が動的にせいせされているため、APIキー認証よりも安全性が高いことが特長です。

Web APIセキュリティ

WEB APIセキュリティは開発運用(DevOps)のサイクルの中で実施することが有効です。これをDevSecOpsと呼ばれ、「デザイン・レビュー」「脆弱性診断・ペネトレーションテスト」「APIの防御、脆弱性の管理」「不正アクセスのモニタリグ、インシデント対応」の4つのフェーズに分けて実施します。「OWASP API Top 10」では、OWASPが、APIセキュリティリスクをランク付けし特に重要なものに関して、Web API向けTop 10のリスク要素を公開しています。