Recentemente ho appreso di GraphQL che afferma di essere superiore a RESTful. Tuttavia, ho iniziato a chiedermi perché non inseriamo semplicemente le istruzioni SQL in una richiesta HTTP GET.
Ad esempio, in GraphQL vorrei scrivere
{
Movie(id: "cixos5gtq0ogi0126tvekxo27") {
id
title
actors {
name
}
}
}
Che non è molto più semplice della sua controparte SQL
SELECT id, title FROM movies WHERE id = cixos5gtq0ogi0126tvekxo27;
SELECT actors.name FROM actors, actors_movies WHERE actors.id == movies.actor_id AND movie.id == cixos5gtq0ogi0126tvekxo27;
Forse possiamo codificare l'URL della query e inviarla al server
GET endpoint?q=SELECT%20id%2C%20title%20FROM%20movies%20WHERE%20id%20%3D%20cixos5gtq0ogi0126tvekxo27%3B%0ASELECT%20actors.name%20FROM%20actors%2C%20actors_movies%20WHERE%20actors.id%20%3D%3D%20movies.actor_id%20AND%20movie.id%20%3D%3D%20cixos5gtq0ogi0126tvekxo27%3B HTTP/1.1
Sì, l'URL della query può essere troppo lungo, ma puoi inserirlo nel corpo di una richiesta POST se non ti interessa la conformità REST. (A proposito, penso che l'RFC HTTP debba essere rivisto perché REST abbia un senso: limitare la lunghezza delle stringhe di query mescola l'implementazione con le specifiche all'inizio)
Anche l'emissione diretta di SQL dal client ha il vantaggio di
- Non è necessario alcun codice / libreria sul lato server per analizzare GraphQL, riducendo i tempi di sviluppo.
- Non è necessario alcun sovraccarico sul lato server per analizzare GraphQL, riducendo il tempo di esecuzione.
- Le istruzioni SQL sono molto più flessibili di GraphQL perché (nella maggior parte dei casi) queste ultime si ridurranno comunque a SQL.
- Tutti conoscono SQL.
Quindi, quali sono i vantaggi di GraphQL rispetto a SQL?