My version of this:
With JCL, it is as easy to read 1000 tapes as it is to read one tape.
For JCL, substitute the all-singing API of your choice.
On the other hand you can spend a very long time writing code that actually responds
correctly to all the failure cases in, say, a TCP stream connection.