GraphQL
Implements GraphQL over HTTP. Single POST /graphql endpoint with query and mutation routing. The serializer filters response fields to match the client’s selection set.
- Spec: graphql.org
- MIME:
application/json - Serializer:
GraphQLSerializer - Routing: Body-matched (single endpoint)
import crate.protocols.graphql.policy;
auto crateRouter = router.crateSetup!GraphQL;crateRouter.add(userCrate);Generated Operations
Section titled “Generated Operations”All operations use POST /graphql:
Queries:
user(id: ID!): User— get oneusers: [User]— list all
Mutations:
createUser(input: UserInput!): UserupdateUser(id: ID!, input: UserInput!): UserreplaceUser(id: ID!, input: UserInput!): UserdeleteUser(id: ID!): Boolean
Request Format
Section titled “Request Format”Query:
{ "query": "{ users { _id name email } }"}Mutation:
{ "query": "mutation { createUser(input: { name: \"Alice\" }) { _id name } }"}Field Selection
Section titled “Field Selection”The GraphQLSerializer filters the response to only include fields requested in the selection set. If you query { users { _id name } }, the response omits email and other fields.
Schema Introspection
Section titled “Schema Introspection”GraphQL registers a base operation via onRouterInit to handle schema introspection queries. The schema is built from all registered models.
Not Yet Supported
Section titled “Not Yet Supported”- Subscriptions: No WebSocket subscription support
- Fragments: No named fragment support
- Introspection: No
__schemaor__typequeries - Custom scalars: No custom scalar type definitions
- Directives: No
@deprecated,@skip,@include, or custom directives - Union / interface types: Not supported
- Batched queries: No multiple queries per request
Custom Base URL
Section titled “Custom Base URL”auto crateRouter = router.crateSetup!(GraphQLPolicy!(PolicyConfig("/api")));// Endpoint at POST /api/graphql