Signatur
Beschreibung
Yar_Server ist Teil der Yar-Erweiterung (Yet Another RPC Framework) für PHP und ermöglicht es, eine PHP-Klasse als RPC-Dienst zu exponieren. Clients können dann über das Netzwerk Methoden dieser Klasse aufrufen, als wären es lokale Funktionen. Yar ist dabei auf Geschwindigkeit optimiert und unterstützt mehrere Serialisierungsformate (JSON, Msgpack, PHP-Serialize).
Ein Yar_Server-Objekt wird mit einer Instanz der Klasse initialisiert, deren öffentliche Methoden als RPC-Endpunkte dienen sollen. Anschließend wird die Methode handle() aufgerufen, die eingehende HTTP-Anfragen verarbeitet. Der Server reagiert auf GET-Anfragen mit einer automatisch generierten API-Dokumentation und auf POST-Anfragen mit der eigentlichen RPC-Verarbeitung.
Yar eignet sich besonders für interne Microservice-Architekturen und PHP-zu-PHP-Kommunikation. Es ist leichtgewichtiger als SOAP oder XML-RPC, da es binäre Serialisierung unterstützt und einen minimalen Overhead hat.
Wichtig: Die Yar-Erweiterung muss als PECL-Paket installiert sein (pecl install yar) und ist nicht Bestandteil der PHP-Standardinstallation.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $executor Pflicht | object | Eine Instanz der PHP-Klasse, deren öffentliche Methoden als RPC-Dienste registriert werden. Alle public-Methoden dieser Klasse sind automatisch über den RPC-Server aufrufbar. |
Rückgabewert
Beispiele
Einfacher Yar-Server mit Service-Klasse
<?php
// server.php — wird über HTTP aufgerufen
class MathService
{
/**
* Addiert zwei Zahlen.
*/
public function add(int $a, int $b): int
{
return $a + $b;
}
/**
* Gibt eine Begrüßungsnachricht zurück.
*/
public function greet(string $name): string
{
return 'Hallo, ' . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . '!';
}
/**
* Private Methoden sind NICHT über RPC zugänglich.
*/
private function secret(): string
{
return 'Dieses ist nicht erreichbar.';
}
}
$service = new MathService();
$server = new Yar_Server($service);
$server->handle();
Yar-Client ruft den Server auf
<?php
// client.php — kommuniziert mit server.php
// URL des oben definierten Servers
$client = new Yar_Client('http://example.com/server.php');
// Synchroner Aufruf der 'add'-Methode
$result = $client->add(7, 3);
echo 'Summe: ' . $result . PHP_EOL;
// Aufruf der 'greet'-Methode
$greeting = $client->greet('Welt');
echo $greeting . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweise:
- Alle
public-Methoden der übergebenen Klasse sind ohne weitere Zugangskontrolle über das Netzwerk aufrufbar. Implementieren Sie eigene Authentifizierungs- und Autorisierungsmechanismen in der Service-Klasse oder davor. - Stellen Sie sicher, dass der Yar-Server nicht öffentlich im Internet erreichbar ist, wenn er für interne Dienste gedacht ist. Verwenden Sie Firewalls oder HTTP-Authentifizierung als zusätzlichen Schutz.
- Eingaben aus RPC-Aufrufen sollten genau wie normale Benutzereingaben behandelt und validiert werden, um Injection-Angriffe zu verhindern.
Technische Hinweise:
- Yar verwendet standardmäßig das Msgpack-Format zur Serialisierung, falls die Msgpack-Erweiterung verfügbar ist, andernfalls JSON.
- Der Server muss über HTTP(S) erreichbar sein; er funktioniert nicht über CLI ohne HTTP-Kontext.
- Die Yar-Erweiterung ist eine PECL-Erweiterung und wird nicht mit PHP mitgeliefert:
pecl install yar.