GraphQL ist sehr beliebt, sehr leistungsfähig, aber es unterscheidet sich grundlegend von OData. Es ist also nicht so, dass einer absolut besser ist als der andere.
Es gibt ein paar Punkte, die ich verstehen kann.
OData = SQL in URL
OData war eine Möglichkeit, eine SQL-Anweisung in eine URL zu serialisieren
Es ist schwierig, die Abfragefähigkeit der Client-Seite einzuschränken.
OData Standardisiert
Die Spezifikation von OData ist seine Stärke, genau wie RPC bei RESTful. RESTful hat Spezifikationen und ist leicht verständlich, aber es ist nicht einfach, alles auszudrücken. RPC kann alles ausdrücken, ist aber zu unstandardisiert.
Schwächen von OData
OData ist meist enger als der Datenbankschema-Zustand (es ist also wie SQL Query), und sobald das Schema geändert wurde, ist es schwieriger, die alte Version aufrechtzuerhalten.
OData bevorzugt eine einheitliche Verwaltung und ist schwierig, sie für Spezialfälle zu optimieren.
Am besten beschrieben
OData ist wie SQL Query, GraphQL ist wie gespeicherte Prozeduren. Du schmeckst langsam.
Daher müssen diese beiden koexistieren und sich ergänzen.
Zusammenfassung
OData ist wie SQL Query, GraphQL ist wie gespeicherte Prozeduren.
OData ist wie RESTful, und GraphQL ist wie RPC
Wenn du eine einfache Vereinheitlichung möchtest, wirst du RESTFul großartig finden, SQL Query reicht aus, OData ist gut.
Aber wenn du spezielle Situationen hast und keine einfache Methode, RPC oder gespeichertes Verfahren verwenden kannst, hebt GraphQL seinen Charme hervor.
Schauen wir uns die Nutzungsszenarien beider Seiten an. OData ist dazu geneigt, eine API für Unternehmensanwendungen wie SAP zu sein. In der Regel das einfachere, relationale Datenbankmuster.
GraphQL ist eine Internetanwendung, eine offene API und eine beliebige Art von Daten (wie NoSQL)
Zusammenfassend kann GraphQL mehr (freier) ausdrücken als OData, OData hat Regeln (mehr Einschränkungen) als GraphQL
Was es ist, GraphQL für die Außenwelt, oder OData für das Interne, hängt wirklich vom Projekt ab, das es nutzt.