Récemment, j'ai découvert GraphQL qui prétend être supérieur à RESTful. Cependant, j'ai commencé à me demander pourquoi ne mettons-nous pas simplement des instructions SQL dans une requête HTTP GET.
Par exemple, dans GraphQL j'écrirais
{
Movie(id: "cixos5gtq0ogi0126tvekxo27") {
id
title
actors {
name
}
}
}
Ce qui n'est pas beaucoup plus simple que son homologue 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;
Peut-être pouvons-nous encoder la requête par URL et l'envoyer au serveur
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
Oui, l'URL de la requête peut être trop longue, mais vous pouvez la placer dans le corps d'une demande POST si vous ne vous souciez pas de la conformité REST. (Soit dit en passant, je pense que le RFC HTTP doit être révisé pour que REST ait un sens: le plafonnement de la longueur des chaînes de requête mélange l'implémentation avec la spécification au tout début)
L'émission directe de SQL à partir du client présente également l'avantage de
- Aucun code / bibliothèque côté serveur n'est requis pour analyser GraphQL, ce qui réduit le temps de développement.
- Aucune surcharge côté serveur n'est nécessaire pour analyser GraphQL, ce qui réduit le temps d'exécution.
- Les instructions SQL sont beaucoup plus flexibles que GraphQL car (dans la plupart des cas) ce dernier se réduira de toute façon à SQL.
- Tout le monde connaît SQL.
Alors, quels sont les avantages de GraphQL sur SQL?