Platinum Partner
ruby,high-perf,tips and tricks,grape,goliath

Grape Mounted behind Goliath

Got a chance to play with Goliath for a bit. You don’t need to do much work to mount Grape behind it. Grape figures out content-negotiation and formatting for you, so just stream the response through Goliath.

    module Acme
      class Ping < Grape::API
        format :json
        get '/ping' do
          { ping: "pong" }
        end
      end
     
      class App < Goliath::API
        use Goliath::Rack::Params
        use Goliath::Rack::Render
     
        def response(env)
          Acme::API.call(env)
        end
      end
    end

Tests for something like this are a little bit tricky, because Goliath is fully asynchronous.

    describe Acme::API do
      it "ping" do
        with_api Acme::App do
          get_request(path: "/api/ping") do |async|
            async.response.should == { ping: "pong" }.to_json
          end
        end
      end
    end

Working code in https://github.com/dblock/grape-on-goliath.

There’s also a very complete demo with asynchronous IO and PostgreSQL here. Haven’t tried it, but looks very promising.



Published at DZone with permission of {{ articles[0].authors[0].realName }}, DZone MVB. (source)

Opinions expressed by DZone contributors are their own.

{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks
Tweet

{{parent.nComments}}