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 requestAPI::Post.published# client-based associationAPI::Post.find(1)# show requestDaylight adds to ActiveResource with chained queries:
API::Post.where(author_id: 1)# simple queryAPI::Post.where(author_id: 1).first# chained queryAPI::Post.where(author_id: 1).published# chained query with scopeAPI::Post.where(author_id: 1).published.recent# chained query with multiple scopesAPI::Post.where(author_id: 1).limit(10).offset(20)# chained query with limit and offsetAPI::Post.where(author_id: 1).order(:date)# chained query with orderingAPI::Post.find_by(slug: '100-best-albums-2014')# find_by lookup gets first matchDaylight 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 associationAPI::Post.first.comments.where(user_id: 2)# query on lookup's associationAPI::Post.first.comments.where(user_id: 2).first# chained query onAPI::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_commentsDaylight 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.saveThe 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 daylightOn 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.