route.cr
forked from tbrand/router.crThe 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. route.cr includes convenient rendering tool and profiler.
Installation
Add this to your application's shard.yml
:
dependencies:
route:
github: tbrand/route.cr
Usage
Basic usage
require "route"
Include Route
to utilize route.cr.
class WebServer
include Route
end
In the following sample codes, class WebServer ... end
will be omitted. To 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 # returning context
end
Define your routes in a draw
block.
draw(@route_handler) do # Draw routes
get "/", @index
end
To activate the routes
def run
server = HTTP::Server.new(3000, @route_handler) # Set RouteHandler to your server
server.listen
end
Finally, run your server.
web_server = WebServer.new
web_server.run
See sample for details.
Path parameters
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
@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.
Rendering views(.ecr)
route.cr also support simple rendering function to render .ecr
file with parameters. First, define your view like
def_view :view_sample, "sample/public/hello.ecr", name: String, num: Int32
where "sample/public/hello.ecr" is
My name is <%= @name %>. The number is <%= @num %>.
:view_sample
is an identifier of the view. "sample/public/hello.ecr" is a relative path to the file. name
and num
are parameters used in "sample/public/hello.ecr". Note that these parameters have to be class variables in the file. See here. When you render them, just call render_view
like
context.response.print render_view(:view_sample, "tbrand", 10)
See sample for details.
Get profiles
route.cr also serves ProfileHandler. By using this, you can easily get the access data like
[ GET /one ] Access: 10 Total: 704.0µs Ave: 70.4µs
[ GET /two ] Access: 9 Total: 309.0µs Ave: 34.3µs
[ GET /three ] Access: 9 Total: 262.0µs Ave: 29.1µs
For this, just set ProfileHandler
to your server like
server = HTTP::Server.new(3000, [ProfileHandler.new, @route_handler])
After running your server, try accessing "/profile".
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
route.cr
- 0
- 0
- 0
- 1
- 1
- about 7 years ago
- April 7, 2017
MIT License
Sat, 04 May 2024 09:44:27 GMT