Recentemente, eu aprendi sobre o GraphQL, que afirma ser superior ao RESTful. No entanto, comecei a me perguntar por que simplesmente não colocamos instruções SQL em uma solicitação HTTP GET.
Por exemplo, no GraphQL eu escreveria
{
Movie(id: "cixos5gtq0ogi0126tvekxo27") {
id
title
actors {
name
}
}
}
O que não é muito mais simples que seu equivalente 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;
Talvez possamos codificar a consulta por URL e enviar para o 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
Sim, o URL da consulta pode ser muito longo, mas você pode colocá-lo no corpo de uma solicitação POST se não se importar com a conformidade com REST. (A propósito, acho que o RFC HTTP precisa ser revisado para que o REST faça sentido: limitar o tamanho das cadeias de consulta mistura implementação com especificação no início)
A emissão direta de SQL do cliente também tem a vantagem de
- Nenhum código / biblioteca do lado do servidor é necessário para analisar o GraphQL, reduzindo o tempo de desenvolvimento.
- Nenhuma sobrecarga do lado do servidor é necessária para analisar o GraphQL, reduzindo o tempo de execução.
- As instruções SQL são muito mais flexíveis que o GraphQL porque (na maioria dos casos) as últimas serão reduzidas para SQL de qualquer maneira.
- Todo mundo conhece SQL.
Então, quais são as vantagens do GraphQL sobre o SQL?