=begin
> I am barely familiar with both REST and Camping, and I'd like
> to explore some RESTful Camping as a way to learn both.


i still don't know exactly what REST is (maybe there is no exact definition), 
part of it is mapping of methods to URIs for a HTTP RPC

camping makes playing with all this easy

some "REST" examples i see involve query strings, but these can become rather 
ugly and unreadable/hackable

in camping you may do something like
=end

module Aero::Controllers
  class Foil < R '/foil/([^/]+)/([^/]+)/([^/]+)'
    def get geo, angle, mach
      # do some math here and return results
    end
  end

=begin
the last line in the 'get' method is implicitly returned, it can be text, or a 
call to a view method..

you would do something like GET /foil/1/90.000/3 in this case,

or perhaps query string is more your type:

   GET /foil?mach=3&angle=37.000

=end
  class Foil
    def get
      lift = input.mach * input.angle # etc
    end
  end

=begin

i think the ST of REST stands for "state transfer" - which is more accurate and 
easy in JSON than query-string vars:

in JS+jQuery:

function rpc(o) {
  $.ajax($.extend({
        url      : '/foil',
        type     : "post",
        contentType: 'application/json',
        dataType : 'json',
        data:$.toJSON({mach: 3, forces: [0.00024, 1.33343, 6.777156]}),
        processData: false,
        beforeSend: function(xml) {
            xml.setRequestHeader("Accept", "application/json");
            }
    },o))
}

in camping: 
=end
  class Foil
    def post
      @mach, @f = input.mach, input.forces
    end
  end
end

module Aero
  def service *a
    if @method == "post" and @env.CONTENT_TYPE == 'application/json'
      @input = JSON.parse(@in.read)
    end
    super *a
  end
end

=begin

and now you can share any object between ECMAscript and Ruby, as long as you 
stick to floats, ints, strings, arrays, hashes..

what business does your REST server have generating HTML anwyays? its there 
just to provide calculating service..

=end

module Aero::Controllers
  class Foil
    def post
      @headers['Content-Type'] = @env[:HTTP_ACCEPT]
      # do some heavy lifting      
      {:lift => lift, :drag => drag, :pitch => pitch}.to_json
    end
  end
end

=begin

because you set 'dataType' to 'json' in jQuery's AJAJ options, you get the 
object passed to the success callback:

rpc({success: function(r){
 $("#yaw").text(r.pitch * r.skew)
}})

this gives you an overview of 1 old fashioned (querystring) 1 camping-fashioned 
(custom URIs defined via regex) and 1 neo-classical (JSON RPC via post) means 
to REST while camping. i've skipped over POST and HTML forms. since its 
identical to querystring except the string is in the POST body instead of 
appended to the URL. ive also skipped custom methods (you could 'def foil' in 
your controller if you only wanted it to respond to FOIL requests intead of GET 
requests) which may be useful if you dont want your app to appear to work to 
RFC compliant web browsers..


cheers! and happy camping.
=end
_______________________________________________
Camping-list mailing list
Camping-list@rubyforge.org
http://rubyforge.org/mailman/listinfo/camping-list

Reply via email to