เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้เกี่ยวกับ 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?