[Dancer-users] a REST question immediately followed by a Dancer-implementation question
Mr. Puneet Kishor
punk.kish at gmail.com
Fri Sep 30 18:32:12 CEST 2011
On Sep 30, 2011, at 11:21 AM, Daniel Perrett wrote:
> You want code which will infer what your code is requiring? Sounds tricky,
Perhaps.
> and I doubt you want to run some sort of meta-parser every time someone
> visits '/rest'.
Why not? Without any basis for saying so, I would assert that it wouldn't be very expensive. All depends on how complicated this meta-parser ends up being.
>
> Wouldn't it be easier to write the "resources" data structure (as you have
> below),
Not necessarily easier, because ...
> maybe as a config file, so you know what your application's
> interface is, and use that to a) generate responses to /rest, b) maybe
> generate some documentation, (especially if you include that in the data
> structure), and c) validate your parameters in the methods, e.g. creating
> a hash(ref) guaranteed to contain all those and only those parameters
> specified in the config (and using that hash(ref) thereafter instead of
> Damcer's parameter function), and then you can guarantee your code
> complies with the specification.
for the simple reason that my "config" file and my application interface will quickly get out of sync (unless I generate one from the other, which is the same as running the meta-parser). Besides, I am writing the app... writing the interface would double my work.
If I look at my app code, I can see the interface, so I should be able to infer it programmatically as long as I don't get too ambitious.
Ideally, I would like to just add the plugin, and magically get a new route that tells me all the available routes and their params and whether or not those params are required or optional, etc.
I looked at the source code for Dancer::Plugin::SiteMap and have already modified it to basically do what I want it to do. It writes out all the routes in JSON format. I have to add the params validate code (I am going ahead and using Params::Validate as that seems to be highly rated). If the plugin ends up being not-too-rough, I would like to release it so perhaps someone else can use it or improve on it.
Which brings me to an associated question -- when I get to the point where I can release this modified version of D:P:SiteMap, should I release it as a different plugin? It is clearly generously inspired by that plugin, but is aspiring to do something a bit different. What would be the right thing to do?
>
> Daniel
>
>
>
> From: "Mr. Puneet Kishor" <punk.kish at gmail.com>
> To: dancer-users <dancer-users at perldancer.org>
> Date: 30/09/2011 14:51
> Subject: [Dancer-users] a REST question immediately followed by a
> Dancer-implementation question
> Sent by: dancer-users-bounces at perldancer.org
>
>
>
> So, I have a lot of methods such as
> get '/foo' => { .. };
> get '/bar' => { .. };
> get '/baz' => { .. };
> get '/qux' => { .. };
>
> All the above methods are reachable via a browser in which they depict
> some visual representation of the data.
>
> Most of the above methods have their '.:format' counterparts, mostly
> returning JSON packets when reached either via the browser or via the
> command line.
>
> All the methods above return something by default or modified by
> parameters. So, "http://server/app/foo" may work, or may require some
> parameters as in "
> http://server/app/foo?age=27&before=yesterday&for=rascals"
>
> I would like to implement a "meta" method, say
>
> get '/rest' => { .. };
>
> which should return a listing of all the methods above, along with their
> parameters, if any, and whether those parameters are optional or required.
>
> http://server/app/rest
> {"resources": [
> {"name": "foo, "params": [
> {"required": [
> {"name":
> "age", "type": "int"}
> ]},
> {"optional": [
> {"name":
> "before", "type": "string"}
> {"name":
> "for", "type": "string"}
> ]},
> ]}
> ]}
>
> In other words, this meta method returns all the resources available at
> the http://server/app.
>
> Of course, I could code this for each app, but it would be nice to
> automate it.
>
> Suggestions? Ideas?
>
>
> --
> Puneet Kishor
More information about the Dancer-users
mailing list