====== Developing & Testing Web Services in Moodle ======
A Web Service is conceptually easy, but surprisingly hard to develop and especially test. Here's a [[https://docs.moodle.org/dev/Adding_a_web_service_to_a_plugin|quick primer]] for the development side of things. Moodle also offers a very incomplete 'Web service test client' as well as an embedded version of the 'AMF test client'. The AMF test client didn't work for me: it kept spewing errors where other test methods yielded perfectly fine results.
So, there are no suitable testing environments inside Moodle for testing web services.
===== Testing Moodle Web Services =====
To start with, configure your Moodle to use web services: go to the ''/admin/settings.php?section=webservicesoverview'' url and follow the steps.
Then, you can script your own tests, of course. Use [[https://github.com/moodlehq/moodle-local_wstemplate|the local wstemplate plugin]] as an example.
Or use one of these:
* [[https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm|Postman]], Google Chrome plugin
* [[http://www.soapui.org/|SoapUI]], Java application (doesn't run under XMonad/Gnome)
==== Test in Postman ====
Once installed, Postman is available through the 'Apps' section of Chrome: go to the url chrome://apps/
and click on the Postman icon.
To perform a test, type in a url (you can also use the URL Params tab), e.g.:
http://mymoodle/webservice/rest/server.php?wstoken=05260192_my_secret_token_ecd2d2b&wsfunction=myplugin_api_courses_get_active_courses_by_username&username=testuser11
===== Common Pitfalls =====
* After each change in your local web services plugin, do change the version number and visit the ''/admin/'' url. Otherwise, your tests will be conducted with obsolete data in the database (e.g. web services method names are stored in the database).
* The PARAM_TEXT is specified as a return type, but the actual text returned contains tags. Use PARAM_RAW instead.