Hyperclient
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
Links and Embedded Resources
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
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.
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
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.


