Signatur
Beschreibung
Yar_Server_Request_Exception ist eine Ausnahme, die auf der Serverseite der Yar-RPC-Erweiterung geworfen wird, wenn ein eingehender Request ungültig ist – etwa wenn der Request-Body nicht dekodiert werden kann, das verwendete Protokoll nicht unterstützt wird oder die Anfrage strukturell fehlerhaft ist.
Sie erbt von Yar_Server_Exception und damit indirekt von der PHP-Basisklasse Exception. Sie steht innerhalb der Yar-Ausnahmenhierarchie auf der Serverseite und unterscheidet sich von Yar_Client_Exception, die Fehler auf der Clientseite repräsentiert.
Typischerweise tritt diese Ausnahme auf, wenn ein Client einen Request mit einem inkompatiblen Packer sendet (z. B. JSON statt Msgpack), wenn der Request-Body leer oder korrumpiert ist oder wenn die Yar-Protokollstruktur nicht eingehalten wird. In einem Server-Handler kann man diese Ausnahme gezielt abfangen, um dem Client eine sinnvolle Fehlermeldung zurückzugeben.
Da Yar eine RPC-Erweiterung für PHP ist, sollte diese Ausnahme vor allem in Serverimplementierungen behandelt werden, die öffentlich exponiert sind oder unterschiedliche Clientversionen unterstützen müssen.
Beispiele
Yar-Server mit Fehlerbehandlung für ungültige Requests
<?php
class MathService {
public function add(int $a, int $b): int {
return $a + $b;
}
}
try {
$server = new Yar_Server(new MathService());
$server->handle();
} catch (Yar_Server_Request_Exception $e) {
// Ungültiger Request empfangen
error_log('Ungültiger Yar-Request: ' . $e->getMessage() . ' (Code: ' . $e->getCode() . ')');
http_response_code(400);
echo json_encode(['error' => 'Ungültiger Request', 'message' => $e->getMessage()]);
} catch (Yar_Server_Exception $e) {
// Allgemeiner Serverfehler
error_log('Yar-Serverfehler: ' . $e->getMessage());
http_response_code(500);
}
Unterschiedliche Yar-Serverausnahmen gezielt abfangen
<?php
class ApiService {
public function ping(): string {
return 'pong';
}
}
try {
$server = new Yar_Server(new ApiService());
$server->handle();
} catch (Yar_Server_Request_Exception $e) {
// Spezifisch: fehlerhafter oder nicht dekodierbarer Request
header('Content-Type: application/json');
http_response_code(400);
echo json_encode([
'status' => 'error',
'type' => 'request_exception',
'code' => $e->getCode(),
'message' => $e->getMessage(),
]);
} catch (Yar_Server_Exception $e) {
// Fallback für alle anderen Yar-Serverausnahmen
header('Content-Type: application/json');
http_response_code(500);
echo json_encode([
'status' => 'error',
'type' => 'server_exception',
'message' => $e->getMessage(),
]);
}
// Wichtig · Fallstricke
Sicherheitshinweis: Geben Sie im Fehler-Response keine internen Stacktrace-Informationen oder Systempfade an den Client zurück. Loggen Sie diese Daten stattdessen serverseitig und liefern Sie dem Client nur eine generische Fehlermeldung.
Die Yar-Erweiterung ist nicht standardmäßig in PHP enthalten und muss über PECL installiert werden (pecl install yar). Die genaue Verfügbarkeit und das Verhalten dieser Ausnahme können je nach installierter Yar-Version leicht abweichen.
Bei der Entwicklung öffentlicher Yar-Endpunkte empfiehlt es sich, auch auf Packer-Kompatibilität zwischen Client und Server zu achten, da ein Packer-Mismatch häufig zu Yar_Server_Request_Exception führt.