How and why to provide event-driven streaming APIs