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());
});