HTTP JSON GET with connect and read timeouts

Crystal
require "http/client"
require "json"

def get_json(url : String, timeout : Time::Span = 5.seconds) : JSON::Any
  uri = URI.parse(url)
  client = HTTP::Client.new(uri)
  client.connect_timeout = timeout
  client.read_timeout = timeout
  begin
    response = client.get(uri.full_path)
    raise "GET #{url} failed: #{response.status_code}" unless response.success?
    JSON.parse(response.body)
  ensure
    client.close
  end
end

data = get_json("http://example.com/api.json")
puts data["ok"]?