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 using clj.

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 router is one of several elements related to routing; from context it will be one of:

  • A function that constructs a routing function from a routing table

  • The routing function itself

  • The routing function wrapped as an interceptor

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 the routing table and a router implementation.

routing specification

A concise list of routing data, in one of several formats. One or more routing specifications are 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.