Modular, light web framework for Crystal
Clone or download
Permalink
Failed to load latest commit information.
docs Adds websockets Apr 3, 2017
spec compat with Crystal 0.25 Jun 22, 2018
src removes static serving Aug 27, 2018
.gitignore now has a usable framework Apr 2, 2017
.travis.yml initial commit Apr 1, 2017
LICENSE initial commit Apr 1, 2017
README.md adds project purpose to README Aug 28, 2018
shard.yml removes static serving Aug 27, 2018

README.md



raze



Raze

Raze for days.

Raze is a lightweight HTTP framework with a focus on building APIs and containerized services. If you want a more general purpose framwork with static file serving, check out Kemal.

Installation

Add this to your application's shard.yml:

dependencies:
  raze:
    github: samueleaton/raze

Usage

require "raze"

get "/hello" do |ctx|
  "hello, world!"
end

Raze.run

Raze takes a modular-first approach to middlewares

require "raze"

# Define middlewares
class Authenticator < Raze::Handler
  def call(ctx, done)
    puts "Authenticate here..."
    done.call
  end
end

class DDoSBlocker < Raze::Handler
  def call(ctx, done)
    puts "Prevent DDoS attack here..."
    done.call
  end
end

class UserFetcher < Raze::Handler
  def call(ctx, done)
    # Fetch user record from DB here...
    ctx.state["user_name"] = "Sam"
    done.call
  end
end

# Define routes, attach middlewares
get "/api/**", [Authenticator.new, DDoSBlocker.new]

get "/api/user/:user_id", UserFetcher.new do |ctx|
  "hello, #{ctx.state["user_name"]}!"
end

Raze.run

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

TODO

Core

  • Be able to run a stack of middlewares before the static file handler
  • Remove all global scoping (e.g. get "/" -> Raze.get "/")
  • Live reload functionality for development
  • Be able to define middlewares globally (for all routes)

Middlewares

  • Urlencoded and JSON body parser
  • Multipart/form-data body parser
  • Static asset caching
    • should take a cache time interval and be able to take a path match regex
  • Route caching
    • be able to cache the response for a route for a predetermined time interval
  • Favicon caching
  • CORS response header
  • Access logger
  • Session tracking
  • Proxy middleware
  • Security Headers

Contributors