Fork me on GitHub
Ruby 2.5 - Upcoming Dec 25th, 2017 - What's News?
Ruby 2.5.0 Changes
Official changes since the 2.4.0 release
Standard Gems 2.5.0 - Default Gems, Bundled Gems
by Jan Lelis, Idiosyncratic Ruby
10 New Features in Ruby 2.5
by Junichi Ito, Ruby programmer @ SonicGarden.jp
10 More New Features in Ruby 2.5
by Tom Lord, Software Developer from London
Performance Improvements in Ruby 2.5
by Jesus Castello, Ruby Guides
yield_self in Ruby 2.5
by Michał Łomnicki
Improved stacktrace display in Ruby 2.5
by Michał Łomnicki
Ruby 2.5 Series
by Amit Choudhary, Mohit Natoo et al @ BigBinary
Add your ruby 2.5 news byte »
Ruby Event News
Ruby on Ice - Jan 26-28th, 2018
Conference in Tegernsee, Bavaria, Germany
Paris.rb XXL - Jun 28+29th, 2018
Conference in Paris, France
European Ruby Conference (EuRuKo) 2018
Upcoming this summer in Vienna, Austria
Add your event news byte »

« Ruby Advent Calendar 2017

Get a free wiener lager, welsh red ale or kriek lambic beer delivered to your home (computer) in JSON and much much more

webservice library - Script HTTP JSON APIs (Web Services); Load (Micro) Web Services At-Runtime and More.

github: rubylibs/webservice, rubygems: webservice, rdoc: webservice ++ more: comments on reddit, please!

What’s the webservice library?

The webservice library lets you script HTTP JSON APIs also known as web services or microservices in classy Sinatra 2.0-style get / post methods with Mustermann 1.0 route / url pattern matching.

Dynamic Example

You can load web services at-runtime from files using Webservice.load_file. Example:

# service.rb

get '/' do
  'Hello, world!'
end

and

# server.rb

require 'webservice'

App = Webservice.load_file( './service.rb' )
App.run!

and to run type

$ ruby ./server.rb

Classic Example

# server.rb

require 'webservice'

class App < Webservice::Base
  get '/' do
    'Hello, world!'
  end
end

App.run!

and to run type

$ ruby ./server.rb

Rackup Example

Use config.ru and rackup. Example:

# config.ru

require `webservice`

class App < Webservice::Base
  get '/' do
    'Hello, world!'
  end
end

run App

and to run type

$ rackup      # will (auto-)load config.ru

Note: config.ru is a shortcut (inline) version of Rack::Builder.new do ... end:

# server.rb

require 'webservice'

class App < Webservice::Base
  get '/' do
    'Hello, world!'
  end
end

builder = Rack::Builder.new do
  run App
end

Rack::Server.start builder.to_app

and to run type

$ ruby ./server.rb

Bonus - “Real World” Examples

See

beerkit / beer.db.service - beer.db HTTP JSON API (web service) scripts e.g.

get '/beer/(r|rnd|rand|random)' do    # special keys for random beer
  Beer.rnd
end

get '/beer/:key'
  Beer.find_by! key: params['key']
end

get '/brewery/(r|rnd|rand|random)' do    # special keys for random brewery
  Brewery.rnd
end

get '/brewery/:key'
  Brewery.find_by! key: params['key']
end

...

worlddb / world.db.service - world.db HTTP JSON API (web service) scripts

get '/countries(.:format)?' do
  Country.by_key.all    # sort/order by key
end

get '/cities(.:format)?' do
  City.by_key.all       # sort/order by key
end

get '/tag/:slug(.:format)?' do   # e.g. /tag/north_america.csv
  Tag.find_by!( slug: params['slug'] ).countries
end

...

sportdb / sport.db.service - sport.db (football.db) HTTP JSON API (web service) scripts


From the Ruby Advent Calendar 2017.