Start here. This is the direct spoken answer to practice first.
Why this question matters
Streaming processes or transfers data in bounded chunks instead of retaining the full payload. It changes API behavior around cancellation, partial progress, timeouts, cleanup, and error reporting, but keeps memory predictable as payload size and concurrency grow.
I would stream when the data can be processed or sent in chunks and the full payload does not need to be in memory at once. File uploads, downloads, exports, and large query results are common examples. Streaming keeps memory bounded per request and reduces large allocations. I would still add limits, cancellation handling, and error behavior because streaming does not remove the need for resource control.