GraphQL дуже популярний, дуже потужний, але він принципово відрізняється від OData. Тож справа не в тому, що жоден з них однозначно кращий за інший.
Є кілька думок, які я можу зрозуміти.
OData = SQL у URL
OData був способом серіалізувати SQL-оператор у URL
Важко обмежити можливості запитів на стороні клієнта.
Стандартизований OData
Специфікація OData — це її сильна сторона, так само як RPC робить із RESTful. RESTful має специфікації і простий для розуміння, але не так просто висловити все. RPC може виразити все, але він надто нестандартизований.
Недоліки OData
OData зазвичай жорсткіший за стан схеми бази даних (тобто це як SQL Query), і після зміни схеми підтримувати стару версію стає складніше.
OData віддає перевагу уніфікованому управлінню, і його важко оптимізувати для особливих випадків.
Найкраще описано
OData — це як SQL Query, GraphQL — це як збережена процедура. Ти повільно смакуєш.
Отже, ці два варіанти мають співіснувати і доповнювати одне одного.
зведення
OData — це як SQL Query, GraphQL — це як збережена процедура.
OData — це як RESTful, а GraphQL — як RPC
Якщо вам потрібна проста уніфікація, RESTFul чудовий, SQL Query достатній, OData — хороший.
Але коли у вас є особливі ситуації і ви не можете скористатися простим методом, RPC, збереженою процедурою, GraphQL підкреслює свою привабливість.
Давайте розглянемо сценарії використання обох сторін. OData схильна бути API для корпоративних додатків, таких як SAP. Зазвичай це простіший реляційний шаблон бази даних.
GraphQL — це інтернет-додаток, відкритий API та будь-який інший тип даних (наприклад, NoSQL)
Отже, підсумовуючи, GraphQL може виражати більше (вільніше), ніж OData, OData має правила (більше обмежень), ніж GraphQL
Який із них — GraphQL для зовнішнього світу, або OData для внутрішньої — все залежить від проєкту, який це використовуватиме.