Ok, fangen wir mal an. Wie bei allen Sachen in Drupal funktioniert auch das Registrieren eines Services über Hooks. Der Hook, den wir hier benötigen, ist hook_services_resources(). Diesen Hook lässt man einen Array zurückgeben, das Drupal den Service bekannt macht. Aussehen könnte das so:

<?php
function service_tutorial_services_resources() {
 return array(
  
'service_tutorial' => array( // Name der Ressource
    
'actions' => array( // Art der Methode, siehe CRUD
      
'test' => array( // Name der Funktion
        
'access callback' => 'service_tutorial_perm', // Funktion, die bei Bedarf TRUE
                                                       // oder FALSE zurückgibt
        
'file' => array( // Hier wird angegeben, wo sich die Callback-Funktion unserer
                          // Service-Funktion befindet
          
'type' => 'inc',
          
'module' => 'service_tutorial',
          
'name' => 'service_tutorial_resources',
         ),
        
'callback' => 'test', // Name unserer Callback-Funktion
      
),
     ),
   )
 );
}
?>

OK, ich versuch das mal zu erklären. Als erstes geben wir unseren Ressourcen-Namen an, das ist der Name, der auch angezeigt wird, wenn man die Ressourcen auswählt. Man könnte das wie so eine Art Package-Namen sehen, unter dem man dann die einzelnen Funktionen unseres Services findet.

Services 3 arbeitet mit dem so genannten CRUD System, 'create', 'update', 'retrieve' und 'delete'. Zusätzlich gibt es dann noch 'actions', die wir hier benutzen. Darunter befinden sich die einzelnen Funktionsdefinitionen.

Nun kommt der Name unserer Service-Funktion, mal ganz simpel test(). Danach sagen wir Services, wo es unsere Callback-Funktion findet. Der erste Parameter ist der Typ der Datei, der zweite das Modul, zu dem die Datei gehört, und der dritte der Name der Datei.

Schlussendlich dann noch die Callback-Funktion, in dem Fall test(). Die Callback-Funktion wird dann von Services aufgerufen, sobald jemand unsere Service-Funktion test() benutzt. Sie muss in der unter 'file' angegebenen Datei liegen. Wie sieht nun unsere Callback-Funktion aus:

<?php
function test() {
 
$date = new stdClass();
 
$data->foo = $foo;
 
$data->bar = $bar;
  return
$data;
}
?>

OK, ziemlich simpel, aber das soll ja auch nur ein Beispiel sein, denn das Wichtige ist: hat man erst einmal verstanden, wie man seinen eigenen Service schreibt, dann kann man die ganze Macht Drupals nach außen für sich nutzbar machen. Und so auch z.B. sein Handy mit Daten füttern oder Drupal von seinem Handy aus mit Daten füttern, wie man möchte.

OK, wie versprochen habe ich mich so kurz wie möglich gehalten. Ich stelle hier noch mein Modul rein, das ich auch in der Session auf der DrupalCity gezeigt habe. Da wird nochmal ein wenig mehr gezeigt, z.B. wie man Argumente für die Funktionen definiert.

Wer mehr über Services erfahren möchte, dem kann ich nur empfehlen, den Quellcode von Services zu studieren, da die Dokumentation leider für mich unter Drupal 7 nicht funktioniert hat und ich leider auch nur über den Quellcode herausfinden konnte, was ich hier zeige. Und wie immer, gefundene Rechtschreibfehler können behalten werden.

Ich hoffe, ich konnte helfen, und wünsche nun viel Spaß beim Testen, den Quellcode könnt ihr euch hier herunterladen.