0.03
Repository is archived
No commit activity in last 3 years
No release in over 3 years
Great Faraday stack for consuming all kinds of APIs
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

< 0.8, >= 0.6
 Project Readme

Über Stack

Notice: faraday-stack has been deprecated and its middleware moved to faraday_middleware.


Faraday is an HTTP client lib that provides a common interface over many adapters (such as Net::HTTP) and embraces the concept of Rack middleware when processing the request/response cycle.

“Faraday Stack” is an add-on library that implements several middleware (such as JSON and XML parsers) and helps you build an awesome stack that covers most of your API-consuming needs.

Boring example:

require 'faraday_stack'

response = FaradayStack.get 'http://google.com'

response.headers['content-type']  #=> "text/html; charset=UTF-8"
response.headers['location']      #=> "http://www.google.com/"
puts response.body

Awesome example:

conn = FaradayStack.build 'http://github.com/api/v2'

# JSON resource
resp = conn.get 'json/repos/show/mislav/faraday-stack'
resp.body
#=> {"repository"=>{"language"=>"Ruby", "fork"=>false, ...}}

# XML resource
resp = conn.get 'xml/repos/show/mislav/faraday-stack'
resp.body.class
#=> Nokogiri::XML::Document

# 404
conn.get 'zomg/wrong/url'
#=> raises Faraday::Error::ResourceNotFound

Features

  • parses JSON, XML & HTML
  • raises exceptions on 4xx, 5xx responses
  • follows redirects

To see how the default stack is built, see "faraday_stack.rb".

Optional features:

  • encode POST/PUT bodies as JSON:

      conn.post(path, payload, :content_type => 'application/json')
    
  • add Instrumentation middleware to instrument requests with ActiveSupport

      conn.builder.insert_after Faraday::Response::RaiseError, FaradayStack::Instrumentation
    
  • add Caching middleware to have GET responses cached

      conn.builder.insert_before FaradayStack::ResponseJSON, FaradayStack::Caching do
        ActiveSupport::Cache::FileStore.new 'tmp/cache',
          :namespace => 'faraday', :expires_in => 3600
      end
    
  • mount Rack::Cache through RackCompatible middleware for HTTP caching of responses

      conn.builder.insert_after FaradayStack::FollowRedirects, FaradayStack::RackCompatible,
        Rack::Cache::Context,
          :metastore   => "file:/var/cache/rack/meta",
          :entitystore => "file:/var/cache/rack/body"