anchor.diff:  {@link examples.GraphQLExamples#completionStageDataFetcher}
   ----
   
  -=== Fetching data with callback-based APIs
  +=== Working with callback-based APIs
   
   Implementing a data fetcher that returns a `CompletionStage` is not a complex task.
   But when you work with Vert.x callback-based APIs, it requires a bit of boilerplate.
  
positive.code: 
  TIP: The {@link io.vertx.ext.web.handler.graphql.GraphQLHandler} does not require a {@link io.vertx.ext.web.handler.BodyHandler} to read `POST` requests content.
  
  === GraphiQL client
  
  As you are building your application, testing your GraphQL queries in https://github.com/graphql/graphiql[GraphiQL] can be handy.
  
  
negative.code: 
  Please refer to the {@link io.vertx.ext.web.handler.graphql.GraphiQLHandlerOptions} documentation for further details.
  
  === Apollo WebSocketLink
  
  You can use an https://www.apollographql.com/docs/link/links/ws/[Apollo WebSocketLink] which connects over a websocket.
  This is specially useful if you want to add subscriptions to your GraphQL schema, but you can also use the websocket for queries and mutations.
  
  [source,$lang]
  ----
  {@link examples.GraphQLExamples#addApolloWsHandlerToRouter}
  ----
  
  IMPORTANT: To support the `graphql-ws` websocket subprotocol, it has to be added to the server configuration:
  
  [source,$lang]
  ----
  {@link examples.GraphQLExamples#configureServerForApolloWs}
  ----
  
  NOTE: If you want to support a WebSocketLink and a HttpLink in the same path, you can add the ApolloWSHandler in first place and then the GraphQLHandler.
  
  [source,$lang]
  ----
  {@link examples.GraphQLExamples#configureWebSocketLinkAndHttpLinkSamePath}
  ----
  
  Here you can find how to configure the Apollo SubscriptionClient: https://github.com/apollographql/subscriptions-transport-ws
  
  IMPORTANT: A subscription `DataFetcher` has to return a `org.reactivestreams.Publisher` instance.
  
  == Fetching data
  
  The GraphQL-Java API is very well suited for the asynchronous world: the asynchronous execution strategy is the default for queries (serial asynchronous for mutations).
  
  