Недавно я узнал о GraphQL, который утверждает, что превосходит RESTful. Тем не менее, я начал задаваться вопросом, почему бы нам просто не поместить операторы SQL в запрос HTTP GET.
Например, в GraphQL я бы написал
{
Movie(id: "cixos5gtq0ogi0126tvekxo27") {
id
title
actors {
name
}
}
}
Что не намного проще, чем его аналог 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;
Может быть, мы можем URL-кодировать запрос и отправить на сервер
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
Да, URL-адрес запроса может быть слишком длинным, но вы можете поместить его в тело запроса POST, если вас не заботит соответствие REST. (Кстати, я думаю, что HTTP RTC необходимо пересмотреть, чтобы REST имел смысл: ограничение длины строк запроса смешивает реализацию со спецификацией в самом начале)
Непосредственная выдача SQL от клиента также имеет преимущество
- Не требуется серверный код / библиотека для анализа GraphQL, что сокращает время разработки.
- Для анализа GraphQL не требуются служебные данные на стороне сервера, что сокращает время выполнения.
- SQL-операторы гораздо более гибкие, чем GraphQL, потому что (в большинстве случаев) последний в любом случае сведется к SQL.
- Все знают SQL.
Итак, каковы преимущества GraphQL перед SQL?