Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Introduce Redirect combinator #1575

Open
wants to merge 7 commits into
base: master
Choose a base branch
from

Commits on Mar 28, 2022

  1. New combinator to return routed path in response headers

    This commit introduces a new type-level combinator, `WithRoutingHeader`.
    It modifies the behaviour of the following sub-API, such that all endpoint
    of said API return an additional routing header in their response.
    
    A routing header is a header that specifies which endpoint the
    incoming request was routed to.
    
    Endpoint are designated by their path, in which `Capture'` and
    `CaptureAll` combinators are replaced by a capture hint.
    
    This header can be used by downstream middlewares to gather
    information about individual endpoints, since in most cases
    a routing header uniquely identifies a single endpoint.
    
    Example:
    ```haskell
    type MyApi =
      WithRoutingHeader :> "by-id" :> Capture "id" Int :> Get '[JSON] Foo
    -- GET /by-id/1234 will return a response with the following header:
    --   ("Servant-Routed-Path", "/by-id/<id::Int>")
    ```
    
    To achieve this, two refactorings were necessary:
    * Introduce a type `RouterEnv env` to encapsulate the `env` type
      (as in `Router env a`), which contains a tuple-encoded list of url
      pieces parsed from the incoming request.
      This type makes it possible to pass more information throughout the
      routing process, and the computation of the `Delayed env c` associated
      with each request.
    * Introduce a new kind of router, which only modifies the RouterEnv, and
      doesn't affect the routing process otherwise.
      `EnvRouter (RouterEnv env -> RouterEnv env) (Router' env a)`
      This new router is used when encountering the `WithRoutingHeader`
      combinator in an API, to notify the endpoints of the sub-API that they
      must produce a routing header (this behaviour is disabled by default).
    nbacquey committed Mar 28, 2022
    Configuration menu
    Copy the full SHA
    9be8693 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    ca8d44e View commit details
    Browse the repository at this point in the history
  3. Update changelog

    nbacquey committed Mar 28, 2022
    Configuration menu
    Copy the full SHA
    809c8ce View commit details
    Browse the repository at this point in the history

Commits on Mar 31, 2022

  1. Configuration menu
    Copy the full SHA
    e0d47c8 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    bfa854f View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    56f639b View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    363d142 View commit details
    Browse the repository at this point in the history