The default web server of the Crystal is quite good 😄 but it weak at routing 😢.
Kemal or other web frameworks written in Crystal are awesome 😄, but it's too fat for some purpose 😢.
router.cr is a minimum but High Performance middleware for Crystal web server.
See the amazing performance of router.cr here.:rocket:
Add this to your application's shard.yml
:
dependencies:
router:
github: tbrand/router.cr
require "router"
Include Router
to utilize router.cr.
class WebServer
include Router
end
Define a method to draw all routes for your web server.
class WebServer
include Router
def draw_routes
# Drawing routes HERE!
end
end
In that method, call HTTP method name (downcase) like get
or post
with PATH and BLOCK where
- PATH : String
- BLOCK : block of HTTP::Server::Context, Hash(String, String) -> HTTP::Server::Context
class WebServer
include Router
def draw_routes
get "/" do |context, params|
context.response.print "Hello router.cr!"
context
end
end
end
Here we've defined a GET route at root path (/) that just print out "Hello router.cr" when we get access. To activate (run) the route, just define run methods for your server with route_handler
class WebServer
include Router
def draw_routes
get "/" do |context, params|
context.response.print "Hello router.cr!"
context
end
end
def run
server = HTTP::Server.new(route_handler)
server.bind_tcp 8080
server.listen
end
end
Here route_handler is getter defined in Router. So you can call route_handler
at anywhere in WebServer instance.
Finally, run your server.
web_server = WebServer.new
web_server.draw_routes
web_server.run
See sample and tips for details.
params
is a Hash(String, String) that is used when you define a path parameters such as /user/:id
(:id
is a parameters). Here is an example.
class WebServer
include Router
def draw_routes
get "/user/:id" do |context, params|
context.response.print params["id"] # get :id in url from params
context
end
end
end
See sample and tips for details.
- Fork it ( https://github.com/tbrand/router.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
- tbrand Taichiro Suzuki - creator, maintainer