GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.
I like GraphQL. The learning curve is high, espcially if you're trying to create a server, but it's ability to drill down and pull the exact data you need is really cool. I've opted to jump straight in and learn how to create GraphQL servers using Typescript, so the focus will be there.
TypeGraphQL — Framework for defining GraphQL schemas in Typescript.
TypeORM — ORM that syncs well with TypeGraphQL.
Example that shows a schema using both TypeGraphQL and TypeORM: https://github.com/MichalLytek/type-graphql/tree/v1.0.0/examples/typeorm-lazy-relation
For reference: https://graphql.org/learn/queries/
For pagination: https://github.com/wemaintain/auto-relay