Artikelformat

RESTful Webservices mit PHP

Webapplikationen bieten oftmals eine Schnittstelle an, über die auch Entwickler den angebotenen Service in ihren Applikationen nutzen können. Diese Webservices wurden gerne durch XML-RPC oder SOAP bereitgestellt. Doch der neue Trend ist REST.

Was ist REST?

REST steht für REpresentational State Transfer und wurde von Thomas Roy Fielding in seiner Dissertation benannt. REST benutzt URLs um Ressourcen bereitzustellen und das Hypertext Transfer Protocol um Manipulationen an diesen Ressourcen durchzuführen. Die einzelnen HTTP-Methoden werden für verschiedene Operationen genutzt dabei entspricht GET Lesen, PUT Update, POST Create und DELETE Löschen.

REST-Service in PHP – das Slim-Framework

Möchte man einen solchen REST-Service erstellen bietet sich das Slim-Framework an. Die Sourcen können bei Github gefunden werden. Der Aufbau eines Hello-World-Services ist denkbar einfach.

require 'Slim/Slim.php';
$app = new Slim();
$app->get('/hello/:name', function ($name) {
   echo "Hello $name";
});
$app->run();

Die interessante Zeile ist $app->get(). Hier wird ein Pfad und ein Parameter mit einer Funktion verknüpft. Das ganze verwendet die GET-Methode von HTTP.

Wenn man einen umfangreicheren Service anbieten will, werden weitere Methoden verwendet wie zum Beispiel PUT, DELETE, POST.

Als Beispiel sei ein Service für die Verwaltung einer Person zu nennen der so aussehen könnte:

require 'Slim/Slim.php';
$app = new Slim();
$app->get('/person/:id', function ($id) {
   // retrieve person
});

$app->post('/person', function () {
   // create person
});

$app->put('/person/:id', function ($id) {
   // update data
});

$app->delete('/person/:id', function ($id) {
   // delete data
});

$app->run();

Das Framework bietet neben der REST-Funktionalität auch noch eine Logging Komponente und alles ist mit Unittest abgedeckt.

Testen mit Chrome und FF

Um den REST-Service zu nutzen benötigt man normal einen REST-Client. Für Tests ist es natürlich überaus praktisch, wenn man die einzelnen Funktionen manuell triggern kann.

Hierfür gibt es eine Chrome Erweiterung, die den Entwickler die Methode, Header Information und Daten (bspw POST) setzen lässt.

Eine Firefox Extension gibt es auch, die ich aber bisher nicht getestet habe.

Webservice Tipp

Beim Entwerfen eines REST-Webservices sollte man gleich die Versionierung der API bedenken. So sollten Ressourcen dann bspw. über URLS wie /v1/person/1234 bereitgestellt werden.

6 Kommentare

  1. Tip: die Versionierung von REST APIs sollte man über den „Accept“-Header gestalten, nicht über die URI.

    Antworten
  2. Also ich denke, dass dies wieder eine Geschmacksfrage ist. Wenn man im Accept-Header die Version einbaut, dann muss der Client keine neuen URIs verarbeiten, bzw kann diese auch intern nutzen und speichern.

    Bei einer Versionierung über die URI muss der Client also seine intern gespeicherten Verweise anpassen.
    Auf der anderen Seite wird die API Version auch nicht aus Spaß geändert und somit kann man auch argumentieren, dass sich die Ressource ändert und dann wiederum ist der URI-Ansatz gerechtfertigt.

    Ich würde sagen, dass man Abwägen muss welche Methode den Anforderungen, der Unternehmenskultur etc am besten entspricht.

    Über den Accept Header kann man aber sehr gut das Format manipulieren, also ob json, xml, html oder etwas anderes zurückgegeben werden soll.

    Antworten
  3. Als REST-Neuling vermisse ich Hinweise auf die Sicherheit. Auf welche Arten kann ich den Zugriff auf die Ressourcen einschränken?

    Gibt es dazu irgendwo Erfahrungsberichte/Diskussionen?

    Antworten

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.