Edit this page

Proxying directly to the backends with no-op

KrakenD no-op (no-operation), is a special type of encoding that behaves as a proxy by passing the client’s request to the backend as is, and vice-versa.

Using no-op to proxy requests

When setting no-op, KrakenD does not inspect the request body or manipulates it in any way. Instead, when a request to a no-op endpoint is received, KrakenD directly forwards it to the backend without doing any operation with it.

The proxy pipe (this is from KrakenD to backend) is marked to do no-operation, meaning that KrakenD does not aggregate content, filter, manipulate or any of the other functionalities performed during this pipe. It’s also important to notice that only a single backend is accepted, as the merge operation happens during the proxy pipe.

Employing the same principle, when the backend produces the response, it’s passed back to the client as is, preserving its form: body, headers, status codes and such.

On the other hand, the router pipe’s features (from client to KrakenD) remain unaltered, meaning that for instance you can still rate-limit your end-users or require JWT authorization to name a few examples.

Key concepts

The key concepts of no-op are:

  • The KrakenD endpoint works just like a regular proxy
  • The router pipe functionalities are available (e.g., rate limiting the endpoint)
  • The proxy pipe functionalities are disabled (aggregate/merge, filter, manipulations, body inspection, concurrency…)
  • Headers passing to the backend still need to be declared under headers_to_pass, as they hit the router layer first.
  • Backend response and headers remain unchanged (including status codes)
  • The body cannot be changed and is set solely by the backend
  • 1:1 relationship between endpoint-backend (one backend per endpoint).

When to use no-op

Use no-op when you need to couple the client with a specific backend without any KrakenD manipulation.

Examples:

  • You want to set a Cookie to the client directly from the backend.
  • You need to keep the headers of the backend as is.

How to use no-op

To declare endpoints that go directly to the backend as they are you need to define the no-op encoding both in the endpoint and the backend section, specifically:

  • Add "output_encoding": "no-op" in the endpoint section
  • Add "encoding": "no-op" in the backend section

When using the no-op encoding remember that the endpoint can only have one backend as KrakenD is not going to inspect or manipulate the response (no merging happens). Also, other pipe options like the concurrent requests, the circuit breaker, or the backend rate-limit specific to the proxy pipe aren’t available (but still have endpoint rate limit -> router pipe).

Example

The following snippet shows an endpoint that is passed to the backend as is. Notice that both the endpoint and the backend have a no-op encoding. The backend is using KrakenD’s debug endpoint to capture the request in the console:

{
    "endpoint": "/auth/login",
    "output_encoding": "no-op",
    "backend": [
        {
            "encoding": "no-op",
            "host": [ "localhost:8080" ],
            "url_pattern": "/__debug/login"
        }
    ]
}
Unresolved issues?

The documentation is only a piece of the help you can get! Whether you are looking for Open Source or Enterprise support, see more support channels that can help you.