Client truy vấn đến máy chủ GraphQL bằng các truy vấn với đặc điểm: format của dữ liệu trả về được mô tả trong câu truy vấn và được định nghĩa ở phía client thay vì ở server. Nói đơn giản hơn, đây là truy vấn hướng client, cấu trúc dữ liệu không khô cứng một khuôn mẫu từ server (REST API) mà thay đổi theo từng ngữ cảnh sao cho hiệu quả nhất đối với client mà chỉ cần dùng duy nhất một endpoint.
Vấn đề mà REST đang gặp phải là nó việc phản hồi dữ liệu của REST trả về quá nhiều hoặc là quá ít. Trong cả hai trường hợp thì hiệu suất của ứng dụng đều bị ảnh hưởng khá nhiều. Giải pháp mà GraphQL đưa ra là cho phép khai báo dữ liệu nơi mà một client có thể xác định chính xác dữ liệu mà mình cần từ một API.
Các khái niệm cơ bản
Fetching Data (Query)Lấy dữ liệu về thông qua các câu lệnh truy vấn. GraphQL sử dụng việc nạp dữ liệu khác với REST. Nó chí có duy nhất 1 single endpont 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
Bản chất là liên quan đến READ (GET)
Mutations
Thêm sửa xóa dữ liệu thông qua các câu lệnh trong GraphQL
Bản chất là liên quan đến CREATE, UPDATE, DELETE (POST, PUT, PATCH, DELETE)
Subscription and Realtime Updates
Một yêu cầu quan trọng khác đối với nhiều ứng dụng đó chính là realtime, để có thể kết nối đến máy chủ để có được thông tin về các event ngay lập tức. Trong trường hợp này, GraphQL cung cấp các khái niệm gọi là subscriptions. Khi một client subscriptions một event, nó cũng bắt đầu và giữ các kết nối đến server. Bất cứ khi nào sự kiện đó xảy ra, server sẽ đẩy dữ liệu tương ứng đến client. Không giống như Query và Mutation, nó đi theo kiểu như "request-response-cycle", nó sẽ subscriptions đại diện của luồng dữ liệu được gửi đến client. Subscriptions được viết bằng cách sử dụng cú pháp như Query và Mutation
Để hiểu thêm chi tiết mời bạn tham khảo thêm tài liệu từ trang chủ ở đây
Cài đặt GraphQL cho ASP .NET Core
Yêu cầuVisual Studio 2019 or Visual Studio Code
.NET Core SDK
Các bạn có thể tham khảo và tải về code mẫu ở đây
Khởi tạo project
dotnet new webapi -o GraphQLTest
Cài đặt các packages cần thiết
GraphQL cho ASP .NET Core
https://www.nuget.org/packages/GraphQL
https://www.nuget.org/packages/GraphQL.Server.Transports.AspNetCore
UI Middlewares, Tương tác với GraphQL server thông qua giao diện web (Tùy bạn dùng một trong các cái dưới đây)
https://www.nuget.org/packages/GraphQL.Server.Ui.Playground
https://www.nuget.org/packages/GraphQL.Server.Ui.GraphiQL
https://www.nuget.org/packages/GraphQL.Server.Ui.Voyager
// GraphQL cho client
https://www.nuget.org/packages/GraphQL.Client
dotnet add package GraphQL
dotnet add package GraphQL.Client
dotnet add package GraphQL.Server.Transports.AspNetCore
dotnet add package GraphQL.Server.Ui.GraphiQL
dotnet add package GraphQL.Server.Ui.Playground
dotnet add package GraphQL.Server.Ui.Voyager
Tạo các models liên quan đến các objects trong dự án và implement các services, repositories tương ứng cho việc tương tác với các object đó
Customer, Order, ...
CustomerService, OrderService, ...
Tạo các GraphQL Type cần thiết cho các entities
Bước này sẽ map lần lượt các classes trong models của bạn tương ứng sang kiểu dữ liệu của GraphQL trong thư viện GraphQL for .NET cung cấp
Tạo Graph Queries
Tạo Graph Mutations
Tạo Graph Schema
Cấu hình ASP.NET Core startup
Khởi chạy và kiểm tra
cd GraphQLTest
dotnet run
Vào đường dẫn sau để kiểm tra và tương tác với GraphQL
http://localhost:5000/ui/playground
Kiểm tra sử dụng lần lượt các câu lệnh dưới đây
Tham khảo thêm
https://graphql.org
https://github.com/graphql-dotnet
https://github.com/graphql-dotnet/server
Tiếp tục cập nhật ...