GraphQL - Giới thiệu
GraphQL là một công nghệ phía máy chủ mã nguồn mở được Facebook phát triển để tối ưu hóa các lệnh gọi API RESTful. Nó là một công cụ thực thi và một ngôn ngữ truy vấn dữ liệu. Trong chương này, chúng ta thảo luận về những lợi thế của việc sử dụng GraphQL.
Tại sao nên dùng GraphQL
Các API RESTful tuân theo phương pháp hướng tài nguyên rõ ràng và có cấu trúc tốt. Tuy nhiên, khi dữ liệu phức tạp hơn, các tuyến đường sẽ dài hơn. Đôi khi không thể tìm nạp dữ liệu với một yêu cầu duy nhất. Đây là lúc GraphQL có ích. GraphQL cấu trúc dữ liệu dưới dạng một biểu đồ với cú pháp truy vấn mạnh mẽ để duyệt, truy xuất và sửa đổi dữ liệu.
Sau đây là những ưu điểm của việc sử dụng Ngôn ngữ truy vấn GraphQL:
Yêu cầu những gì bạn muốn - và nhận được nó
Gửi một truy vấn GraphQL tới API của bạn và nhận chính xác những gì bạn cần. 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 rất nhanh và ổn định. Không giống như các dịch vụ Restful, các ứng dụng này có thể hạn chế dữ liệu cần được tìm nạp từ máy chủ.
Ví dụ sau sẽ giúp bạn hiểu rõ hơn về điều này -
Chúng ta hãy xem xét một đối tượng doanh nghiệp là Sinh viên với các thuộc tính id, firstName, lastName và collegeName . Giả sử một ứng dụng di động chỉ cần tìm nạp FirstName và id . Nếu chúng ta thiết kế một điểm cuối REST như / api / v1 / students , nó sẽ kết thúc việc tìm nạp dữ liệu cho tất cả các trường cho một đối tượng student . Điều này có nghĩa là, dữ liệu được dịch vụ RESTful tìm nạp quá mức. Vấn đề này có thể được giải quyết bằng cách sử dụng GraphQL.
Hãy xem xét truy vấn GraphQL được đưa ra bên dưới:
{
students {
id
firstName
}
}
Điều này sẽ chỉ trả về giá trị cho các trường id và tên. Truy vấn sẽ không tìm nạp giá trị cho các thuộc tính khác của đối tượng sinh viên. Phản hồi của truy vấn được minh họa ở trên như được hiển thị bên dưới:
{
"data": {
"students": [
{
"id": "S1001",
"firstName": "Mohtashim"
},
{
"id": "S1002",
"firstName": "Kannan"
}
]
}
}
Nhận nhiều tài nguyên trong một yêu cầu duy nhất
Các truy vấn GraphQL giúp truy xuất trơn tru các đối tượng kinh doanh được liên kết, trong khi các API REST điển hình yêu cầu tải từ nhiều URL. API GraphQL tìm nạp tất cả dữ liệu mà ứng dụng của bạn cần trong một yêu cầu duy nhất. Các ứng dụng sử dụng GraphQL có thể nhanh chóng ngay cả trên các kết nối mạng di động chậm.
Chúng ta hãy xem xét một đối tượng kinh doanh nữa, Trường cao đẳng có các thuộc tính: tên và địa điểm. Các sinh viên đối tượng kinh doanh có mối quan hệ gắn với đối tượng College. Nếu chúng tôi sử dụng API REST để tìm nạp thông tin chi tiết của sinh viên và trường đại học của họ, chúng tôi sẽ đưa ra hai yêu cầu tới máy chủ như / api / v1 / Students và / api / v1 / college . Điều này sẽ dẫn đến việc tìm nạp dữ liệu với mỗi yêu cầu. Vì vậy các ứng dụng di động buộc phải thực hiện nhiều cuộc gọi đến máy chủ để có được dữ liệu mong muốn.
Tuy nhiên, ứng dụng di động có thể tìm nạp thông tin chi tiết cho cả đối tượng Sinh viên và Cao đẳng trong một yêu cầu duy nhất bằng cách sử dụng GraphQL.
Sau đây là truy vấn GraphQL để tìm nạp dữ liệu:
{
students{
id
firstName
lastName
college{
name
location
}
}
}
Đầu ra của truy vấn trên chứa chính xác các trường mà chúng tôi đã yêu cầu như được hiển thị bên dưới:
{
"data": {
"students": [
{
"id": "S1001",
"firstName": "Mohtashim",
"lastName": "Mohammad",
"college": {
"name": "CUSAT",
"location": "Kerala"
}
},
{
"id": "S1002",
"firstName": "Kannan",
"lastName": "Sudhakaran",
"college": {
"name": "AMU",
"location": "Uttar Pradesh"
}
},
{
"id": "S1003",
"firstName": "Kiran",
"lastName": "Panigrahi",
"college": {
"name": "AMU",
"location": "Uttar Pradesh"
}
}
]
}
}
Mô tả những gì có thể với một hệ thống kiểu
GraphQL được đánh mạnh và các truy vấn dựa trên các trường và kiểu dữ liệu liên quan của chúng. Nếu có loại không khớp trong truy vấn GraphQL, các ứng dụng máy chủ sẽ trả về thông báo lỗi rõ ràng và hữu ích. Điều này giúp gỡ lỗi suôn sẻ và dễ dàng phát hiện lỗi của các ứng dụng khách. GraphQL cũng cung cấp các thư viện phía máy khách có thể giúp giảm phân tích và chuyển đổi dữ liệu rõ ràng.
Dưới đây là một ví dụ về kiểu dữ liệu Sinh viên và Cao đẳng :
type Query {
students:[Student]
}
type Student {
id:ID!
firstName:String
lastName:String
fullName:String
college:College
}
type College {
id:ID!
name:String
location:String
rating:Float
students:[Student]
}
Di chuyển nhanh hơn với các công cụ mạnh mẽ dành cho nhà phát triển
GraphQL cung cấp các công cụ dành cho nhà phát triển phong phú cho các truy vấn tài liệu và thử nghiệm. GraphiQL là một công cụ tuyệt vời tạo ra tài liệu về truy vấn và lược đồ của nó. Nó cũng cung cấp cho một trình soạn thảo truy vấn để kiểm tra các API GraphQL và khả năng hoàn thành mã thông minh trong khi xây dựng các truy vấn.