GraphQL es muy popular, muy potente, pero es fundamentalmente diferente de OData. Así que no es que ninguno sea absolutamente mejor que el otro.
Hay algunos puntos que puedo entender.
OData = SQL en URL
OData era una forma de serializar una sentencia SQL en una URL
Es difícil limitar la capacidad de consulta del lado del cliente.
OData Estandarizado
La especificación de OData es su fortaleza, igual que RPC lo hace con RESTful. RESTful tiene especificaciones y es fácil de entender, pero no es fácil expresarlo todo. RPC puede expresarlo todo, pero es demasiado poco estandarizado.
Fallos en OData
OData suele ser más preciso que el estado del esquema de la base de datos (así que es como SQL Query), y una vez que se cambia el esquema, es más difícil mantener la versión antigua.
OData prefiere la gestión unificada y es difícil de optimizar para casos especiales.
Mejor descrito
OData es como SQL Query, GraphQL es como un procedimiento almacenado. Saboreas despacio.
Por lo tanto, estos dos deben coexistir y complementarse.
resumen
OData es como SQL Query, GraphQL es como un procedimiento almacenado.
OData es como RESTful, y GraphQL es como RPC
Cuando quieres una unificación sencilla, encontrarás que RESTFul es genial, SQL Query es suficiente y OData es bueno.
Pero cuando tienes situaciones especiales y no puedes usar un método simple, RPC, un procedimiento almacenado, GraphQL resalta su encanto.
Veamos los escenarios de uso de ambos bandos. OData tiende a ser una API para aplicaciones empresariales, como SAP. Normalmente el patrón de base de datos más simple y relacional.
GraphQL es una aplicación de Internet, una API expuesta y cualquier tipo de datos (como NoSQL)
Así que, en resumen, GraphQL puede expresar más (más libremente) que OData, OData tiene reglas (más restricciones) que GraphQL
Cuál es, o GraphQL para el mundo exterior, o OData para el interno, realmente depende del proyecto para usarla.