API エンドポイントを使用すると、API リクエストがサーバー(リソース)に送信され、リクエストが処理された後、サーバーは取得した情報や実行された結果をクライアントである Learn365 にレスポンスとして返します。
レスポンスとしてLearn365に返されるデータの量や順序は、Swagger 内のクエリ文字列パラメータ(システム クエリ オプション)によって制御できます。
ここでは、Learn365 API のシステム クエリ オプションの概要と、それらの使用方法について説明します。
クエリ オプション
概要
API リクエストは、コースやトレーニングプランおよびその教材の管理、ユーザーやトレーニングに関する統計の取得、ユーザーのトレーニングへの追加・削除・登録・登録解除など、さまざまな操作に使用できます。
テナントのデータ量によっては、一部のAPIリクエストがテナントに大きな負荷ををかけることがあり、結果としてレポートの生成に時間がかかり、画面の読み込みやシステム全体のパフォーマンスの低下を招く可能性があります。
これらの問題のすべては、システム クエリ オプションのパラメータを利用して、レスポンスとして返されるデータを制御することで回避できます。
システム クエリオプションとは、URL で指定されたリソースに対して返されるデータの量や順序を制御するクエリ文字列 パラメータです。すべてのシステム クエリ オプションは、先頭にドル記号($)が付きます。
システム クエリ オプションには、次のようなものがあります。
クエリ オプションパラメータで使用される値のデータ型には、次のタイプがあります。
- guid:共有パラメータに関連付けられる一意の ID(識別子)。
- string:文字、数字、記号、句読点などからなる任意の限定的な文字列。
- integer:小数を含まない数値(整数)。
- boolean:「true」または「false」のいずれかの値をとる変数。
$expand
$expand を使用して、関連しているデータを 1回のリクエストでまとめて取得できます。関連するリソースやメディアストリームは、取得されたリソース内に含まれて返されます。
どのデータを展開できるかは、「Responses」の中にある Model または Learn365 API セクション一覧の下にある Models で確認できます。
入れ子になっている(ネストされた)プロパティも展開できます。
展開したデータに対して条件を付けることも可能です。その場合は、プロパティ名の後に、括弧で囲んだクエリ オプション(複数の場合はセミコロン;で区切る)を追加します。
使用できるシステム クエリ オプションは次のとおりです。:$filter、$select、$orderby、$skip、$top、$count、$search、$expand
$expand の詳細については、こちらをご参照ください。
例 1:テナントにおけるコースを取得する際に、関連するクイズも一緒に取得します。
Courses セクション GET /odata/v2/Courses Returns the list of Courses エンドポイントで、「$expand」パラメータに Quizes を指定します。
リクエストを実行すると、レスポンスにはテナントの各コースとそのコースに含まれるすべてのクイズのデータが含まれます。
結果は、JSON ファイルフォーマットでローカルデバイスにダウンロードすることができます。
例 2:入れ子になっている(ネストされた)プロパティの展開例。
テナントにおけるコースを取得する際に、関連するクイズの取得し、さらに、それらのクイズの共有情報も一緒に取得します。
Courses セクション GET /odata/v2/Courses Returns the list of Courses エンドポイントで、「$expand」パラメータに Quizzes($expand=Sharing) を指定します。
リクエストを実行すると、レスポンスにはテナントの各コースとそのコースに含まれるすべてのクイズのデータが含まれ、クイズのデータにはそのクイズの「共有」設定に関連するデータが含まれます。
結果は、JSON ファイルフォーマットでローカルデバイスにダウンロードすることができます。
$filter
$filter を使用して、リクエスト URL で指定したリソースのコレクションから、条件に合うデータだけを絞り込んで取得できます。
レスポンスには、その条件を満たす項目のみが返されます。
また、入れ子になっている(ネストされた)プロパティを使ってフィルターすることも可能です。
$filter の詳細については、こちらをご参照ください。
$filter で使用できない(フィルター不可)API プロパティがあります。詳細は、「Learn365 API でフィルター不可・選択不可のプロパティ」をご参照ください。
例 1:入れ子になっている(ネストされた)プロパティにフィルターを適用する。
テナントにおけるコースを取得する際に、公開されたコースのみを取得します。
Courses セクション GET /odata/v2/Courses Returns the list of Courses エンドポイントで、「$filter」パラメータに IsPublished eq true を指定します。
IsPublished はフィルター対象のプロパティ、eq は等号演算子、true は条件の値を示します。
リクエストを実行すると、レスポンスにはテナント内の公開されているコースに関するデータのみが含まれます。
$expand で取得したプロパティに対して、フィルターを適用することも可能です。
例 2:テナントにおけるトレーニング プランの登録に関するデータを取得します。
Enrollments セクション GET /odata/v2/Enrollments エンドポイントで、 「$expand」パラメータに Course と User を指定します。
次に、「$filte」パラメーターに Course/CourseType eq'TrainingPlan' と指定します。
CourseType はフィルター対象のプロパティ、eq は等号演算子、'TrainingPlan' は条件の値を示します。
※ CourseType は 「$expand」で取得する Course のプロパティです。
リクエストを実行すると、レスポンスにはテナント内のトレーニング プランに関する登録データのみが含まれます。
$select
$select を使用して、レスポンスに含めるプロパティを指定して、必要な情報だけを取得することができます。
多くの場合、$select は、$expand と一緒に使われます。
- $expand:どの関連データを取得するか(データの範囲)を指定
- $select:取得したデータの中から、どの項目を含めるかを指定
この2つを組み合わせることで、必要なデータ構造を最小限の内容で取得できます。
$select の詳細については、こちらをご参照ください。
$select で使用できない(選択不可)API プロパティがあります。詳細は、「Learn365 API でフィルター不可・選択不可のプロパティ」をご参照ください。
例 1:テナント内のスキル データから、タイトル(スキル名)のみを取得します。
Skillsセクション GET /services/skills/Skills Returns all skills エンドポイントで、「$select」パラメータに title と指定します。
リクエストを実行すると、レスポンスにはテナント内のスキルのタイトルのみが含まれます。
例 2:$select と $expand を組み合わせた例。
Assessments セクション GET /odata/v2/Assessments Returns the list of Assessments エンドポイントで、「$expand」パラメータに Course、「$select」パラメータに Title を指定します。
リクエストを実行すると、レスポンスにはアセスメント(評価)のタイトルと、このアセスメント(評価)に関連するコースに関するデータが含まれます。
$orderby
$orderby を使用して、取得するデータを指定した順序で並べ替えることができます。
$orderby の詳細については、こちらをご参照ください。
また、$expand の中で $orderby を指定することで、関連エンティティの並び順も制御できます。
例 1:データを登録日で並び替えて取得する。
Enrollments セクションの GET /odata/v2/Enrollments Returns the list of current user's active Enrollments エンドポイントで、「$orderby」パラメータに RegistrationDate desc を指定します。
リクエストを実行すると、レスポンスには、テナントにおけるアクティブな登録データがすべて含まれます。データは、登録日(RegistrationDate)の降順に並んでいます。
例 2:$orderby と$expand を組み合わせた例。
Enrollments セクションの GET /odata/v2/Enrollments Returns the list of current user's active Enrollments エンドポイントで、「$expand」パラメータに Course、「$orderby」パラメータに Course/CEU desc を指定します。
リクエストを実行すると、レスポンスにはテナントにおけるアクティブな登録データがすべて含まれます。データは、コースに設定された CEU の多い順(降順)に並んでいます。
また、$orderby は $count と一緒によく使用され、並び替えした結果と全体の件数を取得できます。
例 3:$orderby と $count を組み合わせた例。
Enrollments セクションの GET /odata/v2/Enrollments Returns the list of current user's active Enrollments エンドポイントで、「$count 」パラメータに true 、「$orderby」パラメータに RegistrationDate desc を指定します。
リクエストを実行すると、レスポンスには受講者の登録とそのコースのデータが含まれます。データは、登録日(RegistrationDate)の降順で並べられ、上部に取得したデータの件数が表示されます。
$top
$top を使用して、先頭から指定した件数だけデータを取得できます。
数値(整数)を指定すると、その件数分の結果がレスポンスに含まれます。
$orderby と組み合わせて使用することで、並び順を指定したうえで上位何件かを取得できます。
$top の詳細については、こちらをご参照ください。
例 1:テナントにあるコースカタログのデータのうち、先頭から 15 のコースカタログを取得します。
CourseCatalogs セクションの GET /odata/v2/CourseCatalogs Returns the list of Course Catalogss エンドポイントで、「$top」パラメータに 15 と指定します。
このリクエストの場合、テナントの先頭から15 件のコースカタログを表示します。
リクエストを実行すると、レスポンスにはテナントにあるコースカタログのうち、先頭から 15 件のデータが含まれます。
例 2:$top と $orderby を組み合わせた例。
CourseCatalogs セクションの GET /odata/v2/CourseCatalogs Returns the list of Course Catalogss エンドポイントで、「$orderby」パラメータに Title 、「$top」パラメータに 10 と指定します。
リクエストを実行すると、テナントにあるコースカタログがタイトルに並び替えられ、レスポンスには先頭から 10 件のデータが含まれます。
$skip
$skip を使用して、先頭から 指定した件数を飛ばしたデータを取得できます。
数値(整数)を指定すると、先頭からその件数分を飛ばした結果がレスポンスに含まれます。
$top と組み合わせて使用することで、ページング(データの分割取得)ができます。
$skip の詳細については、こちらをご参照ください。
例:テナントにあるコースカタログのデータのうち、先頭から 20 件を除いたコースカタログを取得します。
CourseCatalogs セクションの GET /odata/v2/CourseCatalogs Returns the list of Course Catalogss エンドポイントで、「$skip」パラメータに 20 と指定します。
リクエストを実行すると、テナントにあるコースカタログのうち、レスポンスには先頭から 21 件目以降のデータが含まれます。
$skip は、$orderby / $top のどちらか、または両方と組み合わせて使うと便利です。
例 2:$skip、$top、$orderby を組み合せた例。
GET /odata/v2/Enrollments Returns the list of current user's active Enrollments
Enrollments セクションの GET /odata/v2/Enrollments Returns the list of current user's active Enrollments エンドポイントで、「$orderby」パラメータに Course/CEU desc、「$top」パラメータに 15 、「$skip」パラメータに 20 を指定します。
リクエストを実行すると、 登録データは関連するコースの CEU 数が高い順に並び替えられ、21 件目から上位 15 件のデータが含まれます。
$count
$count を使用して、レスポンスに含まれるたリソース(取得したデータ)の数を取得できます。
$count は、Boolean値で、true または false で設定します。
$count の詳細については、こちらをご参照ください。
リクエストを実行すると、レスポンスに取得したデータの数が「count:」として含まれます。:"@odata.count": 50
Any と all 演算子
$expand を使用して、単一の値ではなく複数のコレクション(配列)を返すプロパティを扱う場合、それらの配列に対してフィルターをかけるには、any または all 演算子を使用します。
これらの演算子はどちらも、コレクション(配列)を特定するナビゲーションパスの後に付けて使用する必要があります。
- any 演算子は、コレクション(配列)内の各要素に対して条件(Boolean型)を適用し、少なくとも 1つの条件を満たす要素があれば true を返し、そうでない場合は false を返します。そのため、コレクション(配列)が空の場合は常に false になります。また、any は引数(条件式)なしで使用することも可能です。
- all 演算子は、コレクション(配列)内のすべての要素に対して条件(Boolean型)を適用し、すべての要素が条件を満たす場合にのみ true を返し、そうでない場合は false を返します。そのため、コレクション(配列)が空の場合は常に true になります。また、all は引数(条件式)なしでは使用できません。
Any と all 演算子についての詳細は、こちらをご参照ください。
クエリ オプション 使用例
クエリ オプションの使い方を説明します。
例として、Enrollments セクションにある「テナント内で現在アクティブなユーザーの登録を取得する」リクエストを使用します。
1.https://api.365.systems/ にアクセスし、APIキー で認証します。
2. GET request /odata/v2/Enrollments with the Returns the list of current user's active Enrollments エンドポイントを選択し、右上の[Try it out]をクリックします。
3.クエリ オプション パラメータを入力します。
今回の例では、以下の条件を設定しています。
- ユーザーID、登録日、登録ステータスを含むデータを取得する。
- アクティブなコースのうち、先頭から 20 件は除外し、上位(21 件目以降)の 15件 を取得。
- コースはユーザーの登録日を基準に降順で並び替える。
各クエリ パラメータに、次のように入力します。:
- $expand:Course, User
- $filter:RegistrationStatus eq 'Active'
- $select:UserId, RegistrationDate, RegistrationStatus
- $orderby:RegistrationDate desc
- $top:15
- $skip:20
- $count:true
4.[Execute]を選択してリクエストを実行します。
5.Response ブロックで結果を確認します。
- Codeの下にある2xx(たとえば200)は、リクエストが正しく動作したことを示しています。
- Responses body フィールドには、設定されたプロパティに基づいたデータが表示されます。
Ctrl+F で、必要な情報検索することができます。