© saicle/Shutterstock.com
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.

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 1

<?php require 'libs/Slim/Slim.php'; \Slim\Slim::registerAutoloader(); $app = new \Slim\Slim(); $app->get('/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 2

function 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 Daten...

Neugierig geworden?

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