RESTful JSONP
This is a Rails plugin (Railtie) that allows your existing RESTful controllers to work over JSONP.
REST is designed around the four HTTP request methods (GET
, POST
, PUT
, and DELETE
), but
JSONP requests are always GET
s. To get around this restriction, this Railtie lets you specify the
desired method in a special _method
parameter.
For example, to make a PUT
request to /users/1.json
, you would make a JSONP (GET
) request to
/users/1.json?_method=PUT
.
The plugin also adds a custom Responder for JSONP that automatically adds special behaviour to
respond_with
(via a custom display
method).
For JSONP requests handled with respond_with
:
:callback => param[:callback]
will be automatically added to therender
options- Error
:status
codes (e.g.:unprocessable_entity
) will be changed to:accepted
, since error responses cannot be handled by JSONP. To detect errors in JSONP responses check for anerror
attribute in the returned data.
Installation
First, install the gem:
gem install restful_jsonp
Then add this to your Rails app's Gemfile
:
gem 'restful_jsonp', :require => 'restful_jsonp/railtie'
Note that this only works for Rails 3. In principle you could try to swap in the RestfulJSONP::MethodOverride middleware into a Rails 2.3+ app, but this has not been tested.
To enable the custom JSONP Responder, add this to your ApplicationController
(or any
controller that you want to enable the responder for):
self.responder = RestfulJSONP::JSONPResponder
How it Works
The _method
functionality is built in to Rails (via Rack), but is normally only available for
POST
requests. This Railtie replaces the default Rack::MethodOverride
middleware with a slightly
altered version that checks for the _method
parameter regardless of whether it's in a POST
or GET
request.
Note that this functionality is enabled for all requests, regardless of whether they are done via JSONP or otherwise.
History
1.0.2
- Fixed error response processing in JSONPResponder
1.0.0
- Initial release