# rest-core <https://github.com/cardinalblue/rest-core>
by Cardinal Blue <http://cardinalblue.com>
I was talking about rest-core at <http://rubyconf.tw/2011>
* Video: <http://vimeo.com/groups/rubytw/videos/29590001>
(sorry that I was speaking Mandarin, not English! Slides are in
English though)
* Slide: <http://www.godfat.org/slide/2011-08-27-rest-core.html>
## DESCRIPTION:
Modular Ruby clients for REST APIs
There has been an explosion in the number of REST APIs available
today.
To address the need for a way to access these APIs easily and
elegantly,
we have developed [rest-core][], which consists of composable
middleware
that allows you to build a REST client for any REST API. Or in the
case of
common APIs such as Facebook, Github, and Twitter, you can simply use
the
built-in dedicated clients provided by rest-core.
[rest-core]: http://github.com/cardinalblue/rest-core
## INSTALLATION:
gem install rest-core
Or if you want development version, put this in Gemfile:
gem 'rest-core', :git => 'git://github.com/cardinalblue/rest-
core.git',
:submodules => true
## CHANGES:
### rest-core 0.4.0 -- 2011-09-26
### Incompatible changes:
* [dry] Now `RestCore::Ask` is renamed to `RestCore::Dry` for better
understanding. Thanks miaout17
* [client] Now `request` method takes an env and an app to make
requests,
instead of a weird requests array.
* [client] Now if you really want to disable something, for example,
disabling cache when the default cache is `Rails.cache`, you'll need
to
pass `false` instead of `nil`. This is because `nil` stands for
using
defaults in rest-core.
* [client] Defaults priorities are changed to:
per-request > instance variable > class defaults > middleware
defaults
See *test_client.rb* for more detailed definition. If you don't
understand
this, don't worry, since then this won't affect you.
### Compatible changes:
* [client] Introduced a new method `request_full` which is exactly the
same
as `request` but also returns various information from the app,
including
`RESPONSE_STATUS` and `RESPONSE_HEADERS`
* [client] Removed various unused, untested, undocumented legacy from
rest-graph.
* [error] Introduced `RestCore::Error` which is the base class for all
exceptions raised by rest-core
* [builder] Now `RestCore::Builder.default_app` is the default app
which
would be used for building clients without setting an app. By
default,
it's `RestClient`, but you can change it if you like.
* [builder] It no longer builds a @wrapped app. If you don't
understand this,
then this does nothing for you. It's an internal change. (or bug
fix)
* [wrapper] Now `RestCore::Wrapper.default_app` is the default app
which
would be used for wrapping middlewares without setting an app. By
default,
it's `Dry`, but you can change it if you like.
* [wrapped] Fixed a bug that force middlewares to implement `members`
method,
which should be optional. Thanks miaout17
* [facebook][rails_util] Now default cache is `Rails.cache` instead of
nil
* [simple] Added a Simple client, which only wraps RestClient
* [univeral] Added an Universal client, which could be used for
anything
* [flurry] Added a Flurry client, along with its `Flurry::RailsUtil`
* [mixi] Added a Mixi client
* [bypass] Added a Bypass middleware which does nothing but passing
env
* [oauth2_header] OAuth2Header is a middleware which would pass
access_token
in header instead of in query string.
* [common_logger] nil object would no longer be logged
* [json_decode] Do nothing if we are being asked for env (dry mode)
* [cache] Now default `:expires_in` is 600 down from 3600
* [middleware] Now not only query values would be escaped, but also
keys.
* [rib-rest-core] Introduced an interactive shell. You'll need [rib][]
to
run this: `rib rest-core`. It is using an universal client to access
arbitrary websites.