Expand description
Axum extraction and response conversion for GraphQL handlers.
Applications own routing, shared schema/dispatcher state, and per-request
Context construction. GraphQLRequest extracts a runtime request;
GraphQLResponse converts the result of necrassrs::execute to HTTP.
§Handler integration
use axum::{Router, extract::State, routing::post};
use necrassrs::{Dispatcher, Schema, Valid};
use necrassrs_axum::{GraphQLRequest, GraphQLResponse, negotiate_response};
use std::sync::Arc;
struct App<D> { schema: Valid<Schema>, dispatcher: D }
async fn graphql<D: Dispatcher<()> + Send + Sync + 'static>(
State(state): State<Arc<App<D>>>,
GraphQLRequest(request): GraphQLRequest,
) -> GraphQLResponse {
let context = (); // Replace with application-owned request Context.
GraphQLResponse(necrassrs::execute(
&state.schema, &request, &state.dispatcher, &context,
).await)
}
fn app<D: Dispatcher<()> + Send + Sync + 'static>(state: Arc<App<D>>) -> Router {
Router::new().route("/graphql", post(graphql::<D>).route_layer(axum::middleware::from_fn(negotiate_response))).with_state(state)
}§HTTP behavior
Mount application-owned handlers with post. Request bodies are JSON with
query, optional variables, and optional operationName. Axum accepts
application/json and JSON suffix media types. Its default 2 MiB body
limit applies; an application can set a different DefaultBodyLimit.
Malformed JSON receives 400, invalid JSON fields receive 422, unsupported
content types receive 415, and oversized bodies receive 413. Route methods
other than POST receive Axum’s 405. GraphQL syntax errors receive 400;
other GraphQL request errors receive 422. Execution results, including
domain errors, receive 200. Mount negotiate_response on GraphQL routes
to negotiate responses using Accept. Extractor failures retain Axum’s
rejection response and are not relabeled as GraphQL responses.
Structs§
- GraphQL
Request - A GraphQL request parsed from an Axum JSON request body.
- GraphQL
Response - Converts a completed runtime response to an HTTP response.
Functions§
- graphiql_
html - A GraphiQL page configured to send requests to an application-owned endpoint.
- negotiate_
response - Negotiates the response media type for an application-owned GraphQL route.