問題タブ [canvas-lms]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
743 参照

c# - C# を使用して LTI 1.1 苦情 URL を起動する方法

LTI ツール プロバイダーであり、LTI 1.1 に準拠しているサード パーティの Web サイトを立ち上げたいと考えています。この LTI ツール プロバイダーは、URL、コンシューマ キー、および共有シークレットを提供してくれました。このサイトをウィンドウ ポップアップとして起動するサンプルの C# コードを教えてください。

0 投票する
1 に答える
617 参照

node.js - プロキシ サービスまたは curl による CORS 問題の解決

POSTまったくサービスを提供していないこのクライアントからサービスを利用しているときに、大きな障害にぶつかっていAccess-Control-Allow-Originます。

私は次の解決策を試しましたか、それともまったく不可能だと言っていますか?

  1. JSONP を調べましたが、GET のみに限定されています。
  2. クライアントドメインにリクエストを送信できるサービスをドメインに作成しました。で終わった{ [Error: socket hang up] code: 'ECONNRESET' }
  3. テストしていませんが、node-curl を使用して達成できますか。https://www.npmjs.com/package/node-curl

お知らせ下さい。

0 投票する
3 に答える
2783 参照

powershell - Invoke-WebRequest Canvas LMS API ページネーション

このトピックに関する例が見つからないようです。その方法を知りたいです。Invoke web-request を使用して powershell でページネーションを行う方法について、誰かに例を示したり、リンクを教えてもらえますか? 私が直面している課題は、一度に 100 行しか返さないサーバーに対して API 呼び出しを行っていることです。さらに行を取得するには、サーバーに対して 2 回目の呼び出しを行う必要があります。どうすればいいのかわかりません。それが役立つ場合は、Canvas LMS によって提供されるリンクと、これまでに持っている私のコードを次に示します。

ページネーション:

ページネーション

複数のアイテムを返すリクエストは、デフォルトで 10 アイテムにページ分割されます。?per_page パラメータを使用して、カスタムのページあたりの量を設定できます。per_page に設定できるサイズには不特定の制限があるため、常に Link ヘッダーを確認してください。

追加のページを取得するには、返された Link ヘッダーを使用する必要があります。これらのリンクは不透明として扱う必要があります。それらは、目的の現在、次、前、最初、または最後のページを取得するために必要なすべてのパラメーターを含む絶対 URL になります。1 つの例外は、認証のために access_token パラメータが送信された場合、返されるリンクに含まれないため、再度追加する必要があることです。

ページネーション情報は、Link ヘッダーで提供されます。

可能な rel 値は次のとおりです。

current - 結果の現在のページへのリンク。next - 結果の次のページへのリンク。prev - 結果の前のページへのリンク。first - 結果の最初のページへのリンク。last - 結果の最後のページへのリンク。これらは、関連する場合にのみ含まれます。たとえば、結果の最初のページには rel="prev" リンクは含まれません。rel="last" は、合計カウントが各リクエストで計算するにはコストが高すぎる場合にも除外されることがあります。

はじまりの商品

最終製品

0 投票する
2 に答える
427 参照

java - 多くのオプション パラメータを含む API ライブラリのベスト プラクティス

Canvas LMS REST API をラップする Java API ライブラリを作成しようとしています。API が扱うオブジェクトの種類ごとに、リーダーとライターのインターフェイスがあります。たとえば、「コース内のユーザーをリストする」エンドポイントと「コンソーシアム内のユーザーを検索するUserReader」エンドポイントからユーザー オブジェクトを返すインターフェイスがあります。

私たちが苦労している問題は、すべてのオプション パラメータを API 呼び出しに実装する最善の方法です。リンクされた 2 つのエンドポイントの仕様を見ると、どちらも User オブジェクトを返しますが、パラメータが大きく異なることがわかります。最初の実装では、listUsersInCourse メソッドに一連のリスト (空にすることもできます) とオプションの引数 (空にすることもできます) を追加しただけです。したがって、オプションのパラメーターを指定しない場合のこのメソッドの呼び出しは、次のようになります。はい、オプションを指定しないためのメソッドの引数なしの便利なバージョンを使用できますが、オプションのいずれかを使用したい場合は、とにかくそれらすべてを処理する必要があります。

1) 一部のエンドポイントには多くのオプションがあり、ばかげたメソッド シグネチャが作成されます。2) Canvas がオプションを追加または変更すると (これは既に発生しています)、メソッド シグネチャが壊れて、ライブラリに依存しているすべての人にコードを更新します。

オプションの名前付きパラメーターは便利ですが、Java はこれを行いません。私は他のいくつかの API ライブラリを調べましたが、REST API で使用するためにこれほど多くのパラメーターを使用することはやや珍しいようです。これに対処するためのいくつかの方法を考えましたが、最善の選択肢が何であるかはわかりません。これが私がこれまでに思いついたものです:

1

これを行うための比較的構造化された方法は、特定のオプションを追加するメソッドを使用してビルダー パターンに従うことです。たとえば、次のようになります。

このように、新しいオプションが追加された場合、追加するのは単なる新しい方法であり、既存のコードを壊しません。欠点は、特定のリーダー クラスのすべてのオプション メソッドがその中のすべての API メソッドに適用されるとは限らず、混乱を招く可能性があることです。たとえば、上にリンクされているユーザー リストの方法はどちらも検索語を使用しますが、コンソーシアムの方法は登録の種類を受け入れません。そのため、特定の呼び出しに対してどのオプションが有効かを確認するには、Canvas API のドキュメントを常に再確認する必要があります。また、オプションが追加された場合、人々がアクセスできるようになる前に、ライブラリの新しいバージョンをリリースする必要があります。Canvas API は活発に開発されているため、状況は確実に変更される可能性があります。

2

潜在的にさらに構造化された方法は、呼び出し固有のオプション クラスを作成して、物事をさらに制約することです。これは次のようになります。

ConsortiumUserSearchOptionsメソッドを持たない別のクラスがありaddEnrollmentTypeます。これはおそらく最も型安全で明確に定義された方法ですが、これを作成して維持するのは悪夢のようです。

3

別のアプローチは、より一般的なaddOption(String key, String value)方法を使用することです。上記の呼び出しは次のようになります。

これにより、コーディングと保守の手間が大幅に軽減されますが、ライブラリのユーザーは、キャンバス API で定義されたマジック ストリングを渡して、もう少し詳しく知る必要があります。上記の #1 で述べたように、構造化されていないことの最大の利点は、Canvas API に新しいオプションが追加されたときに、新しいメソッドが含まれるライブラリの新しいリリースを待たずに、ユーザーがすぐにそれを利用できることです。 .

4

もう 1 つのオプションは、すべての API メソッドで完全に一般的なオプションのリストを受け入れるだけで、ライブラリのユーザーがリクエストの作成により関与するように強制することもできます。これは次のようになります。

これらは私が思いついたオプションです。この API ライブラリを使用しているとしたら、どれが最も便利だと思いますか? どちらを作成/維持しますか? 私はそれを行うためのより良い方法を完全に見逃していますか?

0 投票する
0 に答える
276 参照

integration - Google ハングアウトを Canvas LMS と統合する方法はありますか?

具体的には、Conference、Pages、Discussions などの Instructure Canvas のグループ ページの 1 つから、(カスタム Javascript コードを使用して) Google ハングアウトで認証および接続できるようにしたいと考えています。これにより、新しい Google ハングアウト ビデオ ウィンドウが表示されます。

  1. 想定されるワークフローは次のとおりです: 1.1. 生徒は Canvas ID を使用して Canvas LMS にログインします。

        1.2. 生徒は既存のグループの 1 つに参加します。

        1.3。学生は、「会議」、「ページ」、「ディスカッション」などのモジュールに移動します。

        1.4。生徒には、「ハングアウトに参加」という Javascript 駆動のボタンが表示されます。

        1.5。これにより、Google OAuth2 認証ワークフローが開始されます。

        1.6。生徒は個人の Google ID を使用して Google で認証します。

        1.7。認証が成功すると、生徒はカスタム Google ハングアウト ビデオ会議が実行されているカスタム URL に移動します。    

  2. Canvas LMS との OAuth2 認証/統合をセットアップする必要がありますか? それとも、すでに Canvas の一部として含まれていますか? Google ドライブとの統合をサポートするために、そのような設定が既に行われている可能性があることを理解しています。グループの「Collaborations」モジュールに、すでに「Google Docs」の統合が表示されています。その場合、Google ハングアウトと統合するために Google OAuth2 接続を再実装する必要がありますか、それとも既存のものを再利用できますか?    
  3. 私はカスタム Google ハングアウト アプリに取り組んでおり、https ://github.com/getsmarter/moodle-rhythm_hangout/blob/master で入手できる特定の Javascript コードを使用して、ボタンを介して Moodle をカスタム Google ハングアウトに統合しました。 /module.js . Googleハングアウトを起動/参加するには、キャンバスで同様のコードを使用する必要があります。このような機能 (実質的に「ハングアウトに参加」) ボタンをキャンバス グループの会議/ページ/ディスカッション モジュールに組み込むことは可能でしょうか?  
  4. 私のユーザー (学生) は、自分の個人的な Google ID を使用して、カスタムの Google ハングアウト アプリにログインし、認証し、使用していました。同じことが Google ドキュメントのコラボレーション モジュールにも当てはまると思います。ユーザーは個人の Google ID を使用できます。ユーザーの Google ID と Canvas ログイン ID の間のマッピング/接続を Canvas が保存する場所はありますか?    
  5. 私のカスタム Google ハングアウト アプリには、Google ID、キャンバス ID、学生のコース (ID)、学生のグループ (ID) の間の「マッピング」または接続が必要です。これは Canvas には存在せず、カスタム開発が必要になると思いますか? または、この情報を Canvas 内などから Google スプレッドシートに保存する方法はありますか?

  6. これを行う唯一の方法はLTIですか?それとも別の方法がありますか?

0 投票する
1 に答える
257 参照

api - Tincan API を使用して異なる LMS からデータを取得する

Tincan API (LRS) を使用して複数の LMS (Moodle、Blackboard など) からデータを取得するにはどうすればよいですか?

具体的には、少なくともこれらの情報を取得したい

学生情報、教師情報、セッション情報、クラス情報、コース情報

また、リクエストを行うための実装プロセスと API エンドポイントを知る必要があります。