Skip to content

jamal/sinatra-restful

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

sinatra-restful

Sinatra extension to make RESTful APIs super simple.

Status

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

Features

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

Todo

  • OAuth2

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

  • Pagination

  • Partial responses

  • Method whitelisting

Usage

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

License

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

About

Sinatra extension to make RESTful APIs super simple

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages