pythonasyncioapiasyncfastapiframeworkjsonjson-schemaopenapiopenapi3pydanticpython-typespython3redocreststarletteswaggerswagger-uiuvicornweb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
5.9 KiB
118 lines
5.9 KiB
--- a/fastapi/routing.py
|
|
+++ b/fastapi/routing.py
|
|
@@ -2581,6 +2581,89 @@ class APIRouter:
|
|
generate_unique_id_function=generate_unique_id_function,
|
|
)
|
|
|
|
+ def query(
|
|
+ self,
|
|
+ path: Annotated[
|
|
+ str,
|
|
+ Doc(
|
|
+ """
|
|
+ The URL path to be used for this *path operation*.
|
|
+
|
|
+ For example, in `http://example.com/items`, the path is `/items`.
|
|
+ """
|
|
+ ),
|
|
+ ],
|
|
+ *,
|
|
+ response_model: Annotated[
|
|
+ Any,
|
|
+ Doc(
|
|
+ """
|
|
+ The type to use for the response.
|
|
+
|
|
+ It could be any valid Pydantic *field* type. So, it doesn't have to
|
|
+ be a Pydantic model, it could be other things, like a `list`, `dict`,
|
|
+ etc.
|
|
+
|
|
+ It will be used for:
|
|
+
|
|
+ * Documentation: the generated OpenAPI (and the UI at `/docs`) will
|
|
+ show it as the response (JSON Schema).
|
|
+ * Serialization: you could return an arbitrary object and the
|
|
+ `response_model` would be used to serialize that object into the
|
|
+ corresponding JSON.
|
|
+ * Filtering: the JSON sent to the client will only contain the data
|
|
+ (fields) defined in the `response_model`. If you returned an object
|
|
+ that contains an attribute `password` but the `response_model` does
|
|
+ not include that field, the JSON sent to the client would not have
|
|
+ that `password`.
|
|
+ * Validation: whatever you return will be serialized with the
|
|
+ `response_model`, converting any data as necessary to generate the
|
|
+ corresponding JSON. But if the data in the object returned is not
|
|
+ valid, that would mean a violation of the contract with the client,
|
|
+ so it's an error from the API developer. So, FastAPI will raise an
|
|
+ error and return a 500 error code (Internal Server Error).
|
|
+
|
|
+ Read more about it in the
|
|
+ [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
|
|
+ """
|
|
+ ),
|
|
+ ] = Default(None),
|
|
+ status_code: Annotated[Optional[int], Doc("HTTP status code for the response")] = None,
|
|
+ tags: Annotated[Optional[List[Union[str, Enum]]], Doc("OpenAPI tags")] = None,
|
|
+ dependencies: Annotated[Optional[Sequence[params.Depends]], Doc("Dependencies")] = None,
|
|
+ summary: Annotated[Optional[str], Doc("OpenAPI summary")] = None,
|
|
+ description: Annotated[Optional[str], Doc("OpenAPI description")] = None,
|
|
+ response_description: Annotated[str, Doc("OpenAPI response description")] = "Successful Response",
|
|
+ responses: Annotated[Optional[Dict[Union[int, str], Dict[str, Any]]], Doc("Additional responses")] = None,
|
|
+ deprecated: Annotated[Optional[bool], Doc("Mark as deprecated")] = None,
|
|
+ operation_id: Annotated[Optional[str], Doc("OpenAPI operation ID")] = None,
|
|
+ response_model_include: Annotated[Optional[IncEx], Doc("Fields to include")] = None,
|
|
+ response_model_exclude: Annotated[Optional[IncEx], Doc("Fields to exclude")] = None,
|
|
+ response_model_by_alias: Annotated[bool, Doc("Use field aliases")] = True,
|
|
+ response_model_exclude_unset: Annotated[bool, Doc("Exclude unset fields")] = False,
|
|
+ response_model_exclude_defaults: Annotated[bool, Doc("Exclude default values")] = False,
|
|
+ response_model_exclude_none: Annotated[bool, Doc("Exclude None values")] = False,
|
|
+ include_in_schema: Annotated[bool, Doc("Include in OpenAPI schema")] = True,
|
|
+ response_class: Annotated[
|
|
+ Union[Type[Response], DefaultPlaceholder],
|
|
+ Doc("Response class to use"),
|
|
+ ] = Default(JSONResponse),
|
|
+ name: Annotated[Optional[str], Doc("Name for the operation")] = None,
|
|
+ callbacks: Annotated[Optional[List[BaseRoute]], Doc("OpenAPI callbacks")] = None,
|
|
+ openapi_extra: Annotated[Optional[Dict[str, Any]], Doc("Extra OpenAPI data")] = None,
|
|
+ generate_unique_id_function: Annotated[
|
|
+ Callable[[APIRoute], str], Doc("Function to generate unique IDs")
|
|
+ ] = Default(generate_unique_id),
|
|
+ ) -> Callable[[DecoratedCallable], DecoratedCallable]:
|
|
+ """
|
|
+ Add a *path operation* using an HTTP QUERY operation.
|
|
+
|
|
+ The QUERY method is a safe HTTP method that allows request bodies,
|
|
+ useful for complex queries that exceed URL length limits.
|
|
+
|
|
+ See: https://www.ietf.org/archive/id/draft-ietf-httpbis-safe-method-w-body-02.html
|
|
+ """
|
|
+ return self.api_route(
|
|
+ path=path,
|
|
+ response_model=response_model,
|
|
+ status_code=status_code,
|
|
+ tags=tags,
|
|
+ dependencies=dependencies,
|
|
+ summary=summary,
|
|
+ description=description,
|
|
+ response_description=response_description,
|
|
+ responses=responses,
|
|
+ deprecated=deprecated,
|
|
+ methods=["QUERY"],
|
|
+ operation_id=operation_id,
|
|
+ response_model_include=response_model_include,
|
|
+ response_model_exclude=response_model_exclude,
|
|
+ response_model_by_alias=response_model_by_alias,
|
|
+ response_model_exclude_unset=response_model_exclude_unset,
|
|
+ response_model_exclude_defaults=response_model_exclude_defaults,
|
|
+ response_model_exclude_none=response_model_exclude_none,
|
|
+ include_in_schema=include_in_schema,
|
|
+ response_class=response_class,
|
|
+ name=name,
|
|
+ callbacks=callbacks,
|
|
+ openapi_extra=openapi_extra,
|
|
+ generate_unique_id_function=generate_unique_id_function,
|
|
+ )
|
|
+
|
|
def delete(
|
|
self,
|
|
path: Annotated[
|
|
|