GraphQL is a query language for APIs. Clients specify exactly what data they need and the server returns that data. This contrasts with REST APIs where the server defines what data is returned. A REST endpoint might return user data with name, email, age, address. A client that only needs the name gets the other fields too, over-fetching.
A client that needs the name and avatar gets address instead, under-fetching. With GraphQL, the client specifies the shape of the response. Request name, get name. Request name and avatar, get name and avatar. The server returns only what's requested. GraphQL is strongly typed. The server defines a schema. Every field has a type. Every query is validated against the schema before execution.
This enables powerful tooling. IDEs can autocomplete GraphQL queries. Testing tools can validate requests. Documentation is automatically generated. GraphQL is particularly good for mobile applications with bandwidth constraints. The client specifies minimal data needs. GraphQL reduces payload size and latency. Developed by Facebook, GraphQL is now industry standard.
It's more complex to implement than REST, but the developer experience is superior. For new APIs, GraphQL is worth considering.