GraphQL đang ngày càng trở nên phổ biến trong giới phát triển phần mềm. Bài viết này sẽ cung cấp cái nhìn tổng quan về GraphQL, từ khái niệm cơ bản đến cách ứng dụng thực tế, giúp bạn tiếp cận và sử dụng GraphQL một cách hiệu quả.
I. Tổng quan về GraphQL
1.1. GraphQL là gì?
GraphQL (Graph Query Language) là một ngôn ngữ truy vấn và thao tác dữ liệu mã nguồn mở cho API. Được phát triển bởi Facebook và ra mắt công khai vào năm 2015, GraphQL cho phép client (ứng dụng khách) yêu cầu chính xác dữ liệu họ cần, giúp đơn giản hóa quá trình phát triển API và tăng hiệu suất ứng dụng.
Ba đặc điểm nổi bật của GraphQL:
- Client chủ động: Cho phép client xác định chính xác những dữ liệu cần thiết, tránh việc trả về dữ liệu thừa.
- Tổng hợp dữ liệu: Dễ dàng tổng hợp dữ liệu từ nhiều nguồn khác nhau vào một API duy nhất.
- Kiểm tra kiểu dữ liệu: Sử dụng type system để định nghĩa và kiểm tra kiểu dữ liệu, đảm bảo tính nhất quán và dễ bảo trì.
1.2. Tại sao nên sử dụng GraphQL?
So với các kiến trúc API truyền thống như REST, GraphQL mang lại nhiều ưu điểm vượt trội:
- Truy xuất dữ liệu chính xác: Client chỉ nhận được dữ liệu mà họ yêu cầu, giảm thiểu băng thông và thời gian xử lý.
- Truy vấn đa nguồn: GraphQL cho phép truy vấn dữ liệu từ nhiều nguồn khác nhau trong một request duy nhất, đơn giản hóa logic phía client.
- Khả năng tự khám phá: Với hệ thống kiểu (type system) mạnh mẽ, GraphQL API có khả năng tự mô tả, giúp developer dễ dàng khám phá và sử dụng.
- Versioning (phiên bản): GraphQL loại bỏ nhu cầu về versioning API, vì client có thể yêu cầu dữ liệu họ cần mà không cần quan tâm đến cấu trúc dữ liệu phía server.
GraphQL Query
GraphQL cho phép client truy vấn chính xác dữ liệu cần thiết.
1.3. Ưu điểm vượt trội của GraphQL
- Hiệu suất: Ứng dụng sử dụng GraphQL thường nhanh hơn và ổn định hơn do kiểm soát được dữ liệu nhận về.
- Linh hoạt: Dễ dàng thích ứng với các yêu cầu thay đổi của client.
- Dễ bảo trì: Hệ thống kiểu (type system) giúp code dễ đọc, dễ hiểu và dễ bảo trì hơn.
Nhận nhiều dữ liệu trong 1 request duy nhất
GraphQL cho phép nhận nhiều dữ liệu trong một request duy nhất.
1.4. GraphQL Type System
GraphQL sử dụng một hệ thống kiểu (type system) để mô tả dữ liệu mà API cung cấp. Điều này mang lại nhiều lợi ích:
- Xác thực dữ liệu: Đảm bảo rằng client chỉ yêu cầu dữ liệu hợp lệ.
- Tự động sinh tài liệu: Tạo tài liệu API tự động, giúp developer dễ dàng tìm hiểu và sử dụng API.
- Cải thiện trải nghiệm phát triển: IDE có thể cung cấp gợi ý và kiểm tra lỗi dựa trên hệ thống kiểu, giúp tăng tốc độ phát triển.
Mô tả những gì có thể với một type system
GraphQL mô tả những gì có thể với một type system.
II. Hướng dẫn bắt đầu với GraphQL (Node.js)
Phần này sẽ hướng dẫn bạn cách tạo một GraphQL server đơn giản bằng Node.js.
2.1. Chuẩn bị môi trường
Bạn có thể sử dụng nhiều ngôn ngữ lập trình khác nhau để xây dựng GraphQL server, như C#, .NET, Go, Java, PHP, Python, Ruby, Perl,… Trong ví dụ này, chúng ta sẽ sử dụng Node.js.
Yêu cầu:
- Node.js (phiên bản 10.15.1 trở lên)
- npm (Node Package Manager)
2.2. Khởi tạo dự án
Tạo một thư mục dự án mới và chạy lệnh npm init để khởi tạo file package.json.
mkdir graphql-example
cd graphql-example
npm init -y
Cài đặt các package cần thiết:
npm install express express-graphql graphql --save
express: Framework web phổ biến cho Node.js.express-graphql: Middleware để tích hợp GraphQL vào ứng dụng Express.graphql: Thư viện cốt lõi của GraphQL.
2.3. Tạo GraphQL Server
Tạo file index.js với nội dung sau:
// Import các thư viện cần thiết
var express = require('express');
var { graphqlHTTP } = require('express-graphql');
var { buildSchema } = require('graphql');
// Xây dựng một Schema, sử dụng ngôn ngữ Schema GraphQL
var schema = buildSchema(`
type Query {
hello: String
}
`);
// Root cung cấp chức năng phân giải cho mỗi endpoint API
var root = {
hello: () => {
return 'Hello world!';
},
};
// Tạo server với express
var app = express();
// Khai báo API graphql endpoint
app.use('/graphql', graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true, // Sử dụng công cụ GraphiQL để đưa ra các query GraphQL theo cách thủ công
}));
// Khởi tạo server tại port 4000
app.listen(4000);
console.log('Running a GraphQL API server at http://localhost:4000/graphql');
Đoạn code trên thực hiện các công việc sau:
- Import các thư viện cần thiết.
- Định nghĩa schema GraphQL với một query duy nhất là
hello, trả về một chuỗi. - Tạo một object
rootđể cung cấp resolver function cho queryhello. - Tạo một Express server và sử dụng middleware
express-graphqlđể xử lý các request đến endpoint/graphql. - Bật công cụ GraphiQL để dễ dàng thử nghiệm và khám phá API.
2.4. Chạy Server
Chạy server bằng lệnh:
node index.js
2.5. Kiểm tra
Truy cập http://localhost:4000/graphql trong trình duyệt. Bạn sẽ thấy giao diện GraphiQL, cho phép bạn nhập và thực thi các truy vấn GraphQL.
Trên trình duyệt:
Demo GraphQL
Bạn có thể nhập truy vấn sau vào GraphiQL và nhấn nút “Play”:
{
hello
}
Kết quả sẽ là:
{
"data": {
"hello": "Hello world!"
}
}
Test trên Postman:
Bạn cũng có thể sử dụng Postman hoặc curl để gửi các truy vấn GraphQL đến server. Ví dụ, sử dụng curl:
curl -X POST -H "Content-Type: application/json" -d '{"query": "{ hello }"}' http://localhost:4000/graphql
Kết quả trả về:
{"data":{"hello":"Hello world!"}}
GraphQL Client
III. Kết luận
GraphQL là một công nghệ mạnh mẽ và linh hoạt, mang lại nhiều lợi ích cho việc phát triển API hiện đại. Bằng cách cho phép client yêu cầu chính xác dữ liệu họ cần, GraphQL giúp giảm thiểu băng thông, tăng hiệu suất ứng dụng và đơn giản hóa quá trình phát triển. Hy vọng bài viết này đã cung cấp cho bạn những kiến thức cơ bản để bắt đầu khám phá và sử dụng GraphQL.
