OpenIMS SOAP / REST API
OpenIMS beschikt over een specifieke en een generieke SOAP/XML, REST/JSON API. Met de generieke API, welke beschreven is op deze pagina, is het mogelijk alle functionaliteit van OpenIMS vanuit andere systemen middels SOAP/XML, REST/JSON te benutten. Het generieke API vereist inzicht in de interne werking van OpenIMS. Het specifieke API is beschreven in dit document. Het vereist minder inzicht in de interne werking van OpenIMS en is daardoor eenvoudiger te gebruiken. Wel is het beperkter dan het generieke API. Standaard staan alle APIs uit.
De generieke OpenIMS SOAP/XML (of REST/JSON) gateway beschikt over 4 subfuncties:
- echo (om te testen)
- getxml (om XML objecten uit de OpenIMS XML datastore (metabase) op te halen)
- setxml (om XML objecten in OpenIMS aan te passen)
- eval (om op willekeurige input specifieke code los te laten en het resultaat terug te krijgen, hiermee kunnen alle in OpenIMS ingebouwde functies worden aangeroepen)
De SOAP gateway is als "Speciale en ondersteunende functionaliteit" Inrichtingscomponent uitgevoerd. Dit betekent dat per server extra functies aan het SOAP interface kunnen worden toegevoegd en dat extra controles (bijvoorbeeld IP range) kunnen worden toegevoegd om het geheel te beveiligen. Het toevoegen van passende beveiliging is essentieel bij het inzetten van deze voorziening! I.v.m. performance is het aan te raden functie aanroepen zo veel mogelijk te bundelen in een enkele SOAP call.
SOAP kan vanuit elke programmeertaal worden aangeroepen. Bij deze voorbeeld aanroepen vanuit PHP:
require_once(getenv("DOCUMENT_ROOT").'/nusoap/nusoap.php');
$server = "*** SERVER DOMAIN ***";
$url = "http://$server/openims/soap.php";
$client = new soapclient($url);
// echo
$result = $client->call('SOAP_Gateway', array('function' => 'echo', 'input' => 'Hello world!'));
echo $result;
// setxml
$result = $client->call('SOAP_Gateway', array('function' => 'setxml', 'input' => array('table'=>'local_test', 'key'=>'test', 'data'=>'Hello world!')));
// getxml
$result = $client->call('SOAP_Gateway', array('function' => 'getxml', 'input' => array('table'=>'local_test', 'key'=>'test')));
echo $result."<br>";
// eval
$result = $client->call('SOAP_Gateway', array('function' => 'eval', 'input' => array('code'=>'$output=$input*3;', 'input'=>3)));
echo $result."<br>";