Ein einfacher HttpClient für PHP Projekte
HttpClient::request('DELETE', '/api/endpoint/4')
Für umfassende Interaktionen mit einer REST API über HTTP gibt es viele gute PHP Bibliotheken. Die bekannteste dürfte Guzzle sein.
Wenn dieses Bibliothek zu groß oder unpassend für ein Projekt ist, kann auch eine kleine eigene Klasse abhilfe schaffen.
Der folgende minimale HTTP Klient kann unter anderem:
- per
GET
Daten abrufen:HttpClient::request('GET', '/api/endpoint?' . http_build_query($data))
- per
POST
Daten senden:HttpClient::request('POST', '/api/endpoint', json_encode($data), [CURLOPT_HTTPHEADER=>['Content-Type: application/json', 'Accept: application/json']])
- per
DELETE
Daten löschen:HttpClient::request('DELETE', '/api/endpoint/4')
- und auch
PUT
undPATCH
werden unterstützt.HttpClient::request('PUT', '/api/endpoint/5', json_encode($data)); HttpClient::request('PATCH', '/api/endpoint/5', json_encode($data));
- Authentifizierung über http basic auth:
HttpClient::request('GET', '/api/endpoint?'.http_build_query($data), null, [CURLOPT_USERPWD=>'test:password'])
- Daten im JSON Format senden und empfangende Daten einlesen mit
json_encode($data)
undjson_decode($data)
.
Die Klasse - weniger als 40 Zeilen Code!
class HttpClient
{
public static $ch;
public static function request($method = 'GET', $url, $data = [], $options = [])
{
$curlOptions = [
CURLOPT_MAXREDIRS => 0,
CURLOPT_TIMEOUT => 10,
CURLOPT_RETURNTRANSFER => true,
];
switch ($method) {
case 'GET':
break;
case 'POST':
$curlOptions[CURLOPT_POST] = true;
$curlOptions[CURLOPT_POSTFIELDS] = $data;
break;
default:
$curlOptions[CURLOPT_CUSTOMREQUEST] = $method; // eg. DELETE
}
$curlOptions[CURLOPT_URL] = $url;
$curlOptions = $curlOptions + $options;
static::$ch = curl_init();
curl_setopt_array(static::$ch, $curlOptions);
return [
'data' => curl_exec(static::$ch),
'statusCode' => curl_getinfo(static::$ch, CURLINFO_RESPONSE_CODE)
];
}
}
Für die Fehler Diagnose var_dump(curl_error(HttpClient::$ch))
.