Forum: Ruby on Rails Rails and REST Example

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
8396048b39279996e7ee6c1acdac2bf7?d=identicon&s=25 Berlin Brown (Guest)
on 2006-03-19 19:31
(Received via mailing list)
Does anyone have an example of using REST and submitting data through
a POST operation and then possibly loading that data with
activerecord.

Also, if you have client code written in another language (java,.net,
C), would you have that code as well?

Berlin Brown
Ea627ef000ec92c6cdd5a4c14075e740?d=identicon&s=25 Dan Kubb (Guest)
on 2006-03-19 20:55
(Received via mailing list)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Berlin,

> Does anyone have an example of using REST and submitting data through
> a POST operation and then possibly loading that data with
> activerecord.

I just released a RESTful Rails plugin on RubyForge this week that
makes it easier to write RESTful applications.

Here's an example of a controller written with this plugin:

   class BookController < ApplicationController
     include RestController::Base

     def new
       conditions << @book = Book.new

       resource.get(:cache_as => :public, :for => 1.hour)
     end

     def collection
       conditions << @books = Book.find(:all)

       resource.post do
         @book = @books.build(params[:book])
         if @book.save
           render_post_success :action => 'by_id', :id => @book
         else
           render :action => 'new', :status => HTTP::Status::BAD_REQUEST
         end
       end
     end

     def by_id
       conditions << @book = Book.find(params[:id])

       resource.put do
         @book.attributes = params[:book]
         if @book.save
           render_put_success
         else
           render :status => HTTP::Status::BAD_REQUEST
         end
       end

       resource.delete do
         if @book.destroy
           render_delete_success :id => nil
         else
           render :status => HTTP::Status::BAD_REQUEST
         end
       end
     end
   end

As you can see the code resembles normal Rails code pretty closely.  The
main difference is how the "resource" object is used as a sort of
case statement and executes the specific block of code if the request
method matches it.

This could've been written as just a case statement, BUT this is doing
a couple of important things behind the scenes...  If the method isn't
handled, the controller action will return a 405 Method Not Allowed
response.  Plus if someone submits an OPTIONS request, it'll respond
properly and return the names of the allowed methods in the Allow
response header.  You could roll this by hand for each case statement,
but this cuts down on the duplicate code and frees you from having to
remember to do it every single time.

If you're looking for installation instructions or more information
here's the announcement I originally posted on the microformats-rest
list:

http://microformats.org/discuss/mail/microformats-...
000158.html

I highly encourage anyone who's interested in REST to read the post
above.  There's alot of neat things happening in the plugin, like
conditional request handling and easier caching controls.  I have
alot more planned too.

When I do my first "point release" I'll send an update to the Rails
mailing list.. In the mean time give it a try and if you or anyone
else has any questions feel free to contact me either on or off list.

- --

Thanks,

Dan
__________________________________________________________________

Dan Kubb
Autopilot Marketing Inc.

Email: dan.kubb@autopilotmarketing.com
Phone: 1 (604) 820-0212
Web:   http://autopilotmarketing.com/
vCard: http://autopilotmarketing.com/~dan.kubb/vcard
__________________________________________________________________



-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (Darwin)

iD8DBQFEHbcP4DfZD7OEWk0RAm2rAKCCGy8pkdgXUbnIW48jpYNtT9AfQACcCpz3
HtdyC11GGKXD39nLXzaWNiQ=
=6/GS
-----END PGP SIGNATURE-----
This topic is locked and can not be replied to.