A Crystal library to create REST API with Kemal.
See examples folder for mysql, sqlite3 and mongo samples.
NOTE: this is a beta version, a lot of features and security improvements need to be implemented actually
Add this to your application's shard.yml
:
dependencies:
kemal-rest-api:
github: blocknotes/kemal-rest-api
require "db" # dependency required to use CrystalDbModel
require "sqlite3" # dependency required to use CrystalDbModel - alternatives: crystal-mysql, crystal-pg
require "kemal"
require "kemal-rest-api"
class MyModel < KemalRestApi::Adapters::CrystalDbModel
def initialize
super "sqlite3:./db.sqlite3", "my_table"
end
end
module WebApp
res = KemalRestApi::Resource.new MyModel.new, KemalRestApi::ALL_ACTIONS, prefix: "api", singular: "item"
res.generate_routes!
Kemal.run
end
Generated routes:
GET /api/items
GET /api/items/:id
POST /api/items
PUT /api/items/:id
DELETE /api/items/:id
- json (Bool): form payload as JSON instead of formdata, default = true
- plural (String): plural name of the model, used for routes, default = singular pluralized
- prefix (String): prefix for all API routes, default = ""
- singular (String): singular name of the model, default = class model name lowercase
See examples folder.
crystal-db shard is required only if KemalRestApi::Adapters::CrystalDbModel
is used.
The proposed adapters are basic implementations, you can create easily a model adapter that responds better to your needs. prepare_params is used to adjust the create/update parameters.
- Mattia Roccoberton - creator, maintainer, Crystal fan :)