Hyperclient

Build Status Dependency Status Code Climate

Hyperclient is a Hypermedia API client written in Ruby. It fully supports JSON HAL.

Usage

The examples in this README use the Splines Demo API running here.

API Client

Create an API client.

require 'hyperclient'

api = Hyperclient.new('https://grape-with-roar.herokuapp.com/api')

By default, Hyperclient adds application/json as Content-Type and Accept headers. It will also send requests as JSON and parse JSON responses. Specify additional headers or authentication if necessary. Hyperclient supports Basic, Token or Digest auth as well as many other Faraday extensions.

api = Hyperclient.new('https://grape-with-roar.herokuapp.com/api').tap do |api|
  api.digest_auth('username', 'password')
  api.headers.update('Accept-Encoding' => 'deflate, gzip')
end

Resources and Attributes

Hyperclient will fetch and discover the resources from your API.

api.splines.each do |spline|
  puts "A spline with ID #{spline.uuid}."
end

The splines example above followed a link called "splines". While you can, you do not need to specify the HAL navigational structure, including links or embedded resources. Hyperclient will resolve these for you. If you prefer, you can explicitly navigate the link structure via _links. In the following example the "splines" link leads to a collection of embedded splines. Invoking api.splines is equivalent to api._links.splines._embedded.splines.

api._links.splines

Templated links require variables to be expanded. For example, the demo API has a link called "spline" that requires a spline "uuid".

spline = api.spline(uuid: 'uuid')
puts "Spline #{spline.uuid} is #{spline.reticulated ? 'reticulated' : 'not reticulated'}."

Invoking api.spline(uuid: 'uuid').reticulated is equivalent to api._links.spline._expand(uuid: 'uuid')._resource._attributes.reticulated.

Curies

Curies are named tokens that you can define in the document and use to express curie relation URIs in a friendlier, more compact fashion. For example, the demo API contains very long links to images that use an "images" curie. Hyperclient handles curies and resolves these into full links automatically.

puts spline['image:thumbnail'] # => https://grape-with-roar.herokuapp.com/api/splines/uuid/images/thumbnail.jpg

Attributes

Resource attributes can also be accessed as a hash.

puts spline.to_h # => {"uuid" => "uuid", "reticulated" => true}

The above is equivalent to spline._attributes.to_h.

HTTP

Hyperclient uses Faraday under the hood to perform HTTP calls. You can call any valid HTTP method on any resource.

For example, you can examine the API raw JSON by invoking _get and examining the _response.body hash.

api._get
api._response.body

Other methods, including _head or _options are also available.

spline = api.spline(uuid: 'uuid')
spline._head
spline._options

Invoke _post to create resources.

splines = api.splines
splines._post(uuid: 'new uuid', reticulated: false)

Invoke _put or _patch to update resources.

spline = api.spline(uuid: 'uuid')
spline._put(reticulated: true)
spline._patch(reticulated: true)

Invoke _delete to destroy a resource.

spline = api.spline(uuid: 'uuid')
spline._delete

Faraday Connection

You can access the Faraday connection directly to add middleware by calling connection on the entry point. As an example, you could use the faraday-http-cache-middleware.

api.connection.use :http_cache

Reference

Hyperclient API Reference.

Contributing

Hyperclient is work of many people. You're encouraged to submit pull requests, propose features and discuss issues. See CONTRIBUTING for details.

License

MIT License, see LICENSE for details. Copyright 2012-2014 Codegram Technologies.