DEV Community

zenkul
zenkul

Posted on

Effortless API Documentation with Grape, Grape Swagger, and rswag-ui

Effortless API Documentation with Grape, Grape Swagger, and rswag-ui

Documenting APIs can be a tedious chore, but it's essential for developers to understand and use your API effectively. Luckily, the Ruby ecosystem provides powerful tools to streamline this process. In this post, we'll explore how to combine Grape, Grape Swagger, and rswag-ui to effortlessly generate beautiful, interactive API documentation.

Grape: A Powerful Foundation

Grape is a lightweight framework for building REST-like APIs in Ruby. It simplifies API development with a clean, DSL-like syntax for defining endpoints, handling parameters, and formatting responses.

# app/api/v1/books.rb module V1 class Books Grape::API format :json resource :book do desc 'Get a list of books' get do Book.all end desc 'Create a new book' params do requires :name, type: String, desc: 'Book name' requires :author_name, type: String, desc: 'Author name' end post do Book.create!(declared(params)) end end end end 
Enter fullscreen mode Exit fullscreen mode

Grape Swagger automatically generates Swagger documentation from your Grape API definitions. Simply include it in your Gemfile

# Gemfile gem 'grape-swagger' 
Enter fullscreen mode Exit fullscreen mode

Now, to enhance your API documentation further, add the following configuration to your base API class:

# app/api/v1/base.rb module V1 class Base < Grape::API mount V1::Books add_swagger_documentation( api_version: 'v1', mount_path: '/api-docs', info: { title: 'API title', description: 'API description' } ) end end 
Enter fullscreen mode Exit fullscreen mode

This configuration sets up Swagger documentation for your Grape API:

  • api_version: Specifies the version of your API, which is 'v1' in this case.
  • mount_path: Defines the URL path where the Swagger UI will be mounted (/api-docs). It will return json response for swagger document on api/v1/api-docs.
  • info: Provides basic information about your API, including the title and a brief description.

By including this configuration in your Grape API, you enable Swagger to automatically generate documentation based on your API definitions. This documentation can then be accessed through the Swagger UI(rswag-ui).

rswag-ui: An Interactive UI for Swagger

rswag-ui takes your API documentation to the next level by providing an interactive environment where developers can explore and experiment with your API. It's like a playground for your API, allowing developers to get hands-on experience without writing any code.

This UI documentation empowers developers to:

  • Explore endpoints and parameters: Easily browse, view descriptions, and understand requirements.
  • Make test requests: Execute requests directly within the documentation, inputting data and inspecting responses.
  • View response codes and schemas: Understand response structures and handle different scenarios effectively.

rswag-ui transforms your API documentation into a dynamic tool for understanding and experimentation.

To integrate rswag-ui, add these to your Gemfile, routes.rb and initializers/swagger.rb:

# Gemfile gem 'rswag-ui' # config/routes.rb mount Rswag::Ui::Engine => '/api-docs' # config/initializers/swagger.rb Rswag::Ui.configure do |c| # This line instructs rswag-ui to fetch the Swagger JSON definition  # from '/api/v1/api-docs' and display it in the interactive UI. c.swagger_endpoint '/api/v1/api-docs', 'API V1' # c.swagger_endpoint '/api/v2/api-docs', 'API V2' Example for multiple API versions end 
Enter fullscreen mode Exit fullscreen mode

This will mount rswag-ui at /api-docs. Now you can access a beautiful, interactive documentation page for your API.

Here is how it looks (http://localhost:3000/api-docs/index.html):

Swagger UI on http://localhost:3000/api-docs/index.html

Conclusion

By leveraging Grape, Grape Swagger, and rswag-ui, you can significantly reduce the effort required to document your Rails APIs. This powerful combination allows you to focus on building your API while ensuring your documentation is always up-to-date and easy to understand.

Top comments (0)