Cài đặt GraphQL trên ASP .NET Core

GraphQL là Graph Query Language do Facebook tạo ra từ năm 2012 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.

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ầu
Visual 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 ...