[Moodle]MoodleのREST APIを叩いてMoodleのアカウントを作成する

2023/07/01

Moodle
API

こんにちは。

最近、Moodleのサーバーを立ててみたりしているのですが、調べているとMoodleにはREST APIがあることを知りました。

これはちょっと面白いことができるんじゃないかと、試してみたのですがなかなか詰まったので次回以降スムーズにできるようにコチラにメモしておきます。

Moodleとは

Moodleとは、オープンソースの学習管理システム(LMS)です。

オープンソースのLMSとしては最も有名なもので、世界中で使われているようです。

日本でも、大学の基幹システムとして使われていることが多いような気がします。

ベースとしてはPHPで動いているようですが、Webエンジニアとしてはあまり触りたくない(カオスな)システムとしても有名です。

Moodle内の設定方法

REST APIを触るためには、Moodle内で設定を行う必要があります。

Moodleの管理者権限でログインし、Site administration > Server > Web services > Overview に移動します。

Moodleの管理画面

Step 1: Enable web services をクリックし、Webサービスを有効にします。

Step 2: Enable protocols をクリックし、RESTを有効にします。

Step 5: Select a service をクリックし、Addをクリックします。

Moodleの管理画面

Nameは自分がわかるようにすればOKです。

Enableにチェックを入れるのを忘れないようにしましょう。

Authorized users onlyにもチェックを入れておくことをお勧めします。

その後、もう一度Step 5: Select a service をクリックし、先ほど作成したサービスのAuthorize usersをクリックします。

そこで自分のアカウントを選択し、Addをクリックします。

次に、Step 6: Add functions をクリックし、先ほど作成したサービスのFunctionsをクリックします。

遷移後の画面で、Add functionsをクリックします。

Nameでの検索画面が表示されるので、そこにcore_user_create_usersと入力し、出て来た項目を選択後、Add functionsをクリックします。

Moodleの管理画面

次に、Step 8: Create a token for a userをクリックし、Userとして自分のアカウント、サービスとして先ほど作成したサービス名を選択し、Save Changesをクリックします。

Moodleの管理画面

すると、Tokenが表示されるので、これをメモしておきます。

ここまでで設定は完了です。

MoodleのREST APIを叩く

MoodleのREST APIのドキュメントは、以下のURLがよくまとまっています。

REST APIといいながら、かなりクセのあるAPIです。

まず、APIのURLは以下のようになります。

http://{あなたのmoodleのドメイン}/webservice/rest/server.php?wstoken={先ほど取得したToken}&wsfunction={実行したい関数名}&moodlewsrestformat=json

そして、リクエストはすべてGETで行います。

追加のパラメータは、&{パラメータ名}={値}の形式で指定します。

今回の例では、以下のようになります。

http://{あなたのmoodleのドメイン}/webservice/rest/server.php?wstoken={先ほど取得したToken}&wsfunction=core_user_create_users&moodlewsrestformat=json&users[0][username]=testuser&users[0][firstname]=Hoge&users[0][lastname]=Fuga&users[0][email]=example@example.com&users[0][password]=Pass-w0rd

これをcurlで叩いて、Moodleのアカウントを作成してみます。

curl -g 'http://{あなたのmoodleのドメイン}/webservice/rest/server.php?wstoken={先ほど取得したToken}&wsfunction=core_user_create_users&moodlewsrestformat=json&users[0][username]=testuser&users[0][firstname]=Hoge&users[0][lastname]=Fuga&users[0][email]=example@example.com&users[0][password]=Pass-w0rd'

以下のようなレスポンスが返ってくれば成功です。

[{"id":1,"username":"testuser"}]

今回はこのあたりで。