Geçenlerde RESTful'dan daha üstün olduğunu iddia eden GraphQL'i öğrendim. Ancak, neden SQL ifadelerini bir HTTP GET isteğine koymadığımızı merak etmeye başladım.
Örneğin, GraphQL'de
{
Movie(id: "cixos5gtq0ogi0126tvekxo27") {
id
title
actors {
name
}
}
}
Hangi SQL karşılığı daha basit değil
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;
Belki sorguyu URL olarak kodlayabilir ve sunucuya gönderebiliriz
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
Evet, sorgu URL'si çok uzun olabilir, ancak REST uyumluluğunu önemsemiyorsanız bir POST isteğinin gövdesine koyabilirsiniz. (Bu arada, REST'in mantıklı olması için HTTP RFC'nin revize edilmesi gerektiğini düşünüyorum: sorgu dizelerinin uzunluğunu sınırlamak, uygulamayı en başta spesifikasyon ile karıştırıyor)
SQL'in istemciden doğrudan yayınlanması,
- GraphQL'i ayrıştırmak için sunucu tarafı kod / kütüphane gerekmez, bu da geliştirme süresini azaltır.
- GraphQL'i ayrıştırmak ve çalışma zamanını azaltmak için sunucu tarafı ek yüke gerek yoktur.
- SQL ifadeleri GraphQL'den çok daha esnektir, çünkü (çoğu durumda) ikincisi yine de SQL'e düşer.
- Herkes SQL'i bilir.
Peki, GraphQL'in SQL'e göre avantajları nelerdir?