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
-
Set up the rails app and database with
bundle install
andrake 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.
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:
- Doorkeeper (OAuth providing)
- grape (API building)
- wine_bouncer (Doorkeeper and Grape)
- grape-swagger (automatically generates Swagger docs for the auto documentation)
- Devise (users)
Also important, but maybe not as necessary to know about:
- rails-assets manages the js for swagger-ui
- Puma (the web server)
- api-pagination
- active_model_serializers - uses 0.8 branch of active model serializers, because nothing past 0.8 supports caching
- CORS
- foreman (in development to manage processes)
- Haml - and Hamlit, which is faster haml
- dotenv-rails (load environmental variables - .env is in .gitignore, so it isn't committed)
- Bootstrap
- Postgres
If you want to change the name of the app, swap out:
GrapeDoorkeeper
in config/application.rbgrape-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
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.