Daylight extends Rails and ActiveResource to allow your client API to perform akin to ActiveRecord
Features include those like ActiveRecord such as scopes, find_by
lookups,
calling associations on server-side models, using through associations, and
the ability to chain queries. Eases requesting complex queries on your Rails
models using remoted
methods.
Typical ActiveResource functionality:
API::Post.all # index request
API::Post.published # client-based association
API::Post.find(1) # show request
Daylight adds to ActiveResource with chained queries:
API::Post.where(author_id: 1) # simple query
API::Post.where(author_id: 1).first # chained query
API::Post.where(author_id: 1).published # chained query with scope
API::Post.where(author_id: 1).published.recent # chained query with multiple scopes
API::Post.where(author_id: 1).limit(10).offset(20) # chained query with limit and offset
API::Post.where(author_id: 1).order(:date) # chained query with ordering
API::Post.find_by(slug: '100-best-albums-2014') # find_by lookup gets first match
Daylight can also chain queries on an ActiveResource's association. All of the chain queries above can be used to refine searches on associations:
API::Post.first.comments # lookup and association
API::Post.first.comments.where(user_id: 2) # query on lookup's association
API::Post.first.comments.where(user_id: 2).first # chained query on
API::Post.first.comments.where(user_id: 2).edited # chained query with scope
# etc.
Daylight allows you to return collections from complex queries on your model:
API::Post.first.top_comments
Daylight packages API query details in one request when it can to lower the network overhead.
Daylight allows you to query for a record before initializing or creating it
using ActiveRecord's familiar first_or_create
and first_or_initialize
methods.
post = API::Post.new(slug: '100-best-albums-2014')
post.author = API::User.find_or_create(username: 'reidmix')
post.save
The last query to the database uses Rails' accepts_nested_attributes_for
and the User
could have easily been setup with find_or_initialize
to
reduce the number of server-side queries.
More information can be found in the Daylight Users Guide.
-
Install Daylight both on your server and your client.
gem install daylight
-
On your server, add a rails initializer:
require 'daylight/server'
-
On your client, setup your API:
Daylight::API.setup!(endpoint: 'http://localhost/')
-
Use your client models to query your API!
Ah, but we have to develop our API and client models:
-
Develop your Rails models, controllers, and routes like you do today. Add a serializer for each model in the API. Daylight provides additions to simplify adding features to your controllers and routes.
-
Develop your client models using Daylight's extensions to ActiveResource. Daylight provides Mocks to aid in full stack testing of your client models.
-
Consider versioning your client models and distribute them using a gem. Daylight supports versioned APIs and has facilities available for your development.
-
More information can be found on:
Daylight is released under the Apache License. First released on June 30th, 2014.