GraphQL är mycket populärt, mycket kraftfullt, men det är fundamentalt annorlunda än OData. Så det är inte så att någon är absolut bättre än den andra.
Det finns några poänger jag kan förstå.
OData = SQL i URL
OData var ett sätt att serialisera en SQL-sats till en URL
Det är svårt att begränsa klientsidans frågeförmåga.
OData Standardiserad
ODatas specifikation är dess styrka, precis som RPC gör med RESTful. RESTful har specifikationer och är lätt att förstå, men det är inte lätt att uttrycka allt. RPC kan uttrycka allt, men det är för ostandardiserat.
Brister i OData
OData är vanligtvis tajtare än databasens schematillstånd (så det är som SQL Query), och när schemat väl ändras är det svårare att underhålla den gamla versionen.
OData föredrar enhetlig hantering, och det är svårt att optimera för specialfall.
Bäst beskrivet
OData är som SQL Query, GraphQL är som en lagrad procedur. Du smakar långsamt.
Därför måste dessa två samexistera och komplettera varandra.
sammanfattning
OData är som SQL Query, GraphQL är som en lagrad procedur.
OData är som RESTful, och GraphQL är som RPC
När du vill ha enkel unifikation kommer du att tycka att RESTFul är bra, SQL Query räcker, OData är bra.
Men när du har speciella situationer och inte kan använda en enkel metod, RPC, stored procedure, framhäver GraphQL sin charm.
Låt oss titta på användningsscenarierna för båda sidor. OData tenderar att vara ett API för företagsapplikationer, såsom SAP. Vanligtvis det enklare, relationella databasmönstret.
GraphQL är en internetapplikation, ett exponerat API och en vilken typ av data som helst (såsom NoSQL)
Så sammanfattningsvis kan GraphQL uttrycka mer (friare) än OData, OData har regler (fler begränsningar) än GraphQL
Vilket är det, eller GraphQL för den yttre världen, eller OData för det interna, det beror verkligen på vilket projekt som använder det.