Recientemente aprendí sobre GraphQL que dice ser superior a RESTful. Sin embargo, comencé a preguntarme por qué no simplemente ponemos declaraciones SQL en una solicitud HTTP GET.
Por ejemplo, en GraphQL escribiría
{
Movie(id: "cixos5gtq0ogi0126tvekxo27") {
id
title
actors {
name
}
}
}
Lo cual no es mucho más simple que su contraparte 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;
Tal vez podamos codificar con URL la consulta y enviarla al servidor
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í, la URL de consulta puede ser demasiado larga, pero puede incluirla en el cuerpo de una solicitud POST si no le importa el cumplimiento de REST. (Por cierto, creo que el RFC de HTTP necesita ser revisado para que REST tenga sentido: limitar la longitud de las cadenas de consulta combina la implementación con la especificación desde el principio)
La emisión directa de SQL desde el cliente también tiene la ventaja de
- No se requiere código / biblioteca del lado del servidor para analizar GraphQL, lo que reduce el tiempo de desarrollo.
- No se necesita una sobrecarga del lado del servidor para analizar GraphQL, lo que reduce el tiempo de ejecución.
- Las declaraciones SQL son mucho más flexibles que GraphQL porque (en la mayoría de los casos) este último se reducirá a SQL de todos modos.
- Todos conocen SQL.
Entonces, ¿qué ventajas tiene GraphQL sobre SQL?