Skip to content

# Request Object

The `Request` object represents the incoming HTTP request and provides access to all its components like headers, query parameters, path parameters, and the request body.

## Overview

When a request hits your Ignyx application, a `Request` object is created. You can access it in your route handlers by type-hinting it in the function signature.

## Properties

The `Request` object has the following properties:

- `request.method`: The HTTP method (e.g., `"GET"`, `"POST"`).
- `request.path`: The request URL path (e.g., `"/users/me"`).
- `request.headers`: A case-insensitive dictionary of request headers.
- `request.query_params`: A dictionary containing query string parameters.
- `request.path_params`: A dictionary containing path parameters captured from the URL.
- `request.cookies`: A dictionary containing cookies sent with the request.
- `request.body`: The raw request body as bytes.
- `request.client_addr`: The IP address of the client (if available).

## Headers

Headers are accessed via a case-insensitive dictionary.

    @app.get("/debug")
    def debug_headers(request: Request):
        user_agent = request.headers.get("User-Agent")
        api_key = request.headers.get("X-API-Key")
        return {"ua": user_agent, "key": api_key}

## Query Parameters

Query parameters are easily accessible and support basic type coercion.

    @app.get("/search")
    def search(request: Request):
        q = request.query_params.get("q", "")
        page = int(request.query_params.get("page", 1))
        return {"query": q, "page": page}

## Body

Ignyx provides several ways to read the request body:

    @app.post("/submit")
    async def submit(request: Request):
        # Read raw bytes
        raw_bytes = request.body

        # Read as text
        text = request.text()

        # Read as parsed JSON
        data = request.json()

        return {"received": data}

## Cookies

Cookies are parsed into a simple dictionary.

    @app.get("/check-session")
    def check_session(request: Request):
        session_id = request.cookies.get("session_id")
        return {"session": session_id}

## Injecting Request

To use the `Request` object, simply add it to your handler parameters. Ignyx will automatically inject it.

    from ignyx import Request

    @app.get("/")
    def home(request: Request):
        return f"Hello, your path is {request.path}"

Note: You don't need to specify `Depends()` for the `Request` object; it is always available for injection by type alone.