Re: about request route
风河 <[email protected]>
| Newsgroups | gmane.comp.apache.mod-perl |
|---|---|
| Message-ID | <1502184925.3069840.1066600120.669DC7A0@webmail.messagingengine.com> |
Anyway I have tranformed this opensource project:
https://github.com/skx/dns-api.org
which is powered by dancer, to mod_perl.
the API address:
http://h.dnsbed.com/$type/$host
which is entirely mod_perl backend. :)
On Tue, Aug 8, 2017, at 09:45 AM, 风河 wrote:
> Thanks for all helps.
>
> On Mon, Aug 7, 2017, at 08:26 PM, André Warnier (tomcat) wrote:
> > On 07.08.2017 13:18, 风河 wrote:
> > > Hi,
> > >
> > > for this like request:
> > > curlhttp://dns-api.org/AAAA/dns-api.org
> > >
> > > in Dancer we could write:
> > >
> > > get '/:type/:domain/?' => sub {
> > >
> > > my $rtype = params->{ 'type' };
> > > my $domain = params->{ 'domain' };
> > >
> > >
> > > But in a MP handler, how could we get the similiar result, treating request path as
> > > GET/POST arguments?
> > >
> >
> > Well, fundamentally you could not treat the request path, transparently,
> > as a GET/POST
> > argument. That is precisely the kind of thing which a framework such as
> > Dancer allows you
> > to do : "abstracting" the fundamental difference which exists at the HTTP
> > level (and the
> > Apache httpd level) between a request path and e.g. the parameters in a
> > query string, and
> > make them "kind of look the same" to an application, using some elegant
> > syntax.
> >
> > In a mod_perl handler, you would do this :
> >
> > my $r = shift; # Request object
> > my $uri = $r->uri; # gets "/AAAA/dns-api.org"
> > my ($nothing,$type,$domain) = split('/',$uri);
> >
> > # or, if you insist on treating the HTTP request path parts as
> > "arguments" :
> > my @args = split('/',$uri);
> > @args = grep(!~#/#,@args);
> > my $params = {
> > 'type' => $args[0],
> > 'domain' => $args[1],
> > };
> > # (I'm sure there is a more elegant way to do this)
> >
> > mod_perl is not a framework. It gives you access from perl to the Apache
> > internals, as
> > they are deep down, but it does not "abstract" anything. For Apache
> > "/AAAA/dns-api.org" is
> > a request URI, it is not "GET/POST arguments". If this URI does not
> > contain a "?", then
> > the whole URI is a path. If it does contain a "?", then the part before
> > the "?" is a path,
> > and the part after it is a query-string, which may or may not contain
> > key/value pairs
> > which could be "parameters". Those are the underlying "apache objects",
> > when apache has
> > parsed the request.
> > mod_perl gives you access to these URI, path, and query-string objects of
> > apache, but it
> > does not "abstract" them further.
> >
> > Dancer (and other frameworks) are different : their users want some way
> > by which they can
> > treat path components as "arguments" ? so let's provide them with some
> > way of doing this,
> > elegantly if possible. But behind the scenes, they do exactly as above.
> > It's just that as
> > a user, you don't see that.
> >
> >