Faraday ships with some useful middleware that you can use to customize your request/response lifecycle. Middleware are separated into two macro-categories: Request Middleware and Response Middleware. The former usually deal with the request, encoding the parameters or setting headers. The latter instead activate after the request is completed and a response has been received, like parsing the response body, logging useful info or checking the response status.

Request Middleware

Request middleware can modify Request details before the Adapter runs. Most middleware set Header values or transform the request body based on the content type.

  • BasicAuthentication sets the Authorization header to the user:password base64 representation.
  • TokenAuthentication sets the Authorization header to the specified token.
  • Multipart converts a Faraday::Request#body hash of key/value pairs into a multipart form request.
  • UrlEncoded converts a Faraday::Request#body hash of key/value pairs into a url-encoded request body.
  • Retry automatically retries requests that fail due to intermittent client or server errors (such as network hiccups).
  • Instrumentation allows to instrument requests using different tools.

Response Middleware

Response middleware receives the response from the adapter and can modify its details before returning it.

  • Logger logs both the request and the response body and headers.
  • RaiseError checks the response HTTP code and raises an exception if it is a 4xx or 5xx code.