Нещодавно я дізнався про 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 RFC потрібно переглянути для REST, щоб мати сенс: обмеження довжини рядків запитів змішує реалізацію із специфікацією на самому початку)
Перевага видачі SQL від клієнта також має перевагу
- Не потрібен код / бібліотека на сервері для розбору GraphQL, скорочуючи час розробки.
- Не потрібні накладні на стороні сервера для розбору GraphQL, скорочуючи час виконання.
- Операції SQL набагато гнучкіші, ніж GraphQL, оскільки (у більшості випадків) останні в будь-якому випадку зменшаться до SQL.
- Усі знають SQL.
Отже, які переваги має GraphQL перед SQL?