Kürzlich habe ich GraphQL kennengelernt, das RESTful überlegen sein soll. Ich habe mich jedoch gefragt, warum wir nicht einfach SQL-Anweisungen in eine HTTP-GET-Anforderung einfügen.
Zum Beispiel würde ich in GraphQL schreiben
{
Movie(id: "cixos5gtq0ogi0126tvekxo27") {
id
title
actors {
name
}
}
}
Das ist nicht viel einfacher als sein SQL-Gegenstück
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;
Vielleicht können wir die Anfrage per URL verschlüsseln und an den Server senden
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
Ja, die Abfrage-URL kann zu lang sein, Sie können sie jedoch in den Text einer POST-Anforderung einfügen, wenn Sie sich nicht um die REST-Konformität kümmern. (Übrigens, ich denke, der HTTP-RFC muss überarbeitet werden, damit REST Sinn macht: Das Begrenzen der Länge von Abfragezeichenfolgen mischt die Implementierung mit der Spezifikation am Anfang.)
Das direkte Ausgeben von SQL vom Client hat auch den Vorteil von
- Zum Parsen von GraphQL ist kein serverseitiger Code / keine serverseitige Bibliothek erforderlich, wodurch die Entwicklungszeit verkürzt wird.
- Zum Parsen von GraphQL ist kein serverseitiger Overhead erforderlich, wodurch die Laufzeit verringert wird.
- SQL-Anweisungen sind viel flexibler als GraphQL, da letztere (in den meisten Fällen) ohnehin auf SQL reduziert werden.
- Jeder kennt SQL.
Welche Vorteile hat GraphQL gegenüber SQL?