Для внутреннего апи (например когда все клиенты пишутся в той же компании, что и апи) различные RPC протоколы (например тот же grpc) будут эффективнее.
гибко задавать список необходимых полей сущностей
Нормально спроектированное RPC в принципе не отдает ничего лишнего, при этом минимизирует потребность нескольких вызовов за раз. Это позволяет делать апи с минимально возможными издержками.
С GraphQL же придется сильно запарится, чтоб вот те данные из разных таблиц дергались через JOIN, а не через N запросов с постобработкой.
С другой стороны, если апи публичное, то общепринятые вещи типа GraphQL или REST будут предпочтительнее.