0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Moodle REST API

Last updated at Posted at 2024-09-26

Moodle4.4においてREST APIを有効にする方法を調べました(2024年9月26日時点)。

Site administration / Web services / Overview

/admin/settings.php?section=webservicesoverview
というパスを確認します。これがだいたいの作業全体像なのですが,項目に不足があったり,結局まだ間違っていると思われる箇所があります。

image.png

1. Enable web services

まずはWeb serviceを有効にします。Overviewから1. Enable web servicesリンクをクリックします。
image.png

Enable web servicesにチェックをしてSave changes。
image.png

先ほどの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で変更を保存します。
image.png

Overviewの2. Enable protolsがrestになればOKです。
image.png

3. Create a specific user

REST APIを使用する専用ユーザを作成します。
Overviewの3. Create a specific userリンクをクリックします。

Usernameは適当で良いです。
Choose an authentication methodをWeb services authenticationにします。
この設定により,本ユーザは,後ほど作成するtokenで認証することになります。

image.png

注意すべき設定項目として,TimezoneとPreferred languageがあります。
この設定にしたがってREST APIのレスポンスが返ってきます。日本語にするとUnicodeがエンコードされて返ってくるので,Englishの方が扱いやすいと思います。
image.png

必要な項目を埋めたら,Create userでユーザーを作成します。
image.png

4. Check user capability

ここでいったん,UserのCapabilityを確認しておきます。
Overviewの4. Check user capabilityリンクをクリックします。

image.png

Capabilitiesの表示画面でFilterにrestと入力して確認すると,
Web service: REST protocolがNoになっています。これをYesにするのが次の作業です。
image.png

Modify Role

Capabilityは直接ユーザに設定するのではなく,roleとして設定されます。なので,roleを設定した上で,ユーザにroleを割り当てます。

まずはPermissions / Define rolesに移動します。
image.png
ここでManagerのRoleを選択します。
(今回は実験のため,ManagerロールにREST APIの利用権限を与えていますが,セキュリティ面を考慮した場合は別途ロールを作成した方がよいでしょう。)

Viewing the definition of role 'Manager'の下に,灰色のEditボタンがあるので,これを押します。
image.png
編集画面でFilterにrestを設定すると,Web service: REST protocolを見つけられます。Allowにチェックをします。
Save changesを押して保存します。
image.png

再度Managerのroleを確認した画面です。
Use REST protocolがAllowになっていればOKです。
image.png

Assign System role to REST USER

restuserユーザに,Managerを割り当てます。
Permissions / Assign system rolesの画面を表示します。
この時点ではManager roleにUserは割り当てられていません。
RoleからManager(リンク)を選択します。
image.png

Assign role 'Manager' in Systemの画面で,右側のPotential usersからREST USERを選択します。
中央の◀Addを押して追加します。
image.png

追加されたら,Assign...の上にある灰色のBackボタンで戻ります。
image.png
Users with roleにREST USERが追加されていればOKです。
image.png

Create token

REST USERのTokenを作成します。
NameはTokenの名前です。
userにREST USERを指定します(Search▼から選択します)。
ServiceはMoodle mobile web serviceです。
Valid untilは適切に設定しましょう。
Save changesで保存します。
image.png

Save changesを押すと,Manage tokensの画面に遷移します。
ここで,Copy to clipboardを押して,tokenを保存しておきます。
このページから遷移すると再び確認はできません。
Tokenを忘れた場合は再作成することになります。
image.png

Enable mobile web service

上で指定したmobile web serviceは,標準ではOffになっています。このままではREST APIを使用できませんので,Onにします。
Administration / Advanced featuresに,Enable web services for mobile devicesがあります。
チェックをOnにします。
image.png
Site administrationの検索ボックスでmobileなどとして検索した場合は,Save changesが画面の最後尾にあります。保存し忘れに注意しましょう。
image.png

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の違いもご自身の環境に合わせてください)。

image.png

次は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"

image.png

もし,パラメータを伴うAPIを使う場合は,Specにしたがってパラメータを指定します。

image.png

例えば,以下はコース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"

image.png

まとめ

Moodle4.4でREST APIを使用する設定を行いました。MoodleをCLIからも利用できれば,運用効率が大幅に向上します。もしこの記事の通りにやってもうまくいかない場合は,ご連絡いただけるとありがたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?