Apipie-rails is a DSL and Rails engine for documenting you RESTful API. Instead of traditional use of #comments, Apipie lets you "describe the code by code". This brings advantages like:
- It uses ruby syntax
- Reusable doc for other purposes (Best for validations)
- Easier to extend and maintain
apipie-rails gem owner has documented it in very nice way with examples. Refer [Github Documentaion(github doc)][1]
Path to documentation:
The documentation is available right in your app (by default under "/apipie" path.)
Also you can provide your own path using initializers. For more information refer [here(config link)][2]
Apipie.configure do |config|
config.api_base_url = "/api"
config.doc_base_url = "/api/docs"
# where is your API defined?
config.api_controllers_matcher = "#{Rails.root}/app/controllers/api/v1/*.rb"
config.default_version = "v1"
end
Steps to follow:
The easiest way to get Apipie up and running with your app is:
- In your gemfile:
gem 'apipie-rails'
-
bundle install
- Then set up the basic configuration:
rails g apipie:install
Now you can start documenting your resources and actions:
api :GET, '/users/:id' param :id, :name def show # ... end
Run your application and see the result at http://localhost:3000/apipie
Resource Description:
Refer [here(link)][3]
resource_description do short 'List, create, update and delete offers.' formats ['json'] error 401, "Unauthorized" error 404, "Not Found" error 422, "Validation Error" error 500, "Internal Server Error" end
Parameter Description:
Refer [here(link)][4]
param :user, Hash, desc: "User info" do
param :username, String, desc: "Username for login", required: true
param :password, String, desc: "Password for login", required: true
end
def create
#...
end
Param Group:
Refer [here(link)][5]
def_param_group :offer do
param :offer, Hash, required: true do
param :state_event, Offer.valid_events, desc: "event description", allow_nil: true
param :parking, [true, false], desc: "Is provided?", allow_nil: true
param :estimated_size, String, desc: "How big is the item?", required: true
end
end
api :POST, '/v1/offers', "Create an offer"
param_group :offer
def create
# ...
end
Example Recording:
Refer [here(link)][6]
You can also use the tests/rspec to generate up-to-date examples for your api documentayion.
APIPIE_RECORD=examples rspec
The data is written into doc/apipie_examples.yml. By default, only the first example is shown for each action. You can customize this by setting show_in_doc attribute at each example.
describe "Create User" do
it "should return user record", :show_in_doc do
....
end
end
and in rspec helper:
# Apipie can record examples using "APIPIE_RECORD=examples rake" config.filter_run :show_in_doc => true if ENV['APIPIE_RECORD']
Data will be loaded in doc/apipie_examples.json as
{
"users#show" : [
{
"verb" : "GET",
"path" : "/api/v1/users/1431",
"versions" : [
"v1"
],
"query" : "",
"request_data" : null,
"response_data" : {
"permissions" : [
{
"id" : 510,
"name" : "Reviewer"
}
],
"user" : {
"id" : 1431,
"first_name" : "Guillermo",
"last_name" : "Kohler",
"mobile" : "90865267",
"permission_id" : 510
}
},
"code" : "200",
"show_in_doc" : 1,
"recorded" : true
}
]
}
Demo application: [Click Here(link)][7]
API documentation of our application: [Click Here(link)][8]
[1]: https://github.com/Apipie/apipie-rails
[2]: https://github.com/Apipie/apipie-rails#configuration-reference
[3]: https://github.com/Apipie/apipie-rails#resource-description
[4]: https://github.com/Apipie/apipie-rails#parameter-description
[5]: https://github.com/Apipie/apipie-rails#dry-with-param_group
[6]: https://github.com/Apipie/apipie-rails#examples-recording
[7]: https://github.com/Apipie/apipie-demo
[8]: http://api.goodcity.hk/api/docs