Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Routing

Uzumibi provides a Sinatra-inspired routing DSL. Your application class should inherit from Uzumibi::Router.

Defining Routes

Routes are defined using HTTP method names as class methods:

class App < Uzumibi::Router
  get "/path" do |req, res|
    # Handle GET request
  end

  post "/path" do |req, res|
    # Handle POST request
  end

  put "/path" do |req, res|
    # Handle PUT request
  end

  delete "/path" do |req, res|
    # Handle DELETE request
  end

  head "/path" do |req, res|
    # Handle HEAD request (body will be automatically cleared)
  end
end

Path Parameters

You can define dynamic path segments using the :param syntax:

class App < Uzumibi::Router
  get "/users/:id" do |req, res|
    user_id = req.params[:id]
    res.status_code = 200
    res.headers = { "Content-Type" => "text/plain" }
    res.body = "User ID: #{user_id}"
    res
  end

  get "/posts/:post_id/comments/:comment_id" do |req, res|
    post_id = req.params[:post_id]
    comment_id = req.params[:comment_id]
    res.status_code = 200
    res.body = "Post: #{post_id}, Comment: #{comment_id}"
    res
  end
end

Query Parameters

Query parameters are automatically parsed and available in req.params:

get "/search" do |req, res|
  query = req.params[:q]
  page = req.params[:page] || "1"
  
  res.status_code = 200
  res.body = "Search: #{query}, Page: #{page}"
  res
end

For a request to /search?q=ruby&page=2, req.params will contain both :q and :page.