Skip to content

Incremental Delivery and Streaming (@defer)

Modern GraphQL servers can stream slow or expensive fields incrementally using the @defer directive over a multipart/mixed HTTP connection.

ESP32-HTTP-Client processes each chunk directly from the incoming network stream using BufferedStreamReader, so memory usage remains minimal even for large responses.


Example with @defer

const char* queryWithDefer =
    "query GetDashboard {\n"
    "  status\n"
    "  ... @defer {\n"
    "    heavyLogData { timestamp message }\n"
    "  }\n"
    "}";

String initialStatus;

client.graphql("/graphql")
    .query(queryWithDefer)
    .getData("status", &initialStatus)
    .onIncremental([](const GraphQLIncrementalPayload& payload) {
      Serial.printf("Chunk received for path '%s' (hasNext: %d)\n",
                    payload.path.c_str(),
                    payload.hasNext);
      Serial.printf("Data: %s\n", payload.data.c_str());
    });