5 lý do hàng đầu để sử dụng GraphQL

GraphQL đang trở thành tiêu chuẩn mới để phát triển API - tìm hiểu những lý do hàng đầu tại sao nên sử dụng GraphQL trong bài viết này.

Chỉ sau hai năm rưỡi tồn tại, GraphQL đã dẫn đầu trong phát triển API. Trong bài viết này, chúng tôi giải thích lý do tại sao các nhà phát triển yêu thích GraphQL và tiết lộ những lý do chính cho việc nó được áp dụng nhanh chóng.

1. GraphQL API có lược đồ được định kiểu mạnh

Một trong những vấn đề lớn nhất với hầu hết các API là nó thiếu các contract (hợp đồng) cho các chức năng của nó. Nhiều lập trình viên đã gặp các vấn đề khi cần tài liệu cho các chức năng của API không dùng nữa, thiếu các cách thức phù hợp để biết các chức năng nào được API hỗ trợ và cách sử dụng chúng.

Một lược đồ GraphQL là thành phần xương sống của mỗi GraphQL API. Nó xác định rõ ràng các chức năng (truy vấn, chuyển đổiđăng ký) được API hỗ trợ, bao gồm các đối số đầu vào và các dữ liệu trả về nếu có. Lược đồ là một hợp đồng tin cậy định nghĩa các chức năng của API.

Lược đồ GraphQL là một hợp đồng tin cậy định nghĩa các chức năng của API.

Các lược đồ GraphQL được định kiểu mạnh và có thể được viết bằng ngôn ngữ định nghĩa lược đồ GraphQL (Schema Definition Language - SDL) đơn giản và dễ hiểu.

Nhờ hệ thống định kiểu mạnh, các lập trình viên nhận được nhiều lợi ích không thể có được với các API không có lược đồ.

Ví dụ: công cụ xây dựng có thể được tận dụng để xác thực các yêu cầu API và kiểm tra xem có bất kỳ lỗi nào có thể xảy ra trong giao tiếp với API tại thời điểm biên dịch không. Bạn thậm chí có thể tự động hoàn thành các chức năng của API trong trình soạn thảo của mình!

Một lợi ích khác của lược đồ là các nhà phát triển không phải viết thủ công tài liệu API nữa - thay vào đó, nó có thể được tạo tự động dựa trên lược đồ định nghĩa API. Đó là một công cụ làm thay đổi cách phát triển API!

2. Không còn tải quá nhiều và tải quá ít

Các lập trình viên thường nói đến lợi ích chính của GraphQL là client có thể truy xuất chính xác dữ liệu họ cần từ API.

Họ không phải phụ thuộc vào các cấu trúc dữ liệu cố định và được định nghĩa trước do REST API đầu cuối trả về. Thay vào đó, client có thể khai báo cấu trúc dữ liệu của các đối tượng được API trả về.

Điều này giải quyết hai vấn đề thường gặp với REST API là: tải quá nhiềutải quá ít.

Với GraphQL, client hoàn toàn có thể khai báo cấu trúc dữ liệu của các đối tượng được API trả về.

Vấn đề tải quá nhiều của REST API

Tải quá nhiều có nghĩa là client tải những dữ liệu không thực sự cần thiết. Do đó, nó làm giảm hiệu suất của ứng dụng (cần nhiều thời gian hơn để tải dữ liệu và phân tích cú pháp) và nó cũng làm cạn kiệt gói dữ liệu của người dùng (ví dụ: 3G hoặc 4G).

Một ví dụ đơn giản cho việc tải quá nhiều là tình huống sau: Ứng dụng hiển thị thông tin tênngày sinh trong màn hình hồ sơ của người dùng.

Tuy nhiên API tương ứng cung cấp thông tin về người dùng trả về thêm thông tin địa chỉthông tin thanh toán.

Cả hai thông tin này đều vô dụng đối với màn hình hồ sơ và do đó việc tải chúng là không cần thiết.

Vấn đề tải quá ít của REST API

Tải quá ít thì ngược lại với tải quá nhiều, nó có nghĩa là API không trả về đủ dữ liệu theo yêu cầu. Điều này có nghĩa là client cần phải gọi thêm các API khác để bổ sung dữ liệu cho yêu cầu.

Trong trường hợp xấu nhất là khi client yêu cầu thông tin về một danh sách với n phần tử. Tuy nhiên, không có API nào thỏa mãn yêu cầu dữ liệu. Thay vào đó, client cần gọi thêm API khác để bổ sung dữ liệu cho mỗi phần tử trong danh sách.

Ví dụ, hãy xem xét một ứng dụng blog nơi người dùng có thể xuất bản các bài viết. Ứng dụng hiển thị danh sách người dùng, trong đó mỗi người dùng sẽ hiển thị kèm theo tiêu đề bài viết mới được xuất bản bởi người dùng đó.

Tuy nhiên, phần thông tin đó không có trong API trả về danh sách người dùng. Do đó ứng dụng phải gọi thêm API để lấy thông tin bài viết mới nhất cho từng người dùng trong danh sách.

Lưu ý: Với REST API, các vấn đề về tải quá ít và quá nhiều thường được giải quyết bằng cách thay đổi dữ liệu trả về của API (thay đổi backend) theo nhu cầu của client. Như ví dụ trên thì chúng ta sẽ bổ sung tiêu đề của bài viết mới nhất của mỗi người dùng vào API trả về danh sách người dùng. Cách tiếp cận này ban đầu có vẻ như là một giải pháp tốt, nhưng nó cản trở các chu kỳ phát triển và lặp lại sản phẩm nhanh bởi vì bất kỳ thiết kế lại nào của ứng dụng thường sẽ yêu cầu thay đổi backend tốn nhiều thời gian hơn.

3. GraphQL cho phép phát triển sản phẩm nhanh chóng

GraphQL làm cho cuộc sống của các lập trình viên frontend dễ dàng hơn. Nhờ các thư viện client cho GraphQL (như Apollo, Relay hay Urql), các lập trình viên frontend sẽ nhận được các tính năng như bộ nhớ đệm, thời gian thực hoặc bản cập nhật giao diện người dùng về cơ bản là miễn phí.

Tăng năng suất giữa các lập trình viên frontend dẫn đến tăng tốc độ phát triển sản phẩm. Với GraphQL, có thể thiết kế lại hoàn toàn giao diện người dùng của ứng dụng mà không cần phải làm việc với backend.

Chúng tôi là những người làm sản phẩm - và chúng tôi đã thiết kế API mà chúng tôi muốn sử dụng để xây dựng sản phẩm - Lee Byron.

Quá trình xây dựng GraphQL API tập trung rất nhiều vào lược đồ GraphQL. Do đó, bạn sẽ thường xuyên thấy thuật ngữ phát triển dựa trên lược đồ (schema-driven development) trong ngữ cảnh của GraphQL.

Phát triển dựa trên lược đồ chỉ đơn giản đề cập đến một quá trình trong đó một tính năng được định nghĩa trước trong lược đồ, sau đó được triển khai với các hàm cụ thể.

Theo quy trình này và nhờ vào các công cụ như GraphQL Faker, các lập trình viên frontend có thể làm việc ngay sau khi lược đồ được định nghĩa.

GraphQL Faker sẽ giả lập (mock) toàn bộ GraphQL API (dựa trên định nghĩa lược đồ của nó), vì vậy các nhóm frontend và backend có thể làm việc hoàn toàn độc lập.

4. Tạo GraphQL API

Ý tưởng về lược đồ may khâu (schema stitching) là một trong những ý tưởng mới trong không gian GraphQL. Nói tóm lại, lược đồmay khâu cho phép kết hợp và kết nối nhiều GraphQL API và hợp nhất chúng thành một lược đồ duy nhất.

Tương tự như cách các thành phần của React có thể được tạo ra từ các thành phần có sẵn, GraphQL API cũng có thể được tạo ra từ các GraphQL API có sẵn!

Điều này cực kỳ có lợi cho các ứng dụng khách cần giao tiếp với nhiều đầu cuối GraphQL (điều này thường xảy ra với kiến ​​trúc microservice hoặc khi tích hợp với API của bên thứ 3 như GitHub, Yelp hoặc Shopify).

Nhờ lược đồmay khâu, các client chỉ làm việc với một API đầu cuối duy nhất và tất cả sự phức tạp của việc phối hợp giao tiếp với các dịch vụ khác nhau được ẩn khỏi client.

Các ràng buộc của GraphQL đưa ý tưởng về sơ đồ may khâu lên cấp độ tiếp theo bằng cách cho phép một cách tiếp cận đơn giản để sử dụng lại và chia sẻ GraphQL API.

5. Hệ sinh thái nguồn mở phong phú và một cộng đồng tuyệt vời

Chỉ sau hai năm rưỡi kể từ khi GraphQL được Facebook phát hành chính thức và thật đáng kinh ngạc là toàn bộ hệ sinh thái GraphQL đã phát triển mạnh mẽ kể từ đó.

Khi mới ra mắt, công cụ duy nhất có sẵn cho các nhà phát triển sử dụng GraphQL là triển khai tham chiếu graphql-js, một middleware cho Express.js và Relay.

Ngày nay, GraphQL đã có sẵn trên nhiều ngôn ngữ khác nhau và có rất nhiều biến thể của GraphQL.

Ngoài ra, rất nhiều công cụ như Prisma, GraphQL Faker, GraphQL Playground, graphql-config, ... cung cấp quy trình làm việc liền mạch và mang lại trải nghiệm tuyệt vời cho nhà phát triển khi xây dựng GraphQL API.

GraphQL được nhiều công ty lớn nhỏ sử dụng trong môi trường production

Cộng đồng GraphQL cũng đang phát triển rất nhanh chóng. Nhiều công ty lớn và nhỏ đã bắt đầu sử dụng nó trong môi trường production và ngày càng có nhiều hội nghị về GraphQL được tổ chức trên toàn thế giới. Thậm chí có các hội nghị dành riêng cho GraphQL như:

Bắt đầu với GraphQL ngay hôm nay

Trong bài viết này, bạn đã tìm hiểu tại sao GraphQL là công nghệ API của tương lai. Những lợi ích mà nó mang lại cho các nhà phát triển và cải thiện quy trình công việc là một công cụ thay đổi cách xây dựngsử dụng API.

GraphQL
Bài Viết Liên Quan:
GraphQL + NodeJS: Giới thiệu
Trung Nguyen 16/05/2020
GraphQL + NodeJS: Giới thiệu

Giới thiệu hướng dẫn xây dựng API sử dụng GraphQL và NodeJS. Các mục tiêu của hướng dẫn và mã nguồn.

Các kiến trúc sử dụng GraphQL
Trung Nguyen 15/05/2020
Các kiến trúc sử dụng GraphQL

Hướng dẫn này sẽ trình bày qua 3 loại kiến ​​trúc khác nhau sử dụng máy chủ GraphQL.

Các khái niệm cốt lõi của GraphQL
Trung Nguyen 15/05/2020
Các khái niệm cốt lõi của GraphQL

Tìm hiểu về Query, Mutation, Subscription và cách sử dụng chúng để tạo lược đồ trong GraphQL.

GraphQL tốt hơn REST
Trung Nguyen 15/05/2020
GraphQL tốt hơn REST

Những lợi ích tuyệt vời của GraphQL giúp nó trở thành lựa chọn số một để thay thế cho REST API.