Ich versuche eine RESTful-API in Perl zu implementieren. Meine derzeitige Idee ist es, einfach path_info mit einer Regex zu analysieren und dann die Anfrage an die entsprechende Subroutine zu senden, die dann JSON, XML oder sogar XHTML für die angeforderte Ressource ausspuckt.
Um beispielsweise Informationen über den Benutzer 1234 abzurufen, sollte der REST-konforme Client ihn unter
findenUnten ist der Skelett-Code meines ersten Versuches, eine RESTful-API zu implementieren:
model.pl :
%Vor%Bevor ich fortfahre, möchte ich von erfahrenen Perl-Hackern wissen, ob ich die Grundidee richtig verstanden habe und ob es ernsthafte Mängel in Bezug auf die Leistung gibt.
Ich kann mir vorstellen, dass der if / else-Block nach einiger Zeit sehr groß werden würde.
Ich freue mich darauf, Ihre Ansichten zu hören, um diesen Code besser zu machen.
Ich würde etwas wie CGI :: Application :: Dispatch verwenden, es ermöglicht mir, eine Dispatch-Tabelle mit Variablen und REST-Methoden zu erstellen, und Sie können CGI- und CGI :: Application-Module von CPAN verwenden. Zum Beispiel:
%Vor%(oder Sie können auto_rest oder auto_rest_lc verwenden)
Sie können eine separate CGI :: Application-Klasse für jede Art von Sache verwenden (oder verwenden Sie einfach Klassen in Ihren cgi-app-Controller-Klassenmethoden).
CGI :: Anwendung kommt auch mit Plugins für die Ausgabe von XML, JSON oder Text aus Vorlagen generiert.
cgi-app (und c :: a :: d) sind CGI-Anwendungen und können mit (wenig oder) keiner Änderung unter CGI, FastCGI oder mod_perl verwendet werden. C :: A :: D ist auch standardmäßig ein mod_perl PerlHandler.
Für leichte REST-APIs würde ich Mojolicious betrachten. Das Anforderungs-Routing ist wirklich unkompliziert und der eingebaute JSON-Renderer und User-Agent macht die Entwicklung einfacher REST-APIs nach meiner Erfahrung sehr einfach.
Wenn Ihre App relativ klein ist, kann Mojo :: Lite Ihren Anforderungen entsprechen. Zum Beispiel können Sie vielleicht so etwas tun:
%Vor%Warum nicht das bereits implementierte Modul Apache2 :: REST ? Es ist alles da.