fork of https://github.com/kemalcr/kemal
samples | ||
spec | ||
src | ||
.gitignore | ||
Guardfile | ||
README.md | ||
shard.yml |
# Kemal
Lightning Fast, Super Simple web framework for Crystal. Inspired by Sinatra
Kemal is under heavy development and currently supports Crystal 0.9.0.
Super Simple <3
require "kemal"
get "/" do
"Hello World!"
end
Build and run!
crystal build --release src/kemal_sample.cr
./kemal_sample
Go to http://localhost:3000
Check samples for more.
Installation
Add it to your shard.yml
dependencies:
kemal:
github: kemalcr/kemal
branch: master
Routes
In Kemal, a route is an HTTP method paired with a URL-matching pattern. Each route is associated with a block:
get "/" do
.. show something ..
end
post "/" do
.. create something ..
end
put "/" do
.. replace something ..
end
patch "/" do
.. modify something ..
end
delete "/" do
.. annihilate something ..
end
Context
Accessing the request environment (query params, body, headers e.g) is super easy. You can use the context returned from the block:
# Matches /hello/kemal
get "/hello/:name" do |env|
name = env.params["name"]
"Hello back to #{name}"
end
# Matches /resize?width=200&height=200
get "/resize" do |env|
width = env.params["width"]
height = env.params["height"]
end
Content Type
Kemal uses text/html as the default content type. You can change it via the context.
# Set the content as application/json and return JSON
get "/user.json" do |env|
kemal = {name: "Kemal", language: "Crystal"}
env.set_content_type "application/json"
kemal.to_json
end
Thanks
Thanks to Manas for their awesome work on Frank.