How to implement API pagination patterns for single and composite result sets

When surfacing data from systems of record, one of the concerns designers and developers need to address is the potential of retrieving an enormous number of results in a single load session. This requires significant processing power on both the client and server sides and network traffic, and can degrade the overall data consumption and experience.
There are different approaches to address this concern, but one of the most widely used is the concept of pagination.