Gần đây tôi đã biết về GraphQL, tuyên bố là vượt trội so với RESTful. Tuy nhiên, tôi bắt đầu tự hỏi tại sao chúng ta không đơn giản đưa các câu lệnh SQL vào một yêu cầu HTTP GET.
Ví dụ, trong GraphQL tôi sẽ viết
{
Movie(id: "cixos5gtq0ogi0126tvekxo27") {
id
title
actors {
name
}
}
}
Điều này không đơn giản hơn nhiều so với đối tác SQL của nó
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;
Có lẽ chúng ta có thể mã hóa URL truy vấn và gửi đến máy chủ
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
Có, URL truy vấn có thể quá dài, nhưng bạn có thể đặt nó vào phần thân của yêu cầu POST nếu bạn không quan tâm đến việc tuân thủ REST. (Nhân tiện, tôi nghĩ rằng RFC HTTP cần được sửa đổi cho REST để có ý nghĩa: giới hạn độ dài của chuỗi truy vấn trộn lẫn việc thực hiện với đặc tả ngay từ đầu)
Phát hành SQL trực tiếp từ máy khách cũng có lợi thế là
- Không có mã / thư viện phía máy chủ được yêu cầu để phân tích GraphQL, giảm thời gian phát triển.
- Không cần chi phí phía máy chủ để phân tích GraphQL, giảm thời gian chạy.
- Các câu lệnh SQL linh hoạt hơn nhiều so với GraphQL bởi vì (trong hầu hết các trường hợp), câu lệnh sau sẽ giảm xuống thành SQL.
- Mọi người đều biết SQL.
Vì vậy, những lợi thế của GraphQL so với SQL là gì?