route.cr
The default web server of the Crystal is quite good but it weak at routing. Kemal is an awesome defacto standard web framework for Crystal, but it's too fat for some purpose.
route.cr is a minimum but powerful High Performance middleware for Crystal web server. See the amazing performance of route.cr here
Installation
Add this to your application's shard.yml
:
dependencies:
route:
github: tbrand/route.cr
Usage
require "route"
Include Route
to utilize this.
class WebServer
include Route
end
In the following example codes, class WebServer ... end
will be omitted.
Initialize RouteHandler
@route_handler = RouteHandler.new
To define API, call API.new with context and params(optional) where context is HTTP::Server::Context and params is Hash(String, String). All APIs have to return the context. In this example, params is omitted. (The usage of params is later)
@index = API.new do |context|
context.response.print "Hello route.cr"
context
end
Define your routes in a draw
block.
draw(@route_handler) do
get "/", @index
end
To activate the routes
def run
server = HTTP::Server.new(3000, @route_handler)
server.listen
end
Finally, run your server.
web_server = WebServer.new
web_server.run
params
is a Hash(String, String) that is used when you define a path including parameters such as "/user/:id"
(:id
is a parameters). Here is an example.
class WebServer
@route_handler = RouteHandler.new
@user = API.new do |context, params|
context.response.print params["id"] # get :id in url from params
context
end
def initialize
draw(@route_handler) do
get "/user/:id", @user
end
end
end
See sample for details.
Contributing
- Fork it ( https://github.com/tbrand/route.cr/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- tbrand Taichiro Suzuki - creator, maintainer