Terminology
Understanding Pedestal comes with the challenge of unpacking a number of terms - some specific to Pedestal, others inherited from the underlying technologies Pedestal extends from.
- chain provider
-
Creates and executes an interceptor chain, with some behaviors reflecting a specific domain - the normal domain is processing HTTP requests.
- clj
-
Also called "tools.deps", this is the name of a build tool for Clojure. clj is more recent than Leiningen and has a very different model, but can perform the same key functions: downloading dependencies (from Maven repositories and elsewhere) and running Clojure programs. Projects with a
deps.edn
file at the root are built usingclj
. - context map
-
The context map contains data about the ongoing request; a context map is passed to interceptors, which often return a modified copy of it. Ultimately, the incoming request map and response map are stored in the context map, along with much other data internal to Pedestal.
- core.async
-
The core.async library is a Clojure extension that allows for efficient and expressive concurrent processing systems. The central artifact is a channel, a kind of data pipe that allows information to be conveyed between concurrently running light-weight processes.
- handler
-
A simple function that is passed a request map and returns a response map; handlers are converted to interceptors internally.
- interceptor
-
An interceptor is the basic unit of work in Pedestal, a combination of specific functions related to handling a request or generating a response.
- interceptor chain
-
A pipeline of interceptors, setup and executed by a chain provider.
- Leiningen
-
Leiningen is a popular and pervasive Clojure build tool. Projects with a
project.clj
file at the root are built using Leiningen, which can download dependencies from a Maven repository on demand. - Maven repository
-
A source of Java and Clojure packages, used by the Maven build tool, but also by virtually all other similar tools in the Java ecosystem.
- REPL
-
The Read Eval Print Loop: reading Clojure input, evaluating it, and printing the result. Clojure excels at interactive development.
- request map
-
A map of data about the incoming HTTP request, including HTTP verb, URL, and parameters; this is all the information needed to route and process the request, and is available inside the context map.
- response map
-
A map of data used to construct and send the HTTP response. The response map is stored into the context map to trigger the sending of the response.
- route
-
A mapping of an HTTP Verb (such as GET or POST) and a URL path to a specific set of interceptors.
- router
-
A specific implementation (there are several in Pedestal, with different tradeoffs) responsible for identifying the route for an incoming request, using a routing table derived from a routing specification.
- routing
-
The process of mapping an incoming request to a route, using a router and a routing specification.
- routing interceptor
-
An interceptor whose job is to perform routing; the routing interceptor is constructed from a routing specification and a router implementation.
- routing specification
-
A concise list of routing data, in one of several formats. A routing specification is converted into a routing table.
- routing table
-
A verbose, expanded version of routes that can be used by a router.
- server
-
A server is responsible for low-level communication with HTTP clients; A server map is created from the service map, and can be used to start and stop the server. Many examples use the Jetty 11 server implementation.
- service map
-
The service map is a collection of data that is used to setup request routing and interceptors, and ultimately create a server.
- servlet
-
The standard Java term for a request handler - a servlet operates in the context of a server and processes incoming requests. In Pedestal, a generic servlet is created and configured, and feeds incoming requests into a pipeline of interceptors.
- servlet interceptor
-
A chain provider specific to handling HTTP requests from a servlet.
- SLF4J
-
The Simple Logging Facade for Java, a generic wrapper around several competing approaches to generating logging output. Pedestal’s
io.pedestal.log
logging support works with SLF4J.