InterfaceSpecification » 履歴 » バージョン 20

MIYAZAKI Masafumi, 2015/05/24 09:19

1 1 MIYAZAKI Masafumi
h1. インタフェース仕様
2 1 MIYAZAKI Masafumi
3 9 MIYAZAKI Masafumi
----
4 9 MIYAZAKI Masafumi
5 8 MIYAZAKI Masafumi
{{>toc}}
6 8 MIYAZAKI Masafumi
7 14 MIYAZAKI Masafumi
h2. Questionクラス
8 1 MIYAZAKI Masafumi
9 18 Miyazaki Masafumi
一つ一つの "問題" に相当するクラス。問題データの入れ物。
10 19 MIYAZAKI Masafumi
アプリケーションによる問題取得の際に、QuestionDBクラスによって生成される。
11 18 Miyazaki Masafumi
アプリケーションによる新規問題作成の際は、別クラスにより生成する予定。(T.B.D.)
12 15 MIYAZAKI Masafumi
13 14 MIYAZAKI Masafumi
h3. プロパティ
14 2 MIYAZAKI Masafumi
15 1 MIYAZAKI Masafumi
| 名前 | 型 | 説明 |
16 1 MIYAZAKI Masafumi
| id | int | 問題の識別子 |
17 1 MIYAZAKI Masafumi
| question | stirng | 問題文 |
18 7 MIYAZAKI Masafumi
| correctAnswers | array<string> | 正解となる選択肢群。配列形式。 |
19 7 MIYAZAKI Masafumi
| incorrectAnswers | array<string> | 不正解となる選択肢群。配列形式。 |
20 1 MIYAZAKI Masafumi
21 14 MIYAZAKI Masafumi
h3. メソッド
22 1 MIYAZAKI Masafumi
23 7 MIYAZAKI Masafumi
| 名前 | 応答値 | 引数 | 説明 |
24 17 Miyazaki Masafumi
| get*** | 各プロパティ | なし | 各プロパティのアクセサ(getter)。***はプロパティ名を表す。 |
25 17 Miyazaki Masafumi
| set*** | なし | 各プロパティ | 各プロパティのアクセサ(setter)。***はプロパティ名を表す。 |
26 10 MIYAZAKI Masafumi
| isCorrect | bool | string | 指定した文字列が正解群(correctAnswers)に含まれるか否かの真偽値を応答する。 |
27 1 MIYAZAKI Masafumi
| getCorrectAnswersInJSON | string | なし | 正解群をJSON配列形式で応答する。ex) ["answer1", "answer2", "answer3"] |
28 1 MIYAZAKI Masafumi
| getIncorrectAnswersInJSON | string | なし | 不正解群をJSON配列形式で応答する。ex) ["answer1", "answer2", "answer3"] |
29 1 MIYAZAKI Masafumi
30 14 MIYAZAKI Masafumi
----
31 16 MIYAZAKI Masafumi
32 19 MIYAZAKI Masafumi
h2. QuestionDBクラス
33 15 MIYAZAKI Masafumi
34 18 Miyazaki Masafumi
アプリケーションがデータベースにアクセスする際に使用するアクセサクラス。
35 14 MIYAZAKI Masafumi
36 14 MIYAZAKI Masafumi
h3. メソッド
37 2 MIYAZAKI Masafumi
38 4 MIYAZAKI Masafumi
| 関数名 | 応答値 | 引数 | 説明 |
39 6 MIYAZAKI Masafumi
| getNumberOfQuestions | int 総問題数 | なし | 現在の総問題数を応答する。 |
40 3 MIYAZAKI Masafumi
| getQuestion | Question | なし | 問題を1つランダムに取り出し、応答する。 |
41 3 MIYAZAKI Masafumi
| getQuestionById | Question | int 問題の識別子 | 指定した識別子の問題を取り出し、応答する。 |
42 11 MIYAZAKI Masafumi
| getQuestions | array<Question> | int 問題数 | 指定した個数の問題をランダムに取り出し、配列形式で応答する。(※1参照) |
43 11 MIYAZAKI Masafumi
| setQuestion | int 登録/更新時の問題の識別子(=id) | Question 問題 | 指定した問題を登録する。(※2参照) |
44 1 MIYAZAKI Masafumi
45 1 MIYAZAKI Masafumi
※1.
46 11 MIYAZAKI Masafumi
 問題は重複しないものとする。
47 11 MIYAZAKI Masafumi
 ただし、引数に指定された問題数が総問題数を上回る場合は問題の重複を許し、指定数分の問題を応答する。
48 11 MIYAZAKI Masafumi
※2.
49 1 MIYAZAKI Masafumi
 idが既存の場合は、当該idの問題に対して問題文/正解群/不正解群を上書きし、当該idを応答する。
50 1 MIYAZAKI Masafumi
 idが既存でない場合は、当該idを無視して新規登録を行ない、新規登録時のidを応答する。
51 19 MIYAZAKI Masafumi
52 19 MIYAZAKI Masafumi
----
53 19 MIYAZAKI Masafumi
54 19 MIYAZAKI Masafumi
h2. Questionerクラス
55 19 MIYAZAKI Masafumi
56 20 MIYAZAKI Masafumi
クライアントアプリケーションからのリクエストに対応するレスポンスを行なうクラス。
57 19 MIYAZAKI Masafumi
58 19 MIYAZAKI Masafumi
h3. 外部I/F(HTTPリクエスト)
59 19 MIYAZAKI Masafumi
60 19 MIYAZAKI Masafumi
クライアント側とサーバ側との間で、下記の属性群のやりとりを行なう。
61 19 MIYAZAKI Masafumi
なお、HTTPのメソッドは GET / POST のどちらかを利用するものとし、どちらを利用するかはサーバ側のソースコード上で簡単に切り替えられるものとする。
62 19 MIYAZAKI Masafumi
63 19 MIYAZAKI Masafumi
| 属性名 | 属性値 | 説明 |
64 19 MIYAZAKI Masafumi
| request | QuestionDBクラスのメソッド名 | リクエストの要旨を指定する。 |
65 19 MIYAZAKI Masafumi
| arguments | 引数群 | 属性requestで指定するメソッドの引数を、JSON配列形式で指定する。 |
66 19 MIYAZAKI Masafumi
67 19 MIYAZAKI Masafumi
h3. request毎の入出力形式
68 19 MIYAZAKI Masafumi
69 19 MIYAZAKI Masafumi
| request名 | 引数の形式 | 引数の例 | 応答の形式 | 応答の例 |
70 19 MIYAZAKI Masafumi
| getNumberOfQuestions | なし | なし | {"getNumberOfQuestions" : "総問題数"} | {"getNumberOfQuestions" : "124"} |
71 19 MIYAZAKI Masafumi
| getQuestion | なし | なし | {"getQuestion" : 問題} | {"getQuestion" : ["7", "これは質問文です(ID=7)", ["正答1"], ["誤答1", "誤答2", "誤答3"]]} |
72 19 MIYAZAKI Masafumi
| getQuestionById | ["問題の識別子"] | ["5"] | {"getQuestionById" : 問題} | {"getQuestionById" : ["5", "これは質問文です(ID=5)", ["正答1"], ["誤答1", "誤答2", "誤答3"]]} |
73 19 MIYAZAKI Masafumi
| getQuestions | ["問題数"] | ["2"] | {"getQuestions" : 問題群} | {"getQuestions" : [["8", "これは質問文です(ID=8)", ["正答1"], ["誤答1", "誤答2", "誤答3"]], ["5", "これは質問文です(ID=5)", ["正答1"], ["誤答1", "誤答2", "誤答3"]]]} |
74 19 MIYAZAKI Masafumi
| setQuestion | [問題] | [["", "ここは質問文です", ["正答1"], ["誤答1", "誤答2", "誤答3"]]] | なし | なし |
75 19 MIYAZAKI Masafumi
76 19 MIYAZAKI Masafumi
h3. 使用例
77 19 MIYAZAKI Masafumi
78 19 MIYAZAKI Masafumi
以下のようにHTTPリクエスト(例はGETメソッド)を送信する。これは、ランダムに3問を出力するリクエストに相当する。
79 19 MIYAZAKI Masafumi
(※アンパサンド「&」の直前にエスケープ「\」を挿入している点に注意されたい。)
80 19 MIYAZAKI Masafumi
81 19 MIYAZAKI Masafumi
<pre>
82 19 MIYAZAKI Masafumi
$ curl -g 'http://www.fukurous.org/path/to/Questioner.php?request=getQuestions\&arguments=["3"]'
83 19 MIYAZAKI Masafumi
</pre>
84 19 MIYAZAKI Masafumi
85 19 MIYAZAKI Masafumi
すると、リクエストに対応して、以下のレスポンスが得られる。(整形は説明都合であり、実際のレスポンスでは整形不要。)
86 19 MIYAZAKI Masafumi
87 19 MIYAZAKI Masafumi
<pre>
88 19 MIYAZAKI Masafumi
{
89 19 MIYAZAKI Masafumi
    "getQuestions" :
90 19 MIYAZAKI Masafumi
    [
91 19 MIYAZAKI Masafumi
        ["4", "これは質問文です(ID=4)", ["正答1", "正答2"], ["誤答1", "誤答2", "誤答3"]],
92 19 MIYAZAKI Masafumi
        ["3", "これは質問文です(ID=3)", ["正答1"], ["誤答1", "誤答2", "誤答3", "誤答4", "誤答5"]],
93 19 MIYAZAKI Masafumi
        ["7", "これは質問文です(ID=7)", ["正答1"], ["誤答1", "誤答2", "誤答3"]]
94 19 MIYAZAKI Masafumi
    ]
95 19 MIYAZAKI Masafumi
}
96 19 MIYAZAKI Masafumi
</pre>
97 19 MIYAZAKI Masafumi
98 19 MIYAZAKI Masafumi
次のリクエストは、問題を新規登録(=ID指定なしで登録)するリクエストに相当する。
99 19 MIYAZAKI Masafumi
100 19 MIYAZAKI Masafumi
<pre>
101 19 MIYAZAKI Masafumi
$ curl -g 'http://www.fukurous.org/path/to/Questioner.php?request=setQuestion\&arguments=[["", "ここは質問文です", ["正答1"], ["誤答1", "誤答2", "誤答3"]]]'
102 19 MIYAZAKI Masafumi
</pre>
103 19 MIYAZAKI Masafumi
104 19 MIYAZAKI Masafumi
上述の通り、リクエスト "setQuestion" は特にレスポンスを必要としない。