
| ご利用元の法人 | アプリケーションの公開先をプルダウンから指定します。Manandaを法人でご利用で、且つ開発者権限が付与されている場合はここに法人名もリストされます。 |
|---|---|
| アプリケーション名 | アプリケーションの名称。必須 |
| アプリケーション説明 | アプリケーションに関する簡単な説明。必須 |
| リダイレクトURI | Mananda OAuthサーバが認可レスポンスを返す際のリダイレクト先。必須 |
| ステータス | 有効、無効から選択。アプリケーションを利用可能とする場合は有効。 |
| 利用可能なxAPI Endpoint | Statement API固定 |
| キー | クライアントID(client_id)として使用します。 |
|---|---|
| シークレット | クライアントシークレット(client_secret)として使用します。 |
| statements/write | ステートメントを書き込む。 |
|---|---|
| statements/read | アプリケーション利用者に付与された権限の範囲でアクセス可能な全てのステートメントを読み出す。 |
| statements/read/mine | アプリケーション利用者が書き込んだステートメントを読み出す。 |
| リクエストメソッド | GET | |
[Endpoint]?client_id=[Client id] &redirect_uri=[Redirect URI] &response_type=code &scope=[Scopes] &state=[State] |
||
| パラメータ | タイプ | 説明 |
|---|---|---|
| client_id | String | アプリケーション登録時に発行されたクライアントID |
| redirect_uri | URI | アプリケーション登録時に指定したリダイレクトURI |
| response_type | String | 「code」のみ指定可能 |
| scope | String | アプリケーション登録時に指定したスコープ。複数の場合は「,」で区切る |
| state | String | ステートを表す任意の文字列。認可要求を送信するアプリケーション側で生成 |
| リダイレクト | ||
[Redirect URI]?code=[Authorization Code]&state=[State] |
||
| パラメータ | タイプ | 説明 |
|---|---|---|
| code | String | Manandaがユーザに対して要求されたリソースの認可と認証を行った後に発行する認可コード |
| state | String | ステートを表す任意の文字列。認可要求を送信するアプリケーション側で生成 |
| リクエストメソッド | POST | |
{
client_id : "[Client ID]",
client_secret: "[Client Secret]",
grant_type : "authorization_code",
code : "[Authorization Code]",
redirect_uri : "[Redirect URI]",
state : "[State]"
} |
||
| パラメータ | タイプ | 説明 |
|---|---|---|
| client_id | String | アプリケーション登録時に発行されたクライアントID |
| client_secret | String | アプリケーション登録時に発行されたクライアントシークレット |
| grant_type | String | 「authorization_code」のみ指定可能 |
| code | String | 認可要求で取得した認可コード |
| redirect_uri | URI | アプリケーション登録時に指定したリダイレクトURI |
| state | String | ステートを表す任意の文字列。認可要求を送信するアプリケーション側で生成 |
| レスポンス | JSON形式 | |
{
access_token : "[Access Token]",
refresh_token: "[Refresh Token]",
} |
||
| パラメータ | タイプ | 説明 |
|---|---|---|
| access_token | String | アクセストークン |
| refresh_token | String | リフレッシュトークン。アクセストークンのリフレッシュに使用 |
| リクエストメソッド | POST | |
{
client_id : "[Client ID]",
client_secret : "[Client Secret]",
grant_type : "refresh_token",
code : "[Authorization Code]",
refresh_token : "[Refresh Token]",
state : "[State]"
} |
||
| パラメータ | タイプ | 説明 |
|---|---|---|
| client_id | String | アプリケーション登録時に発行されたクライアントID |
| client_secret | String | アプリケーション登録時に発行されたクライアントシークレット |
| grant_type | String | 「authorization_code」のみ指定可能 |
| code | String | 認可要求で取得した認可コード |
| refresh_token | String | アクセストークン要求時に取得したリフレッシュトークン |
| state | String | ステートを表す任意の文字列。認可要求を送信するアプリケーション側で生成 |
| レスポンス | JSON形式 | |
{
access_token : "[Access Token]",
} |
||
| パラメータ | タイプ | 説明 |
|---|---|---|
| access_token | String | 新たに発行されたアクセストークン |
PUTリクエスト時のステートメントIDに関するMananda LRSの仕様
PUTリクエスト時のステートメントにおける制限事項
PUTリクエストの処理フロー
| リクエストメッセージヘッダの例 | PUT | |
PUT [Endpoint]?statementId=[Statement ID] HTTP/1.1
Host: xxxxxxxxx
Connection: keep-alive
Content-Length: 942
Pragma: no-cache
Cache-Control: no-cache
Authorization: Bearer [Access Token]
Origin: http://my.splustar.com
User-Agent: xxxxxxxxx
Content-Type: application/json
X-Experience-API-Version: 1.0.1
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6 |
||
| パラメータ | 値 | 説明 |
|---|---|---|
| Authorization | Bearer [Access Token] | アクセストークン |
| X-Experience-API-Version | 1.0.1 | xAPI通信のバージョン(固定) |
| コード記述例 | ||
function sendStatement(statementStr) {
$.ajaxSetup({
headers: {
"X-Experience-API-Version": "1.0.1"
}
});
$.ajax({
type: "PUT",
url: [Statement API Endpoint]?statementId=[Statement ID],
contentType: "application/json",
cache: false,
data: JSON.stringify(statementStr),
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Bearer " + [Access Token]);
},
success: function(d) {
// 成功時の処理
},
error: function(x, s, e) {
// 失敗時の処理
},
complete: function() {
// 完了処理
}
});
} |
||
GET Statementsに関するMananda LRSのサポート状況
| パラメータ | 使用可否 | 説明 |
|---|---|---|
| statementId | 可 | 取得するステートメントの ID |
| voidedStatementId | 否 | 取得する無効ステートメントの ID |
| agent | 可 | 指定されたAgentやGroupが、ステートメントのアクターやオブジェクトであるステートメントのみをフィルタして返す。 |
| verb | 可 | 特定の verb id とマッチしたステートメントのみを返す。 |
| activity | 可 | 指定された id をもつアクティビティをオブジェクトとするステートメントのみを返す。 |
| registration | 可 | 指定した registration id に一致するステートメントを返す。あるアクティビティに割り当てられるあるアクターに対して、一意の登録 ID が割り当てられることが多いが、それを前提とすべきでないことに注意が必要である。特定のアクターもしくはアクティビティのためのステートメントのみが返されるべき場合には、それらのパラメータもあわせて指定すべきである。 |
| related_activities | 可 | アクティビティ フィルタを広く適用する。Object, 任意のcontextActivities、もしくは、パラメータ本来の振舞の代わりにActivityパラメータに一致するサブステートメントに含まれるそれら任意のプロパティパラメータを持つステートメントを含む。マッチングはActivity パラメータと同様の方式で定義される。 |
| related_agents | 可 | エージェント フィルタを広く適用する。Actor, Object, authority, instructor, team。あるいはパラメータ本来の振舞の代わりにAgentパラメータにマッチするサブステートメントに含まれるこれら任意のプロパティを持つステートメントを含む。マッチングはagentパラメータと同様の方式で定義される。 |
| since | 可 | 指定された timestamp よりあと( timestamp の時刻は含まない)に記録されたステートメントのみを返す。 |
| until | 可 | 指定された timestamp と同時またはそれ以前に記録されたステートメントのみを返す。 |
| limit | 可 | 返すステートメントの最大数。0 はサーバが許容する最大値を返すことを表す。 |
| format | 否 | ids Agent, Activity、そしてグループオブジェクトを識別するために最低限必要な情報のみを含む。匿名グループにおいては各メンバを識別するために必要な最低限の情報を意味する。 exact 受信したステートメントと完全に同一なAgent, Activity、そしてグループオブジェクトを返す。 canonical 言語フィルタを適用し、オリジナルのAgentオブジェクトを「exact」モードで返したのち、 LRS により判断され、正規の定義を含んだActivityオブジェクトを返す。アクティビティ オブジェクトは名前と説明のために Language Map オブジェクトを含む。これらのマップではひとつの言語のみが返されるべきである。 LRS は、RFC 2616 (HTTP 1.1)で解説されている通り、Accept-Language ヘッダを適用する。ただし、全体としてリソース(ステートメントのリスト)に適用される場合ではなく、このロジックが各言語マップに個別に適用される場合はこの限りではない。LRS がこれらをインポートすることを目的としてステートメントを要求する場合には、「exact 」フォーマットを用いるべきである。 |
| attachments | 否 | trueの場合、LRS はマルチパートレスポンスフォーマットを用いなければならず、あらゆる添付文書を含めなければならない。それ以外の場合には LRS は添付文書の生データを含めてはならず、Content-Type application/json の形式で所定の応答を送信しなければならない。 |
| ascending | 可 | true の場合、格納された時間の昇順で結果を返す。 |
GETリクエストの処理フロー
| リクエストメッセージヘッダの例 | GET | |
GET [Endpoint]?registration=[Target value] HTTP/1.1
Host: xxxxxxx
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Authorization: Bearer [Access Token]
Origin: xxxxxxxx
User-Agent: xxxxxxxxx
Content-Type: application/json
X-Experience-API-Version: 1.0.1
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6 |
||
| パラメータ | 値 | 説明 |
|---|---|---|
| Authorization | Bearer [Access Token] | アクセストークン |
| X-Experience-API-Version | 1.0.1 | xAPI通信のバージョン(固定) |
| コード記述例 - リクエストの送信 | ||
function getStatement(endpoint, queryStr) {
$.ajaxSetup({
headers: {
"X-Experience-API-Version": "1.0.1"
}
});
$.ajax({
type: "GET",
url: endpoint + "?" + queryStr,
contentType: "application/json",
cache: false,
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Bearer " + [Access Token]);
},
success: function(d) {
// 成功時の処理
},
error: function(x, s, e) {
// 失敗時の処理
},
complete: function() {
// 完了処理
}
});
} |
||
| コード記述例 - クエリパラメータの生成 | ||
// クエリパラメータ activity の生成
var activityId = "https://www.digital-knowledge.co.jp/xapi/activities/course/001";
var paramActivity = "activity=" + encodeURI(activityId);
// クエリパラメータ agent の生成
var mbox = {"mbox": "mailto:demouser@demo.jp"},
encMbox = encodeURI(JSON.stringify(mbox));
var paramAgent = "agent=" + encMbox; |
||
| 通信設定 |
|---|
var tincan = new TinCan();
var lrs = new TinCan.LRS({
endpoint: [Statement API Endpoint],
version: "1.0.1",
auth: 'Bearer ' + [Access Token],
allowFail: false
});
tincan.addRecordStore(lrs); |
| ステートメントの組み立て |
// Actor
var actor = new TinCan.Agent({
name: "demouser",
mbox: "mailto:demouser@demo.jp"
});
// Verb
var verb = new TinCan.Verb();
verb.id = "http://adlnet.gov/expapi/verbs/experienced";
verb.display = {
"ja-JP": "経験した",
"en-US": "experienced"
}
// Activity ※ Object として処理される
var activityDefinition = new TinCan.ActivityDefinition();
activityDefinition.type = "http://activitystrea.ms/schema/1.0/application";
activityDefinition.name = {
"ja-JP": "xAPIサンプルアクティビティ",
"en-US": "xAPI Sample Activity"
};
var activity = new TinCan.Activity();
activity.id = "https://www.digital-knowledge.co.jp/xapi/activities/sample";
activity.definition = activityDefinition;
// Result & Score
var result = new TinCan.Result(),
score = new TinCan.Score();
result.duration = TinCan.Utils.convertMillisecondsToISO8601Duration("3000000");
result.response = "よく頑張りました";
score.max = 100;
score.min = 0;
score.raw = 78.9;
result.score = score;
// Statement
var statement = new TinCan.Statement({
actor: actor,
verb: verb,
target: activity,
result
}); |
| LRSへのステートメント送信 |
tincan.sendStatement(statement); |
C:$ curl -H "Authorization:Bearer [Access Token]"
-i https://api.mananda.jp/lrs_1/xAPI/statements?registration=[Registration ID]
HTTP/1.1 200 OK
Access-Control-Allow-Methods: POST, PUT, GET, DELETE, OPTIONS
:
Content-Length: 1016
Connection: keep-alive
{"statements":[{"verb":{"display":{"en-US":"borrowed",
:
,"timestamp":"2015-11-26T07:51:16.804Z"}]}