Skip to content

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Sinatra extension to make RESTful APIs super simple.

sinatra-restful is still in its infancy, and has a lot of features that are missing. Please check back for updates.

The following features are currently supported by sinatra-restful:

  • QPS Throttling (currently only by IP, app and user throttling is planned)

  • Compression using Rack::Deflater

  • Versioning

  • JSON Response

  • OAuth2

  • Support for multiple content types (xml, etc.)

  • Pagination

  • Partial responses

  • Method whitelisting

Install the gem:

gem install sinatra-restful

Example using the classic style:

require 'rubygems'
require 'sinatra'
require 'sinatra/restful'

use Sinatra::Restful::Throttle::Qps, :value => 5
use Sinatra::Restful::Compress

get '/note/:id', :version => "1.1" do
  # ...
  { :id => 1, :title => "Test note", :content => "..." }
end

get '/note/:id', :version => "1" do
  # ...
end

post '/note' do
  # ...
  status 201
end

Example using the modular style:

require 'rubygems'
require 'sinatra/base'
require 'sinatra/restful'

class MyApi < Sinatra::Base
  register Sinatra::Restful
  use Sinatra::Restful::Throttle::Qps, :value => 5
  use Sinatra::Restful::Compress

  get '/note/:id', :version => "1.1" do
    # ...
    { :id => 1, :title => "Test note", :content => "..." }
  end

  get '/note/:id', :version => "1" do
    # ...
  end

  post '/note' do
    # ...
    status 201
  end
end

MyApi.run!

Then, we are ready to make a request!

$ curl -v http://localhost:4567/v1.1/note/1
* About to connect() to localhost port 4567 (#0)
*   Trying ::1...
* connected
* Connected to localhost (::1) port 4567 (#0)
> GET /v1.1/note/1 HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0   OpenSSL/0.9.8r zlib/1.2.5
> Host: localhost:4567
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json;charset=utf-8
< Content-Length: 44
< Vary: Accept-Encoding
< X-Content-Type-Options: nosniff
< Server: WEBrick/1.3.1 (Ruby/2.0.0/2013-02-24)
< Date: Sat, 13 Apr 2013 15:57:18 GMT
< Connection: Keep-Alive
<
* Connection #0 to host localhost left intact
{"id":1,"title":"Test note","content":"..."}
* Closing connection #0

Copyright © 2013 Jamal Fanaian, relased under the MIT license. See LICENSE for more information.

About

Sinatra extension to make RESTful APIs super simple

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages