The default web server of the Crystal is quite good :smile: but it weak at routing :cry:.
Kemal or other web frameworks written in Crystal are awesome :smile:, but it's too fat for some purpose :cry:.
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
dependencies: router: github: tbrand/router.cr
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
post with PATH and BLOCK where
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
params is a Hash(String, String) that is used when you define a path parameters such as
: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