Wisp is a practical Gleam web framework rapid development and easy maintenance. We worry about the hassle of web development, and you focus on writing your application.
It is based around two concepts: handlers and middleware.
Handlers
A handler is a function that takes a HTTP request and returns a HTTP response. A handler may also take other arguments, such as a “context” type defined in your application which may hold other state such as a database connection or user session.
import wisp.{Request, Response}
pub type Context {
Context(secret: String)
}
pub fn handle_request(request: Request, context: Context) -> Response {
wisp.ok()
}
Middleware
A middleware is a function that takes a response returning function as its last argument, and itself returns a response. As with handlers both middleware and the functions they take as an argument may take other arguments.
Middleware can be applied in a handler with Gleam’s use
syntax. Here the
log_request
middleware is used to log a message for each HTTP request
handled, and the serve_static
middleware is used to serve static files
such as images and CSS.
import wisp.{Request, Response}
pub fn handle_request(request: Request) -> Response {
use <- wisp.log_request
use <- wisp.serve_static(req, under: "/static", from: "/public")
wisp.ok()
}
Learning Wisp
The Wisp examples are a good place to start. They cover various scenarios and include comments and tests.
- Hello, World!
- Routing
- Working with form data
- Working with JSON
- Working with other formats
- Using a database
- Serving static assets
- Logging
- Working with cookies
- Configuring default responses
API documentation is available on HexDocs.
Wisp applications
These open source Wisp applications may be useful examples.
- https://packages.gleam.run/: A HTML serving application that uses an SQLite + LiteFS database, deployed to Fly.io.