MoodleRest, a PHP class to query Moodle REST webservices
Tags: moodle, php, rest, lms
Published: 2019-12-20 14:33:01

---
title: MoodleRest, a PHP class to query Moodle REST webservices
published: true
description: How to install and use the MoodleRest PHP lib to make GET and POST requests to Moodle webservices.
tags: #moodle, #php, #rest, #lms
---

## What it does, exactly?

MoodleRest allow you to easily make GET or POST requests to query or update information from many webservices available on [Moodle](https://moodle.org).

> "Moodle is a learning platform designed to provide educators, administrators and learners with a single robust, secure and integrated system to create personalised learning environments".

This lib can return information from Moodle webservices in one of these formats:

- **array**
- **json**
- **xml**


## The GitHub project page

https://github.com/llagerlof/MoodleRest

This dev.to article covers the basics. Many more examples and other features on project page.


## Requirements

Ensure you already have access to a Moodle webservice. To use this class you will need a token (generated by Moodle admin) with the necessary capabilities for the services you want to access.


## To the code

**You have 2 options to add this lib to your project:**

### Option One

Use Composer to include it in your project.

- Inside your project directory create or modify the file `composer.json`:

```json
{
    "require": {
        "llagerlof/moodlerest": "2.3.0"
    }
}
```

- In the same directory of the `composer.json`, run:
```bash
$ composer install
```

- In your project, load the lib using composer autoloader:

```php
<?php
require_once dirname(__FILE__) . '/vendor/autoload.php';
```

### Option Two

Just include the `MoodleRest.php` class directly in your script.

```php
require_once dirname(__FILE__) . '/MoodleRest.php';
```

## The `MoodleRest` constructor

You can pass 2 parameters:

- A full url path to the Moodle webserver
- The token generated by Moodle admin.

**Example:**

```php
$MoodleRest = new MoodleRest(
    'http://127.0.0.1/moodle/webservice/rest/server.php', 
    '8f12e614dae30735260a045313caa400'
);
```


## The method `request()`

This method needs at least 2 parameters:

- The webservice functiona name (string).
- The parameters (array) passed to the webservice. The MoodleRest will internally convert this array to a query string. If you need to learn how to build an array compatible to each webservice's function [I have you covered](https://github.com/llagerlof/MoodleRest/wiki/Understanding-the-$parameters-in-request()-method)!


## Query example (GET)

Query 2 Moodle groups with IDs 1 and 2, passing the server URL and token in constructor using the `request` method.

```php
$MoodleRest = new MoodleRest(
    'http://127.0.0.1/moodle/webservice/rest/server.php', 
    '8f12e614dae30735260a045313caa400'
);

$groups = $MoodleRest->request(
    'core_group_get_groups', 
    array('groupids' => array(1,2))
);

print_r($groups);
```

## Inserting data example (POST)

Set the server and token in constructor and make a request to create a group on Moodle.

```php
$MoodleRest = new MoodleRest(
    'http://127.0.0.1/moodle/webservice/rest/server.php', 
    '8f12e614dae30735260a045313caa400'
);

$new_group = array(
    'groups' => array(
        array(
            'courseid' => 2, 
            'name' => 'Group name', 
            'description' => 'Group description'
        )
    )
);

/*
The default request's METHOD is to make a GET request, but you can change it to POST.
This is recommended when inserting and updating data.
*/

$return = $MoodleRest->request(
    'core_group_create_groups', 
    $new_group, 
    MoodleRest::METHOD_POST
);

// If you want the requested URL
echo $MoodleRest->getUrl();
```

That's it! Quick and easy.

More features and examples on [project page](https://github.com/llagerlof/MoodleRest).