GraphQL là một từ khóa đang rất hot hiện nay, nhà nhà người người đang bàn tán về nó. Vậy GraphQL là gì? và tại sao nó lại đang được nhiều người ưa chuộng đến như vậy?
GraphQL là gì?
Định nghĩa
Ngắn gọn thì, GraphQL là:
A query language for your API
GraphQL là một trong những cách “hiện đại” nhất để xây dựng và truy vấn các APIs. Nó đơn giản là cú pháp mô tả cách chúng ta truy vấn data, thường là dùng để load data từ server tới client.
GraphQL có 3 đặc tính chính khiến nó khác bọt so với phần còn lại:
- Nó cho phép client chỉ rõ chính xác những dữ liệu nào cần lấy.
- Cho phép dễ dàng tổng hợp dữ liệu từ nhiều nguồn.
- Sử dụng 1 type system để định nghĩa dữ liệu.
Tại sao GraphQL lại được coi là tương lai của API?
Bàn lại về REST
Từ ngày xửa ngày xưa, chúng ta đã chuyển từ SOAP sang REST vì những lợi ích mà nó đem lại cho chúng ta. Không thể phủ nhận rằng REST đã làm rất tốt công việc của mình, nhưng rồi các ứng dụng càng ngày càng phức tạp và tinh vi hơn, kéo theo đó là các APIs cũng ngày một phát triển và nhân rộng lên, khi đó REST bắt đầu lộ ra những nhược điểm khó lòng mà khắc phục được nếu chúng ta tiếp tục sử dụng nó.
Quá nhiều endpoints
Với mỗi resource trong REST được biểu diễn bởi một endpoint. Trong thực tế, chúng ta sẽ có rất nhiều endpoints cho rất nhiều các resources khác nhau, nếu bạn muốn thực hiện một GET request, bạn cần một endpoint ứng với cái request cụ thể đó, với các parameter cụ thể, tương ứng với các methods khác. Với một ứng dụng khổng lồ như Facebook hay Github, họ sẽ đối mặt với việc có một lượng API cực kỳ khổng lồ và tốn rất nhiều effort để mà quản lý và maintain các APIs này.
Over-fetching và under-fetching
Một vấn đề nhức nhối khác của REST đó là over-fetching và under-fetching thông tin, chẳng hạn chúng ta chỉ muốn lấy tên của User thôi nhưng với chỉ có 1 endpoint get toàn bộ thông tin của User, chúng ta vẫn phải dùng nó, và những thông tin lặt vặt đi kèm trở nên thừa thãi và không cần thiết.
Bản chất của REST là luôn trả về một cấu trúc được fix cứng, chúng ta không thể lấy ra chính xác những gì chúng ta cần mà không tạo ra một cái endpoint dành riêng cho việc đó.
Hoặc khi chúng ta cần lấy thông tin từ nhiều resources, ta sẽ phải call tới nhiều API tương ứng với mỗi resources đó, khi mà số lượng resources càng ngày càng nhiều thì lượng code cần implement cáng nhiều và phức tạp hơn, rất khó để quản lý.
Versioning
Để tránh việc xung đột hay code mới không chạy với client cũ, các API khi cập nhật thường giữ nguyên các version cũ và thêm version mới vào. Đối với GraphQL, chúng ta không cần thực hiện việc này, khi muốn phát triển thêm API nào thì chỉ cần thêm code mới mà không cần lo về vấn đề tương thích với client cũ.
GraphQL là tương lai
Trở về năm 2012, khi mà Facebook phải đối mặt với những vấn đề gặp phải với REST như đã nêu ở trên, họ đã phát triển ra GraphQL để giải quyết những vấn đề đó.
Single enpoint
Việc tạo nhiều endpoint là không cần thiết nữa, với GrapQL, chúng ta chỉ cần một endpoint, và với nó, chúng ta có thể lấy những dữ liệu mà chúng ta cần trong một request duy nhất.
Chỉ lấy những gì cần thiết
Chúng ta sẽ không gặp vấn đề về over-fetching hay under-fetching như trong REST nữa, chỉ cần define các dữ liệu mà chúng ta cần, và ta sẽ được những dữ liệu mình mong muốn. Việc này cũng làm tăng performance do ta không cần phải lấy những dữ liệu thừa thãi nữa