Moodle4.4においてREST APIを有効にする方法を調べました(2024年9月26日時点)。
Site administration / Web services / Overview
/admin/settings.php?section=webservicesoverview
というパスを確認します。これがだいたいの作業全体像なのですが,項目に不足があったり,結局まだ間違っていると思われる箇所があります。
1. Enable web services
まずはWeb serviceを有効にします。Overviewから1. Enable web servicesリンクをクリックします。
Enable web servicesにチェックをしてSave changes。
先ほどのOverviewの,1. Enable web servicesがYesになればOKです。
2. Enable protocols
Overviewの2. Enable protocolsリンクをクリックします。
Manage protocols画面にて,Activate web service protocolsのREST protocolをEnable(目のアイコンのスラッシュを消す)。
Web services documentationのチェックをOnにします。これでWeb serviceの文書をMoodle上で確認できます。
Save changesで変更を保存します。
Overviewの2. Enable protolsがrestになればOKです。
3. Create a specific user
REST APIを使用する専用ユーザを作成します。
Overviewの3. Create a specific userリンクをクリックします。
Usernameは適当で良いです。
Choose an authentication methodをWeb services authenticationにします。
この設定により,本ユーザは,後ほど作成するtokenで認証することになります。
注意すべき設定項目として,TimezoneとPreferred languageがあります。
この設定にしたがってREST APIのレスポンスが返ってきます。日本語にするとUnicodeがエンコードされて返ってくるので,Englishの方が扱いやすいと思います。
必要な項目を埋めたら,Create userでユーザーを作成します。
4. Check user capability
ここでいったん,UserのCapabilityを確認しておきます。
Overviewの4. Check user capabilityリンクをクリックします。
Capabilitiesの表示画面でFilterにrestと入力して確認すると,
Web service: REST protocolがNoになっています。これをYesにするのが次の作業です。
Modify Role
Capabilityは直接ユーザに設定するのではなく,roleとして設定されます。なので,roleを設定した上で,ユーザにroleを割り当てます。
まずはPermissions / Define rolesに移動します。
ここでManagerのRoleを選択します。
(今回は実験のため,ManagerロールにREST APIの利用権限を与えていますが,セキュリティ面を考慮した場合は別途ロールを作成した方がよいでしょう。)
Viewing the definition of role 'Manager'の下に,灰色のEditボタンがあるので,これを押します。
編集画面でFilterにrestを設定すると,Web service: REST protocolを見つけられます。Allowにチェックをします。
Save changesを押して保存します。
再度Managerのroleを確認した画面です。
Use REST protocolがAllowになっていればOKです。
Assign System role to REST USER
restuserユーザに,Managerを割り当てます。
Permissions / Assign system rolesの画面を表示します。
この時点ではManager roleにUserは割り当てられていません。
RoleからManager(リンク)を選択します。
Assign role 'Manager' in Systemの画面で,右側のPotential usersからREST USERを選択します。
中央の◀Addを押して追加します。
追加されたら,Assign...の上にある灰色のBackボタンで戻ります。
Users with roleにREST USERが追加されていればOKです。
Create token
REST USERのTokenを作成します。
NameはTokenの名前です。
userにREST USERを指定します(Search▼から選択します)。
ServiceはMoodle mobile web serviceです。
Valid untilは適切に設定しましょう。
Save changesで保存します。
Save changesを押すと,Manage tokensの画面に遷移します。
ここで,Copy to clipboardを押して,tokenを保存しておきます。
このページから遷移すると再び確認はできません。
Tokenを忘れた場合は再作成することになります。
Enable mobile web service
上で指定したmobile web serviceは,標準ではOffになっています。このままではREST APIを使用できませんので,Onにします。
Administration / Advanced featuresに,Enable web services for mobile devicesがあります。
チェックをOnにします。
Site administrationの検索ボックスでmobileなどとして検索した場合は,Save changesが画面の最後尾にあります。保存し忘れに注意しましょう。
Test the service
これでやっとテストすることができます。しかし,Moodle4.4のOverviewに表示されているAPIはうまく動作しないようです。
ここではcURLを使った操作例を示します。
curl -i -X GET \
"https://MOODLE_SITE/webservice/rest/server.php?wstoken=RESTUSER_TOKEN&moodlewsrestformat=json&wsfunction=core_course_get_courses"
MOODLE_SITEとRESTUSER_TOKENは適切に置き換えてください(あとhttp,httpsの違いもご自身の環境に合わせてください)。
次はPOSTの例です。
curl -i -X POST \
-d "wstoken=RESTUSER_TOKEN" \
-d "moodlewsrestformat=json" \
-d "wsfunction=core_webservice_get_site_info" \
"https://MOODLE_SITE/webservice/rest/server.php"
もし,パラメータを伴うAPIを使う場合は,Specにしたがってパラメータを指定します。
例えば,以下はコースID=2のコース情報を取得します。
curl -i -X POST \
-d "wstoken=RESTUSER_TOKEN" \
-d "moodlewsrestformat=json" \
-d "wsfunction=core_course_get_courses" \
-d 'options[ids][0]=2' \
"https://MOODLE_SITE/webservice/rest/server.php"
まとめ
Moodle4.4でREST APIを使用する設定を行いました。MoodleをCLIからも利用できれば,運用効率が大幅に向上します。もしこの記事の通りにやってもうまくいかない場合は,ご連絡いただけるとありがたいです。