Ostatnio dowiedziałem się o GraphQL, który twierdzi, że jest lepszy od RESTful. Zacząłem się jednak zastanawiać, dlaczego po prostu nie umieszczamy instrukcji SQL w żądaniu HTTP GET.
Na przykład w GraphQL napisałbym
{
Movie(id: "cixos5gtq0ogi0126tvekxo27") {
id
title
actors {
name
}
}
}
Co nie jest dużo prostsze niż jego odpowiednik 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;
Może możemy zakodować zapytanie i wysłać kod na serwer
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
Tak, adres URL zapytania może być zbyt długi, ale możesz go umieścić w treści żądania POST, jeśli nie zależy Ci na zgodności z REST. (Nawiasem mówiąc, myślę, że RFC HTTP musi zostać zmieniony, aby REST miał sens: ograniczenie długości ciągów zapytań powoduje mieszanie implementacji ze specyfikacją na samym początku)
Zaletą jest także bezpośrednie wydawanie kodu SQL od klienta
- Do analizowania GraphQL nie jest wymagany kod / biblioteka po stronie serwera, co skraca czas programowania.
- Do przeanalizowania GraphQL nie jest potrzebny narzut po stronie serwera, co skraca czas działania.
- Instrukcje SQL są znacznie bardziej elastyczne niż GraphQL, ponieważ (w większości przypadków) te ostatnie i tak zredukują się do SQL.
- Wszyscy znają SQL.
Jakie zalety ma GraphQL w stosunku do SQL?