最近話題の API や REST API ってなに? ~基礎編~:
最近よく耳にする「API」という単語ですが、「API って実際に何をしてくれるのか?」と思ったことはないでしょうか?
当記事では「API とは何か?」、更に「REST API とは何か?」についてはじめての方にもわかりやすく解説します。
1. APIとは
API は「Application Programming Interface」の略称です。
API を使用すると、2つの異なるソフトウェアが相互に通信できるようになります。
API を使うことで実現できる事は、人がソフトウェアに対して操作を行うことに似ているので、人が電子メールソフトウェアを操作する事を例に考えてみます。
人の場合、「メッセージを開く」、「内容を確認する」、「メールを返信する」、「フラグを立てる」など操作を手動で行います。
この操作を人ではなくプログラム (Bot) で自動化したい場合、人が電子メールソフトウェアに対して行った「メッセージを開く」などの操作を代わりに実行するのが「API」です。
また API を使用すると、多くの機能を備えたアプリケーションの開発がリスク、コストを抑えて開発可能になります。
例として、レストランおすすめアプリを作成するとします。
アプリではユーザーがレストランを検索するときに、アプリが現在地情報を元にレストランのリストを作成するようにします。
このようなアプリを作成する時、昔はレストランのデータと位置情報のデータを自社のサーバー内に格納して、データを抽出するような作り方していました。
自社内で完結する設計のアプリは、アプリ全体が責任範囲となり、開発、保守工数を多く見積もる必要があります。
そこで登場するのが API です。
サードパーティから提供されている、レストランデータとマップデータを取得可能な API を探します。
API を活用することで、アプリは自社のサーバー内にデータを持つ必要がなく、API 経由でレストランデータとマップデータを得ることができるのです。
2. REST とは
REST は、REpresentational StateTransfer の略称です。
REST は API を構築するためのフレームワーク(枠組み、ルール)のひとつです。
REST に沿って作られた API (REST API) は、シンプルでわかりやすいのが特徴です。
REST と API を組み合わせると、アプリケーションやユーザー発行する HTTP リクエストをシンプルにデザインする事ができます。
3. REST API とは
REST API の特徴として、「A に対して B をする」という作りになっています。
ここの「A に対して」を API までのリソースパス、「B をする」を HTTP 動詞と呼びます。
先のレストランアプリの例で考えてみましょう。
以下のように REST API が作成できると考えられます。
- 「マップデータ」(リソースパス) に対して現在位置を「取得する」(HTTP 動詞)
- 「レストランデータ」(リソースパス) に対して現在位置付近のレストランを「取得する」(HTTP 動詞)
では、もう少し具体的に、リソースパスや HTTP 動詞がどのようなものなのか、Webex の API を例に確認してみましょう。
Webex の API である「Webex ユーザーの登録者リストを取得する」API を例に確認していきます。
リソースパス
実際に「Webex ユーザーの登録者リストを取得する」API のリクエストを見てみましょう。
次の仕様が、Webex ユーザーの登録者リストを取得する API です。
web サイトへアクセスする際に入力する URL に似ている構造をしています。
URL に似ているということで、ブラウザのアドレスバーから要求を送信する事ができます。
名称は URL(Uniform Resource Locator)ではなく「URI(Uniform Resource Identifier)」と呼びます。
この「URI」を構成する項目に「リソースパス」が存在します。
URI = プロトコール + ドメイン名 + リソースパス + パラメータ
「https://webexapis.com/v1/people」を「プロトコール」「ドメイン名」「リソースパス」「パラメータ」に分けてみると以下の通りです。
「プロトコール」は http または https、「ドメイン名」は WebexAPI、GoogleAPI など各種 API で決まっているため、「リソースパス」が変更されることでどの API が呼び出しされるか決まります。
また、「パラメータ」は任意項目です。
リソースパス「v1/people」から「人」に対する操作であることがわかります。
HTTP 動詞
REST API に設定する HTTP 動詞は以下のものがあります。
もう一度仕様書を確認してみます。
WebexAPI にリソースパス「v1/people」は2種類あるため、「https://webexapis.com/v1/people」で要求すると、「人々をリストする」と「人を作成する」のどちらの API が要求されたのか判断ができません。
ここで「HTTP 動詞」である「GET」を付けて送信すると、「人々をリストする」が要求されていることが判断できるようになります。
「HTTP 動詞」と「リソースパス」が確認できたところで、REST API の構成である「A に対して B する」に戻ってみると、「人に対して取得する」となります。