Friday, 26 December 2014

API Development in Ruby On Rails

I met a technology and a set of gems which were designed to develop any API in Ruby On Rails about half years ago.

The set of gems were:

At first glance it seemed that it adds complexity to the Rails application compared to standard Rails JSON returns. After I played a bit with it I suddenly realized that its API formulating DSL is much more superior. So I started to like it :)

Let me list the elements of DSL I like most:

  • ability to mount API endpoints. This can be very handy if I want to unmount certain unused parts of the API.

      mount Caesars::Ping
      mount Caesars::PingProtected

  • ability to describe the API endpoint. This description will appear in the Swagger documentation. It is a help for the API user.
  • ability to specify the parameters (type, mandatory or required).
      params do
        optional :user_ids, desc: "JSON array of the user ids to be deleted."
        requires :group_id, type: Integer, desc: "The id of the group"

By specifying the type our parameters will be converted automagically to the specified type. It is easier this way for us developers to write our core logic.
  • a complex DSL to organize the API hierarchy and use route params. I consider this the most powerful feature. I can easily organize the API to look more like Facebook graph API or Philips Hue API than standard Rails restfull API.
      namespace :teams do
        route_param :id do
          desc 'Retrieve all games belonging to teams'
          get 'scores' do
            #DO logic here

The grape features are many more including versioning. Take a look for a complete description at grape site ;)