🎨 Auto format

This commit is contained in:
pre-commit-ci-lite[bot] 2025-11-26 05:31:59 +00:00 committed by GitHub
parent f5d77e5b4a
commit b419cf06a1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 9 additions and 7 deletions

View File

@ -1,4 +1,4 @@
# HTTP QUERY
# HTTP QUERY { #http-query }
Typically, when you want to read data you use `GET`. If you need to send complex data (like a large JSON object) to filter that data, you traditionally had to use `POST` because `GET` requests does not support request bodies.
@ -6,7 +6,7 @@ However, using `POST` for read-only operations isn't semantically correct, as `P
There is a newer HTTP method called **QUERY**. It is designed exactly for this: performing safe, idempotent read operations that require a request body.
## Using `QUERY`
## Using `QUERY` { #using-query }
In **FastAPI**, you can use the `QUERY` method using the `@app.query()` decorator.
@ -15,16 +15,15 @@ It works similarly to `@app.post()`, allowing you to receive Pydantic models in
{* ../../docs_src/http_query/tutorial001.py hl[7] *}
### Testing it
### Testing it { #testing-it }
You can test it using an HTTP client that supports the `QUERY` method.
Because it allows a body, you can send complex filters without hitting URL length limits common with `GET` query parameters.
### Technical Details
### Technical Details { #technical-details }
The `QUERY` method is defined in the [IETF HTTP QUERY Method Draft](https://www.ietf.org/archive/id/draft-ietf-httpbis-safe-method-w-body-02.html). It is considered:
* **Safe**: It does not alter the state of the server (read-only).
* **Idempotent**: Making the same request multiple times yields the same result.

View File

@ -14,4 +14,4 @@ class ItemSearch(BaseModel):
@app.query("/items/")
async def search_items(search_params: ItemSearch):
return {"message": "Searching items", "search_params": search_params}
return {"message": "Searching items", "search_params": search_params}

View File

@ -29,4 +29,7 @@ def test_openapi_schema():
assert "query" in schema["paths"]["/items/"]
operation = schema["paths"]["/items/"]["query"]
assert "requestBody" in operation
assert "ItemSearch" in operation["requestBody"]["content"]["application/json"]["schema"]["$ref"]
assert (
"ItemSearch"
in operation["requestBody"]["content"]["application/json"]["schema"]["$ref"]
)