Un jour, une gem

06/04/2012

Vendredi c'est Grape

gem install grape

Trop d’API tuent l’API !

Si vous nous suivez depuis quelques temps vous avez pu voir pas mal de gems pour utiliser des API. C’est cool, mais si on faisait la nôtre ? :)

Aujourd’hui c’est Grape qui sert à faire des API sous forme d’application à la Sinatra mais avec quelques trucs sympathiques :

  • Versioning
  • Réponse multi-formats
  • Et pleins d’autres trucs !

Un petit exemple issu de la documentation :

class Twitter::API < Grape::API
  version 'v1', :using => :header, :vendor => 'twitter'

  helpers do
    def current_user
      @current_user ||= User.authorize!(env)
    end

    def authenticate!
      error!('401 Unauthorized', 401) unless current_user
    end
  end

  resource :statuses do
    get :public_timeline do
      Tweet.limit(20)
    end

    get :home_timeline do
      authenticate!
      current_user.home_timeline
    end

    get '/show/:id' do
      Tweet.find(params[:id])
    end

    post :update do
      authenticate!
      Tweet.create(
        :user => current_user,
        :text => params[:status]
      )
    end
  end

  resource :account do
    before { authenticate! }

    get '/private' do
      "Congratulations, you found the secret!"
    end
  end

end

Ensuite on ajoute une petite ligne à notre config.ru :

run Twitter::API

Voilà maintenant toute une liste de routes accessibles :

GET /statuses/public_timeline(.json)

GET /statuses/home_timeline(.json)

GET /statuses/show/:id(.json)

POST /statuses/update(.json)

Pratique, non ? Oui mais le faire en Rails au final aurait pris autant de lignes. Alors quel intérêt ?

Et bien il vaut mieux laisser le serveur Web pour le reste, non ?

Les liens utiles