Daniel Doubrovkine bio photo

Daniel Doubrovkine

aka dB., CTO at artsy.net, fun at playplay.io, NYC

Email Twitter LinkedIn Github

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.