I have a Rails 2 app and I wand to provide an API for 3rd party
applications written on any language the customer uses.
My thoughts are that the best way of providing it is by taking
advantage of rails RESTfulness and let them perform CRUD actions on my
data through it. But I don’t seem to find many information on how to
achieve this.
I first want to develop .NET clients (or web service consumers)
because must of our customers use .NET. I did some prototypes and
could retrieve XML data, but I don’t seem to find a way of doing
inserts, updates and deletes.
What I get is a 422 http error from the rails server and I assume has
something to do with the Header.
Where can I find more information about this. More specificlly about
what the server is expecting to receive in the header and the message.
Also, if someone has experience on WCF and can point me out where to
find more valuable info it will be appreciated.
I have a Rails 2 app and I wand to provide an API for 3rd party
applications written on any language the customer uses.
My thoughts are that the best way of providing it is by taking
advantage of rails RESTfulness and let them perform CRUD actions on my
data through it. But I don’t seem to find many information on how to
achieve this.
Definitely. Your controller can provide an out-of-the-box API by
examining the HTTP accept header and returning XML. Rails wraps this
up for you automatically if you use the respond_to method in your
controller:
def index @things = Thing.find(:all)
respond_to do |format|
format.html # render template
format.xml { render :xml => @things.to_xml }
end
end
This example is a bit simplistic but demonstrates the principle of how
you can return XML instead of HTML based on the http header.
I first want to develop .NET clients (or web service consumers)
because must of our customers use .NET. I did some prototypes and
could retrieve XML data, but I don’t seem to find a way of doing
inserts, updates and deletes.
What I get is a 422 http error from the rails server and I assume has
something to do with the Header.
Where can I find more information about this. More specificlly about
what the server is expecting to receive in the header and the message.
Make sure you’re setting the accept and content-type headers correctly
to “text/xml” or “application/xml”. That’s the clue Rails needs to
trigger the right action in your respond_to block. We actually have a
chapter on doing this exact thing in our upcoming book, Rails for .NET
Developers (http://pragprog.com/titles/cerailn).
Also, if someone has experience on WCF and can point me out where to
find more valuable info it will be appreciated.
but when trying to perform a POST to http://172.16.30.117:3000/resources.xmlpassing the new XML with values
in it as the request content it returns the
422 error. I see that the header coming from the ruby server has session
info and stuff which I’m assuming I have to use for posting back.
I also found an open source WPF project that may help me as a guide:
Will your chapter cover this subject? What will the integrating with
.NET
cover? Looking forward to see your book and also coperate with what
myself
and my team achieve.
I’m not sure about how you want to write the client but you can also
include a request param “_method” and give it the corresponding HTTP
method. (PUT, POST, DELTE etc.)
I found out that what was not letting me do the POST/PUT’s is:
“protect_from_forgery”
because of the authenticity token needed.
Now I need to know if there’s a workaround for this without having to
stop using this method.
Thanks!
Hi,
I came across this problem and the solution is quite simple. Bumping
this topic for other poor googling souls.
Just put skip_before_filter :verify_authenticity_token in your
controller.
See the docs for ActionController::RequestForgeryProtection for more
info; you could also override that method instead if you wanted to do
something specific for non-verified clients.
I came across this problem and the solution is quite simple. Bumping this
topic for other poor googling souls.
Just put skip_before_filter :verify_authenticity_token in your controller.
See the docs for ActionController::RequestForgeryProtection for more info; you
could also override that method instead if you wanted to do something specific
for non-verified clients.
So does that leave the forgery protection in place for browser clients?