I'd like to recommend I submitted a patch for I guess you could argue that these features break the metaphor, that PUTting to a URI isn't really "opening" it, or that it's like opening a file for write access and you should have to write the body data inside a code block the way you do for a file.[0] But c'mon, let's have that argument. I don't want to have to keep telling everyone about fake reimplementations of I'd also like to add caching support to [0] I doubt this is really the intent of Mon Nov 06 2006 11:30 open-uri ought to be a REST client:
I spent a lot of time and used a lot of pages in the Ruby Cookbook showing how to use
Net:HTTP
to build more and more capable HTTP clients that hid the hairiness of Net:HTTP
. But in truth the open-uri
library, which we only covered a little, supports almost every feature you could want from an HTTP client library: custom headers, proxies, transparent HTTPS with cert validation, even automatic handling of the redirects it's okay to handle automatically. And the interface couldn't be simpler: it overloads Kernel#open
so that you can open an HTTP request like a file, and read the response like data from a filehandle.
open-uri
for everything, including as a client for REST web services, but there are two big features it's missing. You can't use any HTTP method other than GET, and you can't send any body data (which makes sense if GET is the only supported method). Lately I've been building on my Cookbook work, coming closer and closer towards a general HTTP client library for Ruby, but really all I'm doing is reinventing open-uri
with two extra features. It would be a lot better to just add those features to open-uri
.
open-uri
on this topic a while back but have yet to get any response, even from people saying it's stupid. I'm writing REST clients with open-uri
under the assumption that that'll work by the time the book is published. For instance, here's some code from my Amazon S3 client:
# Saves this bucket to S3.
def save
open(uri, :method => :put)
return self
end
# Deletes this bucket and all its contents.
def delete
open(uri, :method => :delete)
end
open-uri
just so they can write REST clients in Ruby. There's also precedent, like XMLHttpRequest.open
in Javascript.
open-uri
, like the caching support in Joe Gregorio's httplib2
for Python. But I'll wait on that until the fate of this simpler patch is decided.
open-uri
, since right now it doesn't support HEAD either. I think the intent of open-uri
is to make it trivial to make an HTTP request from Ruby.