Start · Sprachen · PHP · Referenz · Yar_Server_Request_Exception

Yar_Server_Request_Exception

Klasse

Wird ausgelöst, wenn der Yar-Server einen ungültigen oder fehlerhaften Request empfängt.

seit PHP 1.0.0 Kategorie: error

Signatur

class Yar_Server_Request_Exception extends Yar_Server_Exception

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 dekodier­barer 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.