Development:Creating a web service client: Difference between revisions

From MoodleDocs
No edit summary
 
(21 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Moodle_2.0}}
{{Moodle_2.0}}
[[Image:Moodle web service function documentation.jpg|thumb]]You need to have already setup a web service. You can get help from [[How to enable web services for ordinary users]] or [[How to enable web services for an external system]] . Then have a look to your [https://docs.moodle.org/en/How_to_get_a_security_key security keys] page. You'll find there your token and the web service documentation associated with this token.
= Officially supported protocols=
= Officially supported protocols=
In this chapter we will talk about the different supported protocol.


* '''REST''': the current REST Moodle server use POST paramters and XML. The server is not RESTfull. A client would be really easy to implement once you know how the XML is structured. Have a look to the Moodle default test client, the XML is displayed.
* '''REST''': the Moodle REST server uses POST for parameters and XML for returned values. This server is not RESTfull.
* '''SOAP''': the current SOAP server is based on the Zend SOAP sever (itself based on the PHP SOAP sever). Zend publishes [http://framework.zend.com/manual/en/zend.soap.client.html a Zend SAOP client]. The current server implementation doesn't work with Java/.Net because we didn't generated [http://geekandpoke.typepad.com/geekandpoke/2009/11/service-calling-made-easy-part-1.html a fully describe WSDL] yet. If you are working on a Java/.Net client, follow or participate to the tracker issue MDL-20804
* '''SOAP''': the Moodle SOAP server is based on the Zend SOAP server (itself based on the PHP SOAP server). Zend publishes [http://framework.zend.com/manual/en/zend.soap.client.html a Zend SOAP client]. The current server implementation doesn't work with Java/.Net because we didn't generated [http://geekandpoke.typepad.com/geekandpoke/2009/11/service-calling-made-easy-part-1.html a fully describe WSDL] yet. If you are working on a Java/.Net client, follow or participate to the tracker issue MDL-20804
* '''XML-RPC''': the current XML-RPC server is based on Zend XML-RPC server. Zend also publishes [http://framework.zend.com/manual/en/zend.xmlrpc.client.html a Zend XML-RPC client].
* '''XML-RPC''': the Moodle XML-RPC server is based on Zend XML-RPC server. Zend also publishes [http://framework.zend.com/manual/en/zend.xmlrpc.client.html a Zend XML-RPC client].
* '''AMF''': the server is based on the Zend AMF server. The server has been tested with simple web service function and primary type. The test client is currently work in progress, see the issue tracker MDL-20808.
* '''AMF''': the Moodle AMF server is based on the Zend AMF server. The test client can be found in ''Settings blocks > Site Administration > Development > Web service test client > AMF Test client''.
 
= PHP client examples =
In all these client examples we will create two groups calling the web service function ''moodle_group_create_groups''.
 
== XML-RPC ==
The Moodle XML-RPC server extends Zend XML-RPC Server. It is recommended to have a look to the [http://framework.zend.com/manual/en/zend.xmlrpc.client.html Zend XML-RPC client documentation]
 
<code php>
 
include 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::autoload('Zend_Loader');


You will also look for functions documentation. A documentation generator will be available. Please follow the tracker issue MDL-20803
$function = "moodle_user_get_users_by_id";


== What protocol to use==
// id of the users
*PHP:  have a look at [http://framework.zend.com/manual/en/zend.soap.client.html SOAP]/[http://framework.zend.com/manual/en/zend.xmlrpc.client.html XMLRPC] zend clients. SOAP/XMLRPC Moodle server use Zend server, it should be easy to use.
$params = array(array(2,4));
*Java/.Net: use the REST protocol. The SOAP server doesn't generate a Java compliant WSDL yet.
*AS3: use the AMF protocol. Moodle use Zend AMF server. This server is supported by Zend and Adobe.


= Authentication =
$serverurl = "http://{servername}/webservice/xmlrpc/server.php?wstoken=$token";
There is two methods to be authenticated by the web service. Each time you call a web service function:
# you pass your username/password.
# you pass a token. This token has been generated for you by an administrator into the Moodle administration.


== username/password authentication==
$client = new Zend_XmlRpc_Client($serverurl);
if you look to the Moodle test client PHP code, you will notice that username/password are sent as GET parameters.
print "<pre>";
<code php>
try {
//wwwroot/webservice/$protocol/simpleserver.php?wsusername=your_username&wspassword=your_password
    $data = $client->call($function, $params);
$serverurl = "$CFG->wwwroot/webservice/$protocol/simpleserver.php";
    var_dump ($data);
$serverurl .= '?wsusername='.urlencode($data->wsusername);
} catch (exception $exception) {
$serverurl .= '&wspassword='.urlencode($data->wspassword);
    var_dump ($exception);
}
print "</pre>";
</code>
</code>


== token authentication==
== SOAP ==
if you look to the Moodle test client PHP code, you will notice that username/password are sent as GET parameters.
The Moodle SOAP server extends Zend SOAP Server. It is recommended to have a look to the [http://framework.zend.com/manual/en/zend.soap.client.html Zend SOAP client documentation].
Except the class name ''Zend_Soap_Client'', the entire example code would be similar to XML-RPC.
 
== REST ==
Look at the web service function documentation on your [https://docs.moodle.org/en/How_to_get_a_security_key security keys] page to know about the returned XML structure.
 
<code php>
<code php>
//wwwroot/webservice/$protocol/simpleserver.php?wstoken=your_token
//get the profile data of Moodle User
$serverurl = "$CFG->wwwroot/webservice/$protocol/server.php";
 
$serverurl .= '?wstoken='.urlencode($data->token);
include 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::autoload('Zend_Loader');
 
$params = array(
    'userids' => array(2,4), // the params to passed to the function
    'wsfunction' => 'moodle_user_get_users_by_id',  // the function to be called
    'wstoken' => '8dc8f5ca046129706c0d85a56efcaddd' //token need to be passed in the url
);
 
//set web service url server
$serverurl = "http://{servername}/webservice/rest/server.php";
 
$client = new Zend_Http_Client($serverurl);
 
print "<pre>";
try {
    $client->setParameterPost($params);   
    $response = $client->request('POST');
 
    var_dump ($response);
} catch (exception $exception) {
    var_dump ($exception);
}
print "</pre>";
 
 
 
 
</code>
</code>


[[Category:Web Services]]
[[Category:Web Services]]

Latest revision as of 14:42, 22 April 2011

Template:Moodle 2.0

Moodle web service function documentation.jpg

You need to have already setup a web service. You can get help from How to enable web services for ordinary users or How to enable web services for an external system . Then have a look to your security keys page. You'll find there your token and the web service documentation associated with this token.

Officially supported protocols

  • REST: the Moodle REST server uses POST for parameters and XML for returned values. This server is not RESTfull.
  • SOAP: the Moodle SOAP server is based on the Zend SOAP server (itself based on the PHP SOAP server). Zend publishes a Zend SOAP client. The current server implementation doesn't work with Java/.Net because we didn't generated a fully describe WSDL yet. If you are working on a Java/.Net client, follow or participate to the tracker issue MDL-20804
  • XML-RPC: the Moodle XML-RPC server is based on Zend XML-RPC server. Zend also publishes a Zend XML-RPC client.
  • AMF: the Moodle AMF server is based on the Zend AMF server. The test client can be found in Settings blocks > Site Administration > Development > Web service test client > AMF Test client.

PHP client examples

In all these client examples we will create two groups calling the web service function moodle_group_create_groups.

XML-RPC

The Moodle XML-RPC server extends Zend XML-RPC Server. It is recommended to have a look to the Zend XML-RPC client documentation

include 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::autoload('Zend_Loader');

$function = "moodle_user_get_users_by_id";

// id of the users $params = array(array(2,4));

$serverurl = "http://{servername}/webservice/xmlrpc/server.php?wstoken=$token";

$client = new Zend_XmlRpc_Client($serverurl);

print "

";
try {
    $data = $client->call($function, $params);
    var_dump ($data);
} catch (exception $exception) {
    var_dump ($exception);
}
print "

";

SOAP

The Moodle SOAP server extends Zend SOAP Server. It is recommended to have a look to the Zend SOAP client documentation. Except the class name Zend_Soap_Client, the entire example code would be similar to XML-RPC.

REST

Look at the web service function documentation on your security keys page to know about the returned XML structure.

//get the profile data of Moodle User

include 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::autoload('Zend_Loader');

$params = array(

   'userids' => array(2,4), // the params to passed to the function
   'wsfunction' => 'moodle_user_get_users_by_id',   // the function to be called
   'wstoken' => '8dc8f5ca046129706c0d85a56efcaddd' //token need to be passed in the url

);

//set web service url server $serverurl = "http://{servername}/webservice/rest/server.php";

$client = new Zend_Http_Client($serverurl);

print "

";
try {
    $client->setParameterPost($params);    
    $response = $client->request('POST');

    var_dump ($response);
} catch (exception $exception) {
    var_dump ($exception);
}
print "

";