© saicle/Shutterstock.com
PHP Magazin
Schlanke REST-Schnittstellen mit dem Slim-Framework

REST in schlank

Nicht selten kommt es vor, dass haufenweise (Kunden-)Daten in lokalen Datenbanken innerhalb eines Firmennetzwerks schlummern. Mit steigender Mobilität gehen die Anforderungen für eine Verfügbarkeit dieser internen Daten jedoch weit über das Firmennetzwerk heraus. Mitarbeiter und Kunden möchten z. B. auch über ein Smartphone von unterwegs Zugriff auf diese Daten erhalten. Anstatt die komplette Datenbank nach außen zu öffnen, bietet sich eine schlanke REST-Schnittstelle an - die perfekte Anforderung für das Slim-Framework.

Stefan Göppert


Slim ist ein von Josh Lockhart geschriebenes PHP-„Microframework“ [1]. Die einzige Anforderung an den Server ist PHP 5.3+. Die MIT-Lizenz macht das Framework für den Einsatz im Unternehmen interessant. Die Installation erfolgt manuell oder über Composer, und nach der Installation ist das obligatorische „Hallo Welt“ schnell geschrieben (Listing 1).

Listing 1get('/hallo/:name', function ($name) { echo "Hallo $name"; }); $app->run();

Her mit den Daten

Das Kernstück einer REST-Schnittstelle sind ganz klar die Daten. Grundlage für die Anwendung ist eine bestehende Datenbank mit Kundenkontakten. Slim macht es dem Entwickler leicht und implementiert Callback-Funktionen für HTTP-Request-Methoden wie GET, POST, PUT usw. Zudem werden URIs entsprechend gemappt, sodass einem ansprechenden Schnittstellendesign nichts im Wege steht.

$app->get('/contacts', function () { echo json_encode(listContacts());});

Diese erste Funktion listet die vorhandenen Kontakte aus der Datenbank. Damit die Anwendung eine nachvollziehbare und aufgeräumte Architektur erhält, werden die Funktionen entsprechend der Datenbanktabellen auf einzelne PHP-Dateien verteilt. Die Rückgabe der Daten erfolgt im JSON-Format. Jede Rückgabe erhält einen Status (ok/error) und eine Nachricht, die von der jeweiligen Clientanwendung ausgewertet werden kann.

Listing 2function listContacts(){ $contacts = ORM::for_table('contacts')->order_by_asc('surname') ->find_many(); if (!empty($contacts)) { $contacts_arr = Array(); $result_arr = array('status' => 'ok','msg' =>''); foreach ($contacts as $contact) : array_push($contacts_arr,$contact->as_array()); endforeach; $result_arr['contacts'] = $contacts_arr; } else { $result_arr = array('status' => 'error', 'msg' => 'no contacts found'); } return $result_arr;}

Dem Leser ist in Listing 2 vielleicht die erste Zeile der Funktion aufgefallen. Die Datenbankanbindung erfolgt hier mithilfe von Idiorm – einem kleinen objektrelationalen Mapper [2]. Für viele Clientanwendungen ist es sinnvoll, einen HTTP-Statuscode anstatt einer Fehlermeldung in einem JSON-String zurückzugeben. Dazu muss zuerst eine Anwendungsinstanz in die Funktion geholt werden. Dann kann der Statuscode bequem gesetzt werden:

$app = \Slim\Slim::getInstance();$app->response->setStatus(404);

Die Funktionen zum Erstellen, Lösche...

PHP Magazin
Schlanke REST-Schnittstellen mit dem Slim-Framework

REST in schlank

Nicht selten kommt es vor, dass haufenweise (Kunden-)Daten in lokalen Datenbanken innerhalb eines Firmennetzwerks schlummern. Mit steigender Mobilität gehen die Anforderungen für eine Verfügbarkeit dieser internen Daten jedoch weit über das Firmennetzwerk heraus. Mitarbeiter und Kunden möchten z. B. auch über ein Smartphone von unterwegs Zugriff auf diese Daten erhalten. Anstatt die komplette Datenbank nach außen zu öffnen, bietet sich eine schlanke REST-Schnittstelle an - die perfekte Anforderung für das Slim-Framework.

Stefan Göppert


Slim ist ein von Josh Lockhart geschriebenes PHP-„Microframework“ [1]. Die einzige Anforderung an den Server ist PHP 5.3+. Die MIT-Lizenz macht das Framework für den Einsatz im Unternehmen interessant. Die Installation erfolgt manuell oder über Composer, und nach der Installation ist das obligatorische „Hallo Welt“ schnell geschrieben (Listing 1).

Listing 1get('/hallo/:name', function ($name) { echo "Hallo $name"; }); $app->run();

Her mit den Daten

Das Kernstück einer REST-Schnittstelle sind ganz klar die Daten. Grundlage für die Anwendung ist eine bestehende Datenbank mit Kundenkontakten. Slim macht es dem Entwickler leicht und implementiert Callback-Funktionen für HTTP-Request-Methoden wie GET, POST, PUT usw. Zudem werden URIs entsprechend gemappt, sodass einem ansprechenden Schnittstellendesign nichts im Wege steht.

$app->get('/contacts', function () { echo json_encode(listContacts());});

Diese erste Funktion listet die vorhandenen Kontakte aus der Datenbank. Damit die Anwendung eine nachvollziehbare und aufgeräumte Architektur erhält, werden die Funktionen entsprechend der Datenbanktabellen auf einzelne PHP-Dateien verteilt. Die Rückgabe der Daten erfolgt im JSON-Format. Jede Rückgabe erhält einen Status (ok/error) und eine Nachricht, die von der jeweiligen Clientanwendung ausgewertet werden kann.

Listing 2function listContacts(){ $contacts = ORM::for_table('contacts')->order_by_asc('surname') ->find_many(); if (!empty($contacts)) { $contacts_arr = Array(); $result_arr = array('status' => 'ok','msg' =>''); foreach ($contacts as $contact) : array_push($contacts_arr,$contact->as_array()); endforeach; $result_arr['contacts'] = $contacts_arr; } else { $result_arr = array('status' => 'error', 'msg' => 'no contacts found'); } return $result_arr;}

Dem Leser ist in Listing 2 vielleicht die erste Zeile der Funktion aufgefallen. Die Datenbankanbindung erfolgt hier mithilfe von Idiorm – einem kleinen objektrelationalen Mapper [2]. Für viele Clientanwendungen ist es sinnvoll, einen HTTP-Statuscode anstatt einer Fehlermeldung in einem JSON-String zurückzugeben. Dazu muss zuerst eine Anwendungsinstanz in die Funktion geholt werden. Dann kann der Statuscode bequem gesetzt werden:

$app = \Slim\Slim::getInstance();$app->response->setStatus(404);

Die Funktionen zum Erstellen, Lösche...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang