A streaming REST client for Ruby that uses libcurl
Features
-
rest-client like API
-
Streaming API allows the caller to be handed chunks of the response while it’s being received
How to install
Install it like any other gem hosted at the Githubs like so:
(more instructions here: gems.github.com)
sudo gem install brianmario-streamly
Example of use
A basic HEAD request
Streamly.head('www.somehost.com')
Or streaming
Streamly.head('www.somehost.com') do |header_chunk|
# do something with header_chunk
end
You can also pass a Hash of headers
Streamly.head('www.somehost.com', {"User-Agent" => "all your base are belong to us"})
A basic GET request
Streamly.get('www.somehost.com')
Or streaming
Streamly.get('www.somehost.com') do |body_chunk|
# do something with body_chunk
end
You can also pass a Hash of headers
Streamly.get('www.somehost.com', {"User-Agent" => "all your base are belong to us"})
A basic POST request
Streamly.post('www.somehost.com', 'blah=foo')
Or streaming
Streamly.post('www.somehost.com', 'blah=foo') do |body_chunk|
# do something with body_chunk
end
You can also pass a Hash of headers
Streamly.post('www.somehost.com', 'blah=foo', {"User-Agent" => "all your base are belong to us"})
A basic PUT request
Streamly.put('www.somehost.com', 'blah=foo')
Or streaming
Streamly.put('www.somehost.com', 'blah=foo') do |body_chunk|
# do something with body_chunk
end
You can also pass a Hash of headers
Streamly.put('www.somehost.com', 'blah=foo', {"User-Agent" => "all your base are belong to us"})
A basic DELETE request
Streamly.delete('www.somehost.com')
Or streaming
Streamly.delete('www.somehost.com') do |body_chunk|
# do something with body_chunk
end
You can also pass a Hash of headers
Streamly.delete('www.somehost.com', {"User-Agent" => "all your base are belong to us"})
Benchmarks
Fetching 2,405,005 bytes of JSON from a local lighttpd server
-
Streamly: 0.011s
-
Shell out to curl: 0.046s
-
rest-client: 0.205s
Streaming, and parsing 2,405,005 bytes of JSON from a local lighttpd server
-
Streamly: 0.231s
-
Shell out to curl: 0.341s
-
rest-client: 0.447s
Special Thanks
There are quite a few extremely nice REST client libraries out there for Ruby today. I especially owe thanks to the following projects. Without them I probably would have never had the inspiration to even take the time to write this library. In Streamly, you’ll find snippets of code, API patterns and examples from all 3 of these projects. I’ll do my best to make sure I give credit where it’s due in the source. Please let me know if I’ve missed something!
-
rest-client - github.com/adamwiggins/rest-client
-
curb - github.com/taf2/curb
-
patron - github.com/toland/patron
And again, the Github crew for this amazing service!