Top
PHP & MySQLVideoanleitungen

Erstellen einer einfachen REST-API in PHP


<?php
// get the HTTP method, path and body of the request
$method = $_SERVER['REQUEST_METHOD'];
$request = explode('/', trim($_SERVER['PATH_INFO'],'/'));
$input = json_decode(file_get_contents('php://input'),true);
// connect to the mysql database
$link = mysqli_connect('localhost', 'user', 'pass', 'dbname');
mysqli_set_charset($link,'utf8');
// retrieve the table and key from the path
$table = preg_replace('/[^a-z0-9_]+/i','',array_shift($request));
$key = array_shift($request)+0;
// escape the columns and values from the input object
$columns = preg_replace('/[^a-z0-9_]+/i','',array_keys($input));
$values = array_map(function ($value) use ($link) {
if ($value===null) return null;
return mysqli_real_escape_string($link,(string)$value);
},array_values($input));
// build the SET part of the SQL command
$set = '';
for ($i=0;$i<count($columns);$i++) {
$set.=($i>0?',':'').'`'.$columns[$i].'`=';
$set.=($values[$i]===null?'NULL':'"'.$values[$i].'"');
}
// create SQL based on HTTP method
switch ($method) {
case 'GET':
$sql = "select * from `$table`".($key?" WHERE id=$key":''); break;
case 'PUT':
$sql = "update `$table` set $set where id=$key"; break;
case 'POST':
$sql = "insert into `$table` set $set"; break;
case 'DELETE':
$sql = "delete `$table` where id=$key"; break;
}
// excecute SQL statement
$result = mysqli_query($link,$sql);
// die if SQL statement failed
if (!$result) {
http_response_code(404);
die(mysqli_error());
}
// print results, insert id or affected row count
if ($method == 'GET') {
if (!$key) echo '[';
for ($i=0;$i<mysqli_num_rows($result);$i++) {
echo ($i>0?',':'').json_encode(mysqli_fetch_object($result));
}
if (!$key) echo ']';
} elseif ($method == 'POST') {
echo mysqli_insert_id($link);
} else {
echo mysqli_affected_rows($link);
}
// close mysql connection
mysqli_close($link);
Dieser Code soll Ihnen zeigen, wie einfach es ist, eine voll funktionsfähige REST-API in PHP zu erstellen.

Laufen



Speichern Sie diese Datei als “api.php” in Ihrem (Apache) Dokumentenstammverzeichnis und rufen Sie sie wie folgt auf:

 

http://localhost/api.php/{$table}/{$id}

Oder Sie können den in PHP integrierten Webserver über die Befehlszeile verwenden:

 

$ php -S localhost:8888 api.php

 

Die URL, die von der Befehlszeile aus aufgerufen wurde, lautet:

 

http://localhost:8888/api.php/{$table}/{$id}

 

NB: Vergessen Sie nicht, die Parameter ‘mysqli_connect’ im obigen Skript anzupassen!

 

REST-API in einer einzigen PHP-Datei

 

Obwohl der obige Code nicht perfekt ist, macht er eigentlich 3 wichtige Dinge:

  1. Unterstützen Sie die HTTP-Verben GET, POST, UPDATE und DELETE
  2. Entkomme alle Daten, um SQL-Injection zu vermeiden
  3. Behandle Nullwerte korrekt

 

Man könnte also sagen, dass die REST-API voll funktionsfähig ist. Möglicherweise stoßen Sie auf fehlende Features des Codes, z.

  1. Keine verwandten Daten (automatische Joins) werden unterstützt
  2. Keine komprimierte JSON-Ausgabe unterstützt
  3. Keine Unterstützung für PostgreSQL oder SQL Server
  4. Keine POST-Parameterunterstützung
  5. JSONP / CORS unterstützt keine Domänenunterstützung
  6. Keine base64-Binärspaltenunterstützung
  7. Kein Berechtigungssystem
  8. Keine Suche / Filterunterstützung
  9. Kein Paginieren oder Sortieren unterstützt
  10. Keine Spaltenauswahl unterstützt

 

Keine Sorge, all diese Funktionen sind in php-crud-api verfügbar, die Sie von Github erhalten können. Auf der anderen Seite, jetzt, wo Sie die Essenz der Anwendung haben, können Sie auch Ihre eigenen schreiben!