Napa
The Napa gem is a simple framework for building APIs with Grape. These features include:
- Generator
- Console
- Identity
- Logging
- Deployment
- Grape Specific Features (Cache management and Route inspection) i.e.
rake routes
Installation
Napa is available as a gem, to install it run:
gem install napa
Or, if you're using Bundler, add it to your Gemfile:
gem 'napa'
And run:
$ bundle install
Getting Started
Napa comes with a useful generator to quickly scaffold up a new project. Simply run:
$ napa new your_project_name
This will generate a basic application framework for you. It includes everything you need to get started including a Hello World API.
1) To get started, run Bundler to make sure you have all the gems for the project:
$ bundle install
2) Then, make sure your database connections are setup correctly. The configuration is set in the .env
and .env.test
. Then create your database by running:
$ rake db:create
3) Now you're ready to start up the server:
$ shotgun
4) Once the server is started, run the following command to load your service in a browser:
$ open http://127.0.0.1:9393/hello
...and you should see:
{
message: "Hello Wonderful World!"
}
5) We've also provided a sample spec file. You can run the tests by running:
RACK_ENV='test' rake db:test:prepare
rspec spec
Usage/Features
Console
Similar to the Rails console, load an IRB sesson with your applications environment by running:
ruby console
Identity
The Identity module exists to provide and interface to get information about the application. For example:
Napa::Identity.name
=> Returns the name of the app defined by ENV['SERVICE_NAME']
.
Napa::Identity.hostname
=> Returns the name of the host running the application.
Napa::Identity.revision
=> Returns the current revision from Git.
Napa::Identity.pid
=> Returns the current running process id.
Logger
The Logger modules is used to create a common log format across applications. The Logger is enable via a rack middleware by adding the line below to your config.ru
file:
use Napa::Middleware::Logger
You can also enable the logger for ActiveRecord by adding the following line to an initializer:
ActiveRecord::Base.logger = Napa::Logger.logger
Napa::Logger.logger
returns a Singleton instance of the Logging object, so it can be passed to other libraries or called directly. For example:
Napa::Logger.logger.debug 'Some Debug Message'
Deployment
At Belly we leverage a git based deployment process, so we've included some rake tasks we use to automate deployments. These tasks will essentially just tag a commit with production
or staging
so that it can be picked up by a separate deployment process.
The tasks currently available are:
rake deploy:staging
rake deploy:production
Please Note: These tasks rely on two environment variables - GITHUB_OAUTH_TOKEN
and GITHUB_REPO
. For more information, see Environment Variables below.
Grape Specific Features
At Belly we use the Grape Micro-Framework for many services, so we've included a few common features.
Cache Managment
Cache control headers are sent with Grape API responses to prevent clients from caching responses unexpectedly. This feature is enabled by default, so you don't have to make any changes to enable it.
Route Inspection
A rake task is included to give you a Rails style list of your routes. Simpley run:
rake routes
Environment Variables
Napa expects to find some environment variables set in your application in order for some features to work. A list is below:
SERVICE_NAME
The name of your app or service, used by Identity and as a label for your logs
GITHUB_OAUTH_TOKEN
Used to grant access to your application on Github for deployment tagging
GITHUB_REPO
Your application's Github repo. i.e. bellycard/napa
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
Todo/Feature Requests
- Add specs for logger and logging middleware