2017年 秋期 応用情報技術者試験 問4

WebAPIの設計

S社は,家庭向けの体重計,血圧計,活動量計などの健康機器を製造販売している会社である。競合する他社との差別化を図るために,クラウドサービスを使った健康管理サービス(以下,本サービスという)の提供を検討している。例えば,健康機器で計測したデータ(以下,計測データという)を本サービスで管理して,スマートフォン(以下,スマホという)のアプリケーションプログラム(以下,アプリという)で計測データを確認できるようにすることを考えている。開発部のT君を中心に,本サービスを設計することになった。

T君は,本サービスのアーキテクチャを検討し,クラウドサービス上に健康機器やアプリから呼ばれるWebAPIを用意し,そのWebAPIを介して,計測データのアップロードや確認を行う方式を採用することにした。

【本サービスの前提】

T君は,本サービスの全体を図1のように構成し,前提を次のように考えた。

  • 健康機器は,表示用のディスプレイ,インターネットにアクセスするための無線LAN(以下,Wi-Fiという),スマホと通信するためのBluetooth機能を装備する。
  • 家庭内はWi-Fiルータでインターネットにアクセスできる環境とする。
  • 計測時には,健康機器はスマホを介することなく,Wi-Fi経由で本サービスにアクセスする。

【本サービスのユースケース】

T君は,WebAPIの満たすべき要件を明らかにするために,本サービスのユースケースを洗い出し,表1のように整理した。また,本サービスで使用するデータベースの主なテーブルを表2のように定義した。

表1 本サービスのユースケース
ユースケース名ユースケースシナリオ
ユーザの登録・利用者は,アプリの"ユーザ登録"画面で,登録する利用者の愛称(アプリや健康機器で利用者を識別するためのもの)とメールアドレスを入力する。
・アプリは,愛称とメールアドレスを"ユーザ登録"WebAPIに渡す。
・WebAPIは,ユーザIDとパスワードを生成して"ユーザ"テーブルに追加し,ユーザIDとパスワードをアプリに返す。
・アプリは,愛称,メールアドレス,ユーザID,パスワードをスマホ内に保存する。
健康機器のWi-Fi設定・利用者は,スマホと健康機器をBluetoothで接続して,アプリの"健康機器Wi-Fi設定"画面で,利用するSSIDを選択し,対応する暗号化キーを入力する。
・アプリは,SSIDと暗号化キーを健康機器に送る。
・健康機器は,受け取ったSSIDと暗号化キーを保存し,Wi-Fiに接続する。
健康機器へのユーザの登録・利用者は,スマホと健康機器をBluetoothで接続して,アプリの"健康機器ユーザ登録"画面で,登録する利用者の愛称を選択する。
・アプリは,①必要なユーザ情報を健康機器に送る。
・健康機器は,受け取ったユーザ情報で"ユーザ参照"WebAPIを呼び,そのユーザが登録されていることが確認できたら,アプリから受け取ったユーザ情報を健康機器内に保存する。
計測・利用者は,健康機器で計測する。ディスプレイに表示される愛称を確認して,計測対象者を選択する。(具体的な選択方法は,各健康機器によって異なる。)
・健康機器は,計測した1件分の計測値種別,計測日時,計測値を"計測データ登録"WebAPIに渡す。計測値種別とは,体重,血圧,活動量などの計測値の種別を表す。
・WebAPIは,渡されたデータを"計測データ"テーブルに追加して,メールアドレス宛にメールを送信する。
計測データの参照・利用者は,アプリの"計測データ参照"画面で,参照するユーザの愛称を選択する。
・アプリは,"計測データ参照"WebAPIを呼ぶ。
・WebAPIは,"計測データ"テーブルを参照し,対象となるデータをアプリに返す。
・アプリは,計測データをグラフなどで見やすくして表示する。
ユーザの削除・利用者は,アプリの"ユーザ削除"画面で,削除するユーザの愛称を選択する。
・アプリは,"ユーザ削除"WebAPIを呼ぶ。
・WebAPIは,"ユーザ"テーブルと"計測データ"テーブル内の対象行を削除する。
・アプリは,スマホ内に保存した削除対象ユーザの情報を削除する。
・アプリは,健康機器に,健康機器内に保存した削除対象ユーザの情報を削除させる。
表2 主なテーブル
テーブル名列名
ユーザユーザID,パスワード,愛称,メールアドレス,登録日時
計測データユーザID,計測値種別,計測日時,計測値

【WebAPIの設計方針】

T君は,最近のWebAPIの技術動向を調査,検討した結果,本サービスのWebAPIはREST(REpresentational State Transfer)形式を採用することとし,設計方針を次のように決めた。

  • WebAPIへのアクセスは,すべてHTTPSを用いて行う。
  • アクセス対象への CRUD(Create,Read,Update,Delete)の操作を,それぞれHTTPメソッドのPOST,GET,PUT,DELETEで提供する。
  • URIは,次の(1)~(5)に従って設計する。

(1) "api.example.co.jp"のように,APIであることが一目で分かるようにする。

(2) APIのバージョン番号を含める。

(3) deleteUserのようにリソースに対する操作を動詞を用いて表現するのではなく,usersのように対象とするリソースを複数形の名詞で表現し,操作はHTTPメソッドで指定する。

(4) アプリケーションや言語に依存する拡張子は含めない。

(5) リソースの関係性が一目で分かるようにする。

  • すべてのWebAPIでユーザ認証を行う。②ユーザ認証は,HTTPリクエストヘッダのX-Authorizationヘッダフィールドで,"ユーザID:パスワード"をBASE64エンコードしたものを設定する方式とし,設定された"ユーザID:パスワード"が"ユーザ"テーブルに存在することを確認する。"ユーザ登録"WebAPIを呼ぶ際は,ユーザIDが決まっていないので,ユーザ登録用に特別に用意したユーザIDでユーザ認証を行う。

  • WebAPIの実行結果のステータスは,標準的なHTTPステータスを使用する。

    • 200:OK
    • 400:不正なパラメタ
    • 401:認証失敗
    • 404:データが存在しない
  • リクエストとレスポンスのボディ部のフォーマットはJSON,文字コードはUTF-8を使用する。

設計方針に従ってWebAPIを設計した。URIテンプレートは,

https://api.example.co.jp/{version}/users/{userId}/{valueType}

とし,{version}はバージョン番号,{userId}はユーザID,{valueType}は計測値種別を必要に応じて指定する。

S社は,本サービスを利用する最初の健康機器として,体重計を発売することにした。体重計で利用するWebAPIでは,バージョン番号はv1,計測値種別はweightsとした。体重計で利用するWebAPIを表3に示す。

表3 体重計で利用するWebAPI
API名URIHTTPメソッドリクエストのボディ部レスポンスのボディ部
ユーザ登録(略)POST愛称,メールアドレスユーザID,パスワード
ユーザ参照bGETf愛称,メールアドレス
ユーザ削除(略)d
a(略)POSTg
計測データ参照ce{計測日時,計測値}の配列
注記 一は,ボディ部がないことを表す。
平成29年度 秋期 応用情報技術者試験 午後 問4