GraphQL là một xu hướng công nghệ đang dần phổ biến, liên quan trực tiếp đến công việc hàng ngày mà anh em FireGroup đang triển khai trên Shopify và Facebook, vì cả hai nền tảng này đều có hỗ trợ GraphQL API, và có thể áp dụng cho những dự án tiếp theo. Đó là lí do đây là chủ đề được anh em tham gia WeShare hết sức chào đón.

Nhận thấy được điều đó, anh Dương Bá Phúc – Technical Team Leader và bạn Lê Quang Vũ – Senior Software Developer tại khối dự án FireApps thuộc FireGroup đã có buổi chia sẻ hết sức hào hứng với anh em Dev của Nhà Lửa về chủ đề “Tỏ tường về GraphQL”. Sau đây là các nội dung hữu ích mà anh em Nhà Lửa đã cùng đi qua trong buổi WeShare này, các bạn cùng chiêm nghiệm nhé!

GraphQL là gì và tại sao sử dụng GraphQL?

GraphQL là một Query Language được dành cho API, được phát triển bởi Facebook vào năm 2012 và đưa vào sử dụng rộng rãi vào năm 2015 cung cấp giao thức chung cho phép giao tiếp giữa client và server để cập nhật và lấy dữ liệu, và hiện tại được duy trì bởi rất nhiều công ty lớn (như Atlassian, Audi, AirBnB, ArangoDB, Artsy,…) và nhiều anh em Dev trên khắp thế giới.

Theo chia sẻ của anh Phúc, sở dĩ GraphQL được anh em lập trình “ưa chuộng” GraphQL trong thời gian gần đây là vì nó sử dụng việc nạp dữ liệu với chỉ duy nhất 1 single endpoint và hoàn toàn phụ thuộc vào client để xác định những dữ liệu cần thiết. Vì thế client phải chỉ ra các trường cần thiết và nhận về những trường dữ liệu mình cần, không hơn không kém. Client chỉ cần gửi một truy vấn GraphQL tới API, các truy vấn GraphQL luôn trả về kết quả có thể dự đoán được. Các ứng dụng sử dụng GraphQL nhanh và ổn định vì chúng kiểm soát dữ liệu nhận được chứ không phải máy chủ. Các ứng dụng sử dụng GraphQL có thể hoạt động thuận tiện, nhanh chóng ngay cả trên các kết nối mạng di động chậm.

Với những đặc điểm như trên, công nghệ mới này đã hỗ trợ anh em Dev cực kì hiệu quả trong khâu lập trình và giảm thiểu số lượng dữ liệu cần được chuyển qua mạng, giải quyết nhiều thiếu sót và sự kém hiệu quả mà các developers gặp phải khi tương tác với các API REST. Sở dĩ GraphQL tạo ra những sự vượt trội hơn so với REST đó là vì những điểm khác biệt sau:

GraphQL hoạt động như thế nào?

Trong bài chia sẻ của mình, anh Phúc đưa ra một số khái niệm chính liên quan đến GraphQL, bao gồm: Queries, Mutations, Subscriptions, Schemas and TypesValidation.

Schema là một trong những khái niệm quan trọng nhất khi làm việc với một API GraphQL. Nó chỉ định các khả năng của API và xác định cách client có thể yêu cầu dữ liệu. Nó thường được xem như là một hợp đồng giữa server và client. Nói chung, một schema chỉ đơn giản là một tập hợp các types của GraphQL. Tuy nhiên, khi viết schema cho một API, có một số root type đặc biệt, bao gồm: Queries, mutations và subscription.

1/ Queries:  Các câu lệnh lấy dữ liệu (tương tự method GET trong REST API), hoặc có thể gọi là những yêu cầu cung cấp thông tin bạn đặt ra cho thư ký của mình – GraphQL.

Chúng ta khai báo một ‘query’ mới sử dụng keyword query , và đặt tên cho field đó là stuff. Điều thú vị của GraphQL query là có support các nested fields. Thế nên chúng ta có thể đi sâu vào hơn. Client khi đưa ra những yêu cầu và tạo ra query sẽ không cần lo data đến từ source nào. Chỉ việc hỏi và GraphQL server sẽ lo hết mọi thứ khác. Cũng đáng lưu ý là việc các query field còn có khả năng chỉ đến các array – association.

Query field còn support cả argument. Nếu bạn muốn đưa ra một post riêng, thì chỉ cần thêm id argument cho post field.

Cuối cùng, nếu bạn còn muốn id argument đó đặc biệt hơn, bạn có thể tạo ra một variable và tái sử dụng chúng bên trong query (nhớ là ta phải đặt tên cái query đó luôn)

2/ Mutations: Các câu lệnh để thêm/sửa dữ liệu (tương tự method POST/PUT/DELETE trong REST API)

Thực ra cũng là các phiên bản đồng bộ của query nó cho phép thay đổi database tương tự như bạn đặt ra các yêu cầu thay đổi lịch làm việc hay gì đó cho thư ký của mình.

Nói 1 cách khác thì các hoạt động với dữ liệu là CRUD thì query là truy vấn (R) thì mulation sẽ gánh các vai tròn (C), (U), (D)

Các Mutations có cấu trúc cú pháp như giống với Queries, nhưng chúng luôn bắt đầu bằng từ khóa mutation. (Mặc định nếu không có từ khóa thì sẽ là query).

3/ Subscriptions: Câu lệnh dùng để lắng nghe sự kiện trên server, khi dữ liệu trên server được thay đổi nó cũng thay đổi theo nhằm cung cấp dữ liệu cho client một cách realtime nhất có thể. Ở điểm này REST API không có cửa để đấu lại với GraphQL.

Một yêu cầu quan trọng khác đối với nhiều ứng dụng ngày nay là có một kết nối thời gian thực với máy chủ để nhận thông báo ngay lập tức về các sự kiện quan trọng.

Đối với trường hợp sử dụng này, GraphQL cung cấp khái niệm Subscriptions. Khi một client subscribes một sự kiện, nó sẽ khởi tạo và giữ kết nối ổn định với máy chủ. Bất cứ khi nào sự kiện cụ thể đó thực sự xảy ra, máy chủ sẽ đẩy dữ liệu tương ứng đến máy khách.

Subscriptions được viết bằng cú pháp giống như queries và mutations. Subscriptions có thể hiểu tương tự như trigger của SQL.

Thông qua những chia sẻ về GraphQL, anh em Nhà Lửa đã hào hứng theo dõi phần mô phỏng của bạn Lê Quang Vũ – Senior Software Developer về xây dựng GraphQL API với Laravel và phần trao đổi Q&A hết sức sôi nổi. Anh em cùng nhìn lại hình ảnh được ghi lại trong suốt buổi chia sẻ WeShare lần này nhé. 

WeShare cùng anh Phúc và bạn Vũ với chủ đề “Tỏ tường về GraphQL”
WeShare cùng anh Phúc và bạn Vũ với chủ đề “Tỏ tường về GraphQL”
WeShare cùng anh Phúc và bạn Vũ với chủ đề “Tỏ tường về GraphQL”

Để tham khảo toàn bộ nội dung trong buổi WeShare, mời anh em theo dõi tại link: https://bit.ly/3lxdYIg.

— FireGroup —

Leave a Reply

avatar
  Subscribe  
Notify of