pl: XML Rpc

Beitrag lesen

Tach,

und jetzt mach noch XML draus und du bist schon fast wieder bei XML-RPC.

Wieso das denn!?

weil das eine der Forderungen an XML-RPC war.

Lt. Spezifikation sind Name der remote aufzurufenden Methode und die zu übergebenden Parameter in XML zu verpacken und per HTTP zu übertragen. Nun, ich habe das mal ein bischen erweitert, statt Base64 für den Binary-Datentype, ermöglicht mein Serializer die Übertragung reiner Binaries (8 bit). Schließlich sind ja hin und wieder auch mal Dateien hochzuladen.

Da ich auch den serverseitig auszuführenden Code mitsende, braucht die Klasse auf dem Server nur noch ein paar Zeilen. Was nach Prüfung RequestMethod, Benutzername, Passwort übrigbleibt, siehe untenstehend (einschließlich einer ausführlichen Fehlerbehandlung).

        $self->param;
        my $bs = bSerialize->new; # Alternative XML::Simple
        my $binary = $self->{CGI}->rawdata;

        # Deserialisierung, Rückgewinnung der Datenstruktur
        # ein simpler Hash
        # für den wahlfreien Zugriff
        my $in = $bs->bin2av( \$binary );
        
        my $code = delete $in->{code};
        eval $code or die "Error Compile Code: $@\n";

        # der komplatte Code für die RPC Klasse
        # wurde mitgesendet, erstelle Instanz
        my $rpc = RPC->new;

        my $methodname = delete $in->{methodname};
        my $coderef = $rpc->can($methodname) 
            or die "Unknown methodname\n";

        # Mit in %$in verbleibenden Parametern
        # wird die namentlich übergebene Methode aufgerufen
        $self->{CONTENT} = $rpc->$coderef(%$in) 
            or die "Error execute method: $@\n";

Zum Vergleich hab ich mir mal xmlrpc.php für wp angeguckt. Allein, was tausende WordPress-Kollegen an ungezählten Zeilen PHP-Code nur für den XML RPC Service entwickelt haben verdient meine Hochachtung ;)

Ebenfalls hochachtungsvolle Grüße ans Forum!