grape-doorkeeper icon indicating copy to clipboard operation
grape-doorkeeper copied to clipboard

Get to API building quickly

Grape-Doorkeeper

Create an awesome versioned API, secured with OAuth2 and automatically documented.

This is a basic Rails 5 application with Doorkeeper, Grape & Swagger for getting to API building quickly.

You can view the live app and the Swagger-ui documentation.

This app is ready to deploy to Heroku Deploy

Set up

  • Set up the rails app and database with bundle install and rake db:setup

  • Run ./start to get the server running locally. It runs at http://localhost:3003

  • Copy .env.sample to .env and replace the values with your own values.

  • Delete the imaginary item class and serializer, which are included for demonstration in the me/items endpoint.

This app includes omniauth-bike-index. For Bike Index login to work, create a Bike Index app at BikeIndex.org/oauth/applications/new and add the values from BIKEINDEX_APP_ID and BIKEINDEX_APP_SECRET to the .env file.

Bike Index uses a similar grape, Swagger, doorkeeper setup—this is an example of creating an OmniAuth strategy for doorkeeper.

Adding to an existing application

View how to on the wiki.

Notes

Grape is mounted in app/controllers/api, as described in the excellent Introduction to building APIs with Grape by Monterail, and part 2 of the series.

There are are other posts in the series which are worth reading, particularly OAuth Implicit Grant with Grape, Doorkeeper and AngularJS.

There is also a Railscast on doorkeeper.

Important things in the Gemfile:

Also important, but maybe not as necessary to know about:


If you want to change the name of the app, swap out:

  • GrapeDoorkeeper in config/application.rb
  • grape-doorkeeper in config/database.yml (multiple instances)
  • grape-doorkeeper in config/initializers/session_store.rb
  • Do a project wide search of /grape.doorkeeper/i to catch any lingering ones like api_v1.html.haml

Testing

Rspec and guard - run bundle exec guard to watch your spec files for changes and rerun tests for those files.

There is a spec for the api/v1/me API route and for the swagger docs to help get you started.