応用情報技術者過去問題 平成29年秋期 午後問4

⇄問題文と設問を画面2分割で開く⇱問題PDF⇱解答用紙PDF

問4 システムアーキテクチャ

WebAPIの設計に関する次の記述を読んで,設問1〜4に答えよ。

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

〔本サービスの前提〕
 T君は,本サービスの全体を図1のように構成し,前提を次のように考えた。
pm04_1.gif/image-size:512×186
  • 健康機器は,表示用のディスプレイ,インターネットにアクセスするための無線LAN(以下,Wi-Fiという),スマホと通信するためのBluetooth機能を装備する。
  • 家庭内はWi-Fiルータでインターネットにアクセスできる環境とする。
  • 計測時には,健康機器はスマホを介することなく,Wi-Fi経由で本サービスにアクセスする。
〔本サービスのユースケース〕
 T君は,WebAPIの満たすべき要件を明らかにするために,本サービスのユースケースを洗い出し,表1のように整理した。また,本サービスで使用するデータベースの主なテーブルを表2のように定義した。
pm04_2.gif/image-size:531×649
〔WebAPIの設計方針〕
 T君は,最近のWebAPIの技術動向を調査,検討した結果,本サービスのWebAPIはREST(REpresentational State Transfer)形式を採用することとし,設計方針を次のように決めた。
  • WebAPIへのアクセスは,全てHTTPSを用いて行う。
  • アクセス対象へのCRUD(Create,Read,Update,Delete)の操作を,それぞれHTTPメソッドのPOST,GET,PUT,DELETEで提供する。
  • URIは,次の(1)〜(5)に従って設計する。
    • "api.example.co.jp"のように,APIであることが一目で分かるようにする。
    • APIのバージョン番号を含める。
    • deleteUserのようにリソースに対する操作を動詞を用いて表現するのではなく,usersのように対象とするリソースを複数形の名調で表現し,操作はHTTPメソッドで指定する。
    • アプリケーションや言語に依存する拡張子は含めない。
    • リソースの関係性が一目で分かるようにする。
  • 全ての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に示す。
pm04_3.gif/image-size:529×159

設問1

表1中の下線①について,健康機器に送る必要があるユーザ情報を全て答えよ。

-解答入力欄-

-解答例・解答の要点-

  • 愛称,ユーザID,パスワード

-解説-

まず「アプリに登録されている情報とは何であるか」を考えてみると、"ユーザの登録"のユースケースに説明されているように、愛称、メールアドレス、ユーザID、パスワードの4つです。

〔WebAPIの設計方針〕では、HTTPリクエストヘッダ内のX-Authorizationヘッダでユーザ名とパスワードを用いる認証を全てのWebAPIで行うと説明されています。健康機器はアプリから受け取った情報を用いて"ユーザ参照"や"計測データ登録"WebAPIを呼ぶので、「ユーザ名」と「パスワード」が必要です。
さらに"計測"のユースケースに注目すると、「ディスプレイに表示される愛称を確認して…」という記述があります。すなわち健康機器には愛称が保存されていなくてはなりません。健康機器へのユーザ登録以降、アプリから健康機器に情報を送る場面がないことを考えると、必要なユーザ情報には「愛称」が含まれ、ID・パスワードとともに健康機器内に保存されると判断できます。

したがって健康機器へのユーザ登録時に、アプリから健康機器に送る情報は「愛称,ユーザID,パスワード」の3つです。

∴愛称,ユーザID,パスワード

設問2

本文中の下線②の認証方式を採用する際に,セキュリティ上必要となる重要な設計方針を,本文中の字句を用いて35字以内で述べよ。また,その設計方針が必要な理由を20字以内で述べよ。

-解答入力欄-

  • 設計方針:

  • 理由:

-解答例・解答の要点-

  • 設計方針:
    WebAPIへのアクセスは,全てHTTPSを用いて行う (27文字)
  • 理由:HTTPだと盗聴される危険があるから (18文字)

-解説-

下線②の前文では「全てのWebAPIでユーザ認証を行う」と説明されています。WebAPIへのアクセスでは、ユーザ名:パスワードの認証情報がHTTPリクエストヘッダに含まれているので、平文の通信(HTTP通信)だと盗聴などにより認証情報が漏えいし、不正利用に繋がるおそれがあります。認証情報はBASE64でエンコードされていますが、BASE64は暗号化方式ではないため簡単に平文に戻せます。このため、安全な認証を行うにはWebAPIへのアクセスにHTTPSを用いる必要があります。

重要となる設計方針はどれかと問うているので〔WebAPIの設計方針〕から探すと、1つ目の「WebAPIへのアクセスは,全てHTTPSを用いて行う」がそれに該当します。

∴設計方針:WebAPIへのアクセスは,全てHTTPSを用いて行う
 理由:HTTPだと盗聴される危険があるから
BASE64
マルチバイト文字やバイナリデータを印字可能な64種類の英数字のみで表されるテキストデータに変換する方式。MIMEで規定されている

設問3

体重計で利用するWebAPIの仕様について,(1)〜(4)に答えよ。
  • 表3中のaに入れる適切なAPI名を答えよ。
  • 表3中のbcに入れるURIを解答群の中から選び,記号で答えよ。
  • 表3中のdeに入れる適切なHTTPメソッドを答えよ。
  • 表3中のfgに入れる適切な字句を答えよ。
b,c に関する解答群
  • https://api.example.co.jp/v1/users
  • https://api.example.co.jp/v1/users/{userId}
  • https://api.example.co.jp/v1/users/{userId}/weights
  • https://api.example.co.jp/v1/weight

-解答入力欄-

    • a:
    • b:
    • c:
    • d:
    • e:
    • f:
    • g:

-解答例・解答の要点-

    • a:計測データ登録
    • b:
    • c:
    • d:DELETE
    • e:GET
    • f:-
    • g:計測日時,計測値

-解説-

  • aについて〕
    対応するHTTPメソッドが"POST"なので登録に係るAPIと判断できます。ユースケースに登場する5つのWebAPIのうち表3に存在しない"計測データ登録"が適切です。

    a=計測データ登録

  • URIテンプレートは以下の通りです。
    pm04_4.gif/image-size:461×77
    bについて〕
    バージョン番号とユーザIDはどの操作でも必須です。計測値種別は必要に応じて指定されますが、ユーザ参照では関係ないので省略されます。したがってユーザ参照は{version}部分に"v1"、{valueType}を省略した以下のURIなります。
     https://api.example.co.jp/v1/users/{userId}

    b=イ:https://api.example.co.jp/v1/users/{userId}

    cについて〕
    計測データ参照では取得したい計測値の種別をURIの{valueType}で指定します。体重計で使用する計測値種別は"weights"なので以下のURIになります。
     https://api.example.co.jp/v1/users/{userId}/weights

    c=ウ:https://api.example.co.jp/v1/users/{userId}/weights

  • 〔WebAPIの設計方針〕では、「CRUD(Create,Read,Update,Delete)の操作を,それぞれHTTPメソッドのPOST,GET,PUT,DELETEで行う」と説明されています。つまりCRUDの種類によってHTTPメソッドが決定されます。
    pm04_5.gif/image-size:264×158
    dについて〕
    dが含まれるAPI名は"ユーザ削除"ですから、HTTPメソッドはDELETEになります。

    d=DELETE

    eについて〕
    eが含まれるAPI名は"計測データ参照"ですから、HTTPメソッドはGETになります。

    e=GET

  • fについて〕
    "ユーザ参照"APIで必要となる情報はユーザIDのみです。ユーザIDはURIの{userId}の部分に含まれているので、"ユーザ削除"や"計測データ参照"と同じようにリクエストボディとして指定するデータは何もありません。

    f=−

    gについて〕
    計測のユースケースを読むと、「健康機器は,計測した1件分の計測値種別,計測日時,計測値を"計測データ登録"WebAPIに渡す」と説明されています。"計測値種別"はURIの"valueType"に指定することでWebAPIに伝えられますが、残りの2つについてはURIだけではWebAPIに渡せません。したがって"計測日時"と"計測値"はHTTPリクエストのボディ部に指定することになります。

    g=計測日時,計測値

設問4

リクエストのボディ部が{"nickname":""}で"ユーザ登録"WebAPIが呼ばれた場合,どのような結果を返せばよいか。20字以内で述べよ。

-解答入力欄-


-解答例・解答の要点-

  • HTTPステータスを400で返す (16文字)

-解説-

リクエストボディ部のフォーマットであるJSON(JavaScript Object Notation)とは、
{パラメタ名1:値1,パラメタ名2:値2}
というように":(コロン)"で連結したパラメタ名と値の組を",(コンマ)"で区切って指定する形式です。つまりリクエストボディ部の{"nickname":""}が意味するところは、WebAPIに渡された愛称データが空文字であり、メールアドレスのパラメタがないということです。

"ユーザ登録"の手順では、アプリからWebAPIに"愛称"と"メールアドレス"を渡すことになっていますが、このリクエストには必須パラメタである"メールアドレス"が不足しています。また、愛称は「アプリや健康機器で利用者を識別するためのもの」であり登録後の他の操作で使用されるため、"ユーザ"テーブルに空文字で登録されることは許されません。したがって空文字("")は、"愛称"パラメタの値として不適切であると考えられます。

WebAPIはパラメタ不足により処理を実行できないのでクライアント側にエラーを返すことになります。「WebAPIの実行結果のステータスは,標準的なHTTPステータスを使用する」という設計方針とその下のHTTPステータスの例に従うと、実行結果として400番(不正なパラメタによるエラー)を返すのが適切と判断できます。

∴HTTPステータスを400で返す
問4成績

平成29年秋期 午後問題一覧

問1 問2 問3 問4 問5 問6 問7 問8 問9 問10 問11 採点講評
© 2010-2021 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop