Forwarded message:
From: Timothy Appnel <t...@appnel.com>
> To: CGI Application <cgiapp@lists.erlbaum.net>
> Date: Tuesday, May 10, 2011 2:38:03 PM
> Subject: REST tunneling in CGI::Application::Dispatch
> 
>  I've started a branch to implement REST tunneling in 
> CGI::Application::Dispatch and wanted to post it here for some comment while 
> its still in progress.
> 
> Here is the issue as described in RESTful Web Services book: 
> http://is.gd/8PSPLE
> > Not all clients support HTTP PUT and DELETE. The action of an XHTML 4 form 
> > can only be GET or POST, and this had made a lot of people think that PUT 
> > and DELETE aren't real HTTP methods. Some firewalls block HTTP PUT and 
> > DELETE but not POST. If the server supports it, a client can get around 
> > these limitations by tunneling PUT and DELETE requests through overloaded 
> > POST. There's no reason these techniques can't work with other HTTP actions 
> > like HEAD, but PUT and DELETE are the most common.What I've started 
> > implementing is essentially this:
> > I recommend a tunneling technique pioneered by today's most RESTful web 
> > frameworks: include the "real" HTTP method in the query string. Ruby on 
> > Rails defines a hidden form field called '_method' which references the 
> > "real" HTTP method."
> 
> I've implemented a new boolean parameter auto_rest_tunneling that when true, 
> will get its "real" HTTP method from the '_method' if one exists.
> 
> To do that was a bit tricky though because at the spot where the run mode is 
> determined, the application class has not been instantiated to read that 
> parameter with its designated CGI object.
> 
> I was trying to keep my changes to a minimum so I settled on creating a 
> subroutine that mode_param can use to complete the tunneling if dispatch 
> detects a possible REST tunneling situation. This REST tunneling routine is 
> passed on to the private _run_app method where I had to add a bit of logic so 
> that routine doesn't build the generic
> mode_param subroutine over top of it.
> 
> Besides getting some general feedback I had one specific question to where 
> I'm at here:
> https://github.com/tima/CGI--Application--Dispatch/commit/1e906a01f9470b3b15894e4c77e10c0e8468c86b
> 
> [BTW: I sent this message to Mike and Mark in advance. Mark requested links 
> to other implementations which I provided in the commit notes.]
> 
> In line 705 (was line 690) of my addition there is a check for illegal 
> characters in the run mode. This doesn't work when REST tunneling is being 
> used so I added the logic to skip that.
> 
> Is that going to be a problem? I was thinking of moving that logic out of 
> _run_app and ahead of auto_rest functions in the dispatch sub. Perhaps I 
> missing a case where that is necessary. If I can make that move and not break 
> anything the mode_param sub routine generation could be consolidated in to 
> the dispatch method also.
> 
> Enough from me. Thoughts?
> 
> <tim/>
> 
> --
> Timothy Appnel
> Principal, The Appnel Group, http://appnel.com/
> Director, Open Melody Software Group, http://openmelody.org
> > 
> 
> 
> 
> 
> 
> 
> 


#####  CGI::Application community mailing list  ################
##                                                            ##
##  To unsubscribe, or change your message delivery options,  ##
##  visit:  http://www.erlbaum.net/mailman/listinfo/cgiapp    ##
##                                                            ##
##  Web archive:   http://www.erlbaum.net/pipermail/cgiapp/   ##
##  Wiki:          http://cgiapp.erlbaum.net/                 ##
##                                                            ##
################################################################

Reply via email to