Table of contents : GraphQL with Java and Spring GraphQL with Java and Spring Prologue Andi (Andreas) Donna About this book Introduction Your first Spring for GraphQL service What is GraphQL? A brief history of GraphQL From GraphQL Java to Spring for GraphQL Overview Three layers Schema and SDL GraphQL query language Request and Response Execution and DataFetcher How concepts relate to each other GraphQL Java Spring for GraphQL Schema Schema-first Loading schema resources in Spring for GraphQL GraphQL schema elements GraphQL types Fields everywhere Scalar Enum Object Input object Interface Union List and NonNull Directives Arguments Documentation with descriptions Comments GraphQL query language Literals Operations Query operations Mutation operations Subscription operations Arguments Fragments Inline fragments Variables Aliases GraphQL document Named and unnamed operations Query language in GraphQL Java DataFetchers Spring for GraphQL annotated methods PropertyDataFetchers in Spring for GraphQL DataFetchers and schema mapping handler methods TypeResolver in Spring for GraphQL Arguments in Spring for GraphQL More Spring for GraphQL inputs Adding custom scalars in Spring for GraphQL Under the hood: DataFetchers inside GraphQL Java DataFetchers in GraphQL Java Source objects in GraphQL Java RuntimeWiring in GraphQL Java Creating an executable schema in GraphQL Java TypeResolver in GraphQL Java Building a GraphQL service Spring for GraphQL GraphQL Java Spring WebFlux or Spring MVC Reading schemas Configuration properties Expanding our Spring for GraphQL service Pet schema Controllers Fetching data from an external service Source object GraphQL arguments Mutations Unions, interfaces, and TypeResolver Subscriptions Getting started Execution Protocol Client support Request and response Transport protocols and serialization Request Response HTTP status codes HTTP headers Intercepting requests GraphQL errors Request errors Field errors How errors appear in the response Error classifications How to return errors Throw exception during DataFetcher invocation Customizing exception resolution Return data and errors with DataFetcherResult Schema design Schema-first and implementation-agnostic Evolution over versioning Connected Schema elements are cheap Nullable fields Nullable input fields and arguments Pagination for lists with Relay’s cursor connection specification Relay’s cursor connections specification Schema Query and response Requesting more pages Key concepts of Relay’s cursor connections specification Expected errors Mutation format Naming standards DataFetchers in depth More DataFetcher inputs Global context Local context DataFetcher implementation patterns Spring for GraphQL Reactor support Directives Schema and operation directives Built-in directives @skip and @include @deprecated @specifiedBy Defining your own schema and operation directives Defining schema directives Defining operation directives Repeatable directives Implementing logic for schema directives Changing execution logic with schema directives Validation with schema directives Adding metadata with schema directives Implementing logic for operation directives Execution Initializing execution objects How Spring for GraphQL starts execution Execution steps Parsing and validation Coercing variables Fetching data Reactive concurrency-agnostic Completing a field TypeResolver Query vs mutation Instrumentation Instrumentation in Spring for GraphQL Writing a custom instrumentation InstrumentationContext InstrumentationState ChainedInstrumentation Built-in instrumentations List of instrumentation hooks DataLoader The n+1 problem Solving the n+1 problem DataLoader overview DataLoader and GraphQL Java DataLoader and Spring for GraphQL @BatchMapping method signature Testing Unit testing DataFetcher GraphQlTester document or documentName GraphQlTester.Request and execute GraphQlTester.Response, path, entity, entityList errors Testing different layers End-to-end over HTTP Application test WebGraphQlHandler test ExecutionGraphQlService test Focused GraphQL testing with @GraphQlTest Subscription testing Testing recommendations Security Securing a Spring for GraphQL service Spring for GraphQL support for security Method security Testing auth Java client HTTP client WebSocket client GraphQlClient