route.cr alternatives and similar shards
Based on the "HTTP" category.
Alternatively, view route.cr alternatives based on common mentions on social networks and blogs.
-
http-protection
This library protects against typical web attacks. It was inspired in rack-protection Ruby gem. -
multipart.cr
DISCONTINUED. Adds multipart and multipart/form-data support to the crystal standard library -
ContentDisposition
Crystal shard to create HTTP Content-Disposition headers with proper escaping/encoding of filenames
SaaSHub - Software Alternatives and Reviews
Do you think we are missing an alternative of route.cr or a related project?
README
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:
Installation
Add this to your application's shard.yml
:
dependencies:
router:
github: tbrand/router.cr
Usage
Basic usage
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 ```crystal 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
```crystal
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](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
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](sample) for details.
Contributing
- 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
Contributors
- tbrand Taichiro Suzuki - creator, maintainer