Ausführende Instanz für Remote Procedure Call ist die Framework-Instanz

Per HTTP werden Methodname und Funktions-Argumente an den Server gesendet

Die ​Frage ​ist, ​welche ​Instanz ​sich ​für ​die ​Ausführung ​der ​serverseitigen ​Methode ​zuständig ​zeichnet ​oder ​ob ​die ​Methode ​einfach ​so, ​von ​irgendeiner ​Klasse ​ausgeführt ​werden ​soll. ​Eine ​mögliche ​Antwort ​ergibt ​sich ​aus ​dem ​Verwendungszweck.

Wenn ​es ​um ​das ​Managen ​von ​Content ​geht, ​ist ​zumindest ​klar, ​dass ​die ​serverseitige ​Klasse ​eine ​sehr ​ähnliche ​Aufgabe ​hat ​wie ​eine ​Klasse, ​welche ​für ​das ​Ausliefern ​von ​Content ​zuständig ​ist. ​Des ​Weiteren ​ist ​für ​den ​Übertragungsweg ​HTTP ​serverseitig ​ein ​URL ​erforderlich. ​Infolge ​der ​Bindung ​von ​URLs ​an ​Klassen ​liefert ​das ​Framework ​die ​besten ​Voraussetzungen ​für ​die ​Ausführung ​von ​Remote ​Procedure ​Calls.

Ein ​universeller ​Parser ​erlaubt ​außerdem ​das ​Parsen ​beliebiger, ​im ​Request ​vorliegender ​Content-Types ​wie ​z.B.:

 ​ ​application/x-www-form-urlencoded
 ​ ​multipart/form-data
 ​ ​application/json
 ​ ​application/xml

usw. ​Damit ​ist ​schonmal ​die ​Frage ​der ​Verpackung ​gelöst: ​klassisch ​XML. ​Es ​sind ​aber ​auch ​beliebige ​andere ​Content-Types ​möglich. ​Unabhängig ​vom ​Content-Type ​liefert ​der ​Parser ​stets ​dieselben ​Datenstrukturen. ​Ergo ​kann ​die ​ausführende ​Instanz ​nur ​eine ​Instanz ​einer ​zum ​Framework ​gehörigen ​Subklasse ​sein. ​Damit ​stehen ​dieser ​Instanz ​auch ​sämtliche ​zum ​Framework ​gehörigen ​Libraries ​zur ​Verfügung ​oder ​mit ​anderen ​Worten ​ausgedrückt:

Einem ​Remote ​Procedure ​Call ​stehen ​sämtliche ​zum ​Framework ​gehörigen ​Schnittstellen ​zur ​Verfügung, ​was ​den ​Zugriff ​auf ​serverseitige ​Daten ​betrifft. ​Der ​Vollständigkeit ​halber ​noch ​ein ​bischen ​CODE:

Der ​Parser ​ergibt ​den ​Namen ​der ​auszuführenden ​Methode:
 ​ ​my ​$methodname ​= ​$self->param('methodname');

Nun ​muss ​festgestellt ​werden, ​ob ​es ​die ​Methode ​gibt ​im ​Scope ​der ​eigenen ​Klasse:
 ​ ​my ​$code ​= ​$self->can($methodname) ​|| ​die ​"Eine ​solche ​Methode ​gibt ​es ​nicht";

Schließlich ​werden ​die ​Argumente ​ermittelt ​und ​der ​Code ​ausgeführt:
 ​ ​my ​@args ​= ​$self->param('args');
 ​ ​my ​$rv ​ ​ ​= ​$self->$code( ​@args ​);

Anmerkung: ​$self ​ist ​die ​Instanz ​der ​an ​den ​URL ​gebundenen ​Subklasse ​und ​die ​Fehlerbehandlung ​erfolgt ​wie ​im ​Framework ​üblich ​über ​das ​Exception-Modell. ​

Der ​Return-Value ​$rv ​wird ​je ​nach ​Anforderung ​serialisiert. ​So ​kann ​$rv ​auch ​komplexe ​Datenstrukturen ​enthalten, ​die ​als ​XML ​in ​der ​Response ​gesendet ​werden. ​Auf ​die ​bewährte ​Art ​und ​Weise ​der ​Fabrik ​wird ​ganz ​einfach ​eine ​Methode ​aufgerufen:

 ​ ​$self->make_xml( ​$rv ​);

wobei ​die ​aufgerufene ​Methode ​make_xml() ​die ​XML-Response ​gleich ​in ​den ​dafür ​vorgesehenen ​Ausgabepuffer ​{CONTENT} ​schreibt. ​Gleichermaßen ​setzt ​make_xml() ​auch ​den ​richtigen ​Content-Type: ​application/xml ​für ​die ​Response ​und ​alles ​Andere ​wird ​sodann ​vom ​Framework ​erledigt.


Anbieter: nmq​rstx-18­@yahoo.de, die Seite verwendet funktionsbedingt einen Session-Cookie und ist Bestandteil meines nach modernen Aspekten in Perl entwickelten Frameworks.