GraphQL là gì?
GraphQL là một cách thay thế để giao tiếp với các API, rất phù hợp cho các cấu trúc dữ liệu phức tạp và xây dựng giao diện trên chúng. Khác với việc coi dữ liệu như những phần riêng biệt, độc lập, GraphQL cho thấy cách các phần dữ liệu kết nối và liên quan đến nhau, giúp dễ dàng yêu cầu và nhận thông tin.
Hãy nghĩ về GraphQL như một ngôn ngữ truy vấn cho phép bạn giao tiếp với API như thể bạn đang nói chuyện trực tiếp với cơ sở dữ liệu. Sử dụng GraphQL cho phép bạn tiếp cận gần nhất với cơ sở dữ liệu, cho phép bạn chọn và chọn dữ liệu bạn muốn và cách bạn nhận được nó, mang lại lợi ích hiệu suất lớn.
GraphQL được tạo ra bởi Facebook để giải quyết vấn đề mở rộng với các cấu trúc dữ liệu phức tạp. Nhờ vào việc áp dụng thành công của họ, ngày càng nhiều công ty đã bắt đầu nhận ra lợi ích của việc sử dụng GraphQL cho các API của họ.
Đã biết REST? GraphQL sẽ cảm thấy quen thuộc.
Các API GraphQL dễ làm việc hơn bạn nghĩ. Nếu bạn đã quen làm việc với các API REST, đây là cách các khái niệm cốt lõi từ REST chuyển sang GraphQL.
Tính năng | REST | GraphQL |
---|---|---|
Điểm cuối | Các yêu cầu được thực hiện đến nhiều điểm cuối cho các hành động khác nhau | Tất cả các yêu cầu được thực hiện đến một điểm cuối duy nhất (ví dụ: /graphql) |
Lấy dữ liệu | Sử dụng GET trên các điểm cuối cụ thể để lấy dữ liệu | Sử dụng truy vấn để yêu cầu chính xác dữ liệu cần thiết, giảm thiểu việc lấy quá nhiều hoặc quá ít dữ liệu |
Chỉnh sửa dữ liệu/hành động | Sử dụng các phương thức HTTP như POST, PUT, PATCH hoặc DELETE để chỉnh sửa hoặc xử lý dữ liệu. | Sử dụng các phép biến đổi để thực hiện các thao tác (ví dụ: tạo các bên, tính toán chi phí vận chuyển) |
Định dạng phản hồi | Các định dạng phản hồi cố định trả về tất cả các trường đã định nghĩa trước, bất kể chúng có cần thiết hay không | Các phản hồi linh hoạt cho phép chỉ định chính xác các trường cần bao gồm, giảm thiểu việc truyền tải dữ liệu không cần thiết (Nếu tính linh hoạt này cảm thấy phức tạp, chỉ cần sử dụng các ví dụ truy vấn đã viết sẵn trong tài liệu của chúng tôi để có trải nghiệm giống REST) |
Kết nối dữ liệu | Thường cần nhiều yêu cầu để lấy dữ liệu liên quan | Các truy vấn lồng nhau cho phép lấy dữ liệu liên quan trong một yêu cầu duy nhất (ví dụ: chi tiết bên và các mục vận chuyển cùng nhau). Người dùng cũng có thể xây dựng các quy trình làm việc để quản lý nhiều phép biến đổi trong một yêu cầu GraphQL duy nhất, giảm thiểu độ phức tạp và cải thiện hiệu quả |
Lợi ích của GraphQL
Phản hồi nhanh hơn
GraphQL cung cấp phản hồi nhanh hơn thông qua việc lấy dữ liệu chính xác, sử dụng một điểm cuối duy nhất và cải thiện khả năng nhóm và lưu trữ.
Lấy dữ liệu chính xác
Một thách thức phổ biến với REST là việc lấy quá nhiều hoặc quá ít dữ liệu—hoặc nhận quá nhiều thông tin không cần thiết hoặc không đủ những gì cần thiết trong một lần. GraphQL loại bỏ điều này bằng cách cho phép yêu cầu chính xác những gì cần thiết—không nhiều hơn, không ít hơn. Tính cụ thể này không chỉ cải thiện hiệu suất mà còn đơn giản hóa quy trình cho những người tương tác với API, làm cho hệ thống hiệu quả và thân thiện hơn với người dùng.
Ví dụ về cách điều này hữu ích:
- Điều này cho phép các nhà phát triển frontend lấy chính xác dữ liệu họ cần cho các thành phần UI của họ, giảm số lần gọi đến máy chủ và cải thiện hiệu suất.
- Hãy tưởng tượng bạn muốn lấy một phân loại mã HS, cartonization, đánh giá lô hàng, và báo giá landed cost cho các mặt hàng trong một checkout. Nếu bạn tích hợp qua API GraphQL, bạn có thể thực hiện một cuộc gọi duy nhất với các quy trình làm việc cần thiết để lấy mọi thứ bạn cần (và không có gì bạn không cần) trong một phản hồi duy nhất. Ngược lại, với các API REST, bạn sẽ cần gọi trước API REST Classify, sau đó gọi API REST Rating riêng biệt sau đó, và cuối cùng cắm phân loại và đánh giá lô hàng vào cuộc gọi thứ ba của bạn đến API REST Landed Cost. Tất cả các API REST này sẽ trả về mọi thông tin mà chúng có thể, khiến bạn phải phân tích phản hồi để tìm dữ liệu bạn cần. Sự tiết kiệm về tốc độ này tạo ra ảnh hưởng trong việc trả về một landed cost hoàn chỉnh nhanh chóng, trước khi người mua rời đi.
Điểm cuối duy nhất
Các API GraphQL thường có một điểm cuối duy nhất, không giống như các API REST thường có nhiều điểm cuối cho các tài nguyên và hành động khác nhau. Điều này làm cho việc quản lý và hiểu API trở nên đơn giản hơn.
Nhóm và lưu trữ
Khả năng nhóm các truy vấn của GraphQL và hỗ trợ cho các chiến lược lưu trữ dẫn đến những cải tiến hiệu suất đáng kể. Những tính năng này giảm tải cho mạng và máy chủ, chuyển thành các tương tác nhanh hơn, đáng tin cậy hơn cho người dùng.
Các sơ đồ được xác định rõ ràng
Các API GraphQL dựa trên một sơ đồ kiểu mạnh. Sơ đồ này xác định cấu trúc của dữ liệu có sẵn và các thao tác có thể thực hiện. Điều này cung cấp sự rõ ràng về dữ liệu có sẵn và cách truy cập nó, điều này có thể cải thiện năng suất của nhà phát triển và giảm thiểu lỗi. Ví dụ, các nhóm frontend có thể khám phá đồ thị để lấy chính xác những gì họ cần thay vì phải chờ đợi một điểm cuối REST mới.
Khả năng cải thiện mà không làm hỏng các khách hàng hiện có
Việc thêm các tính năng mới hoặc sửa đổi các tính năng hiện có trong GraphQL không làm gián đoạn các tích hợp hiện tại, nhờ vào cấu trúc truy vấn linh hoạt của nó. Khả năng này đảm bảo rằng các cải tiến có thể được thực hiện mà không làm hỏng tính tương thích với các khách hàng hiện có.
Tài liệu cập nhật
Nhờ vào tính năng introspection của GraphQL, tài liệu được tự động tạo và cập nhật với mỗi thay đổi. Điều này đảm bảo rằng tất cả thông tin cung cấp cho các nhà phát triển là hiện tại, giảm thiểu các vấn đề tích hợp và vé hỗ trợ liên quan đến tài liệu lỗi thời—một thách thức thường gặp với tài liệu API REST.
Xem tài liệu GraphQL của chúng tôi và tài liệu REST của chúng tôi để thấy sự khác biệt.
Một phép ẩn dụ
Hãy tưởng tượng bạn đang ở một nhà hàng với thực đơn cho phép bạn gọi món ăn chính xác như bạn thích, so với một nhà hàng khác nơi bạn chỉ có thể chọn từ các bữa ăn cố định. GraphQL giống như nhà hàng đầu tiên:
- Nhận chính xác những gì bạn muốn: Với GraphQL, bạn có thể yêu cầu chính xác dữ liệu bạn cần, không nhiều hơn, không ít hơn. Hãy tưởng tượng bạn chỉ muốn tên và giá của một món ăn, không phải toàn bộ danh sách nguyên liệu. Với REST APIs, bạn phải lấy toàn bộ chi tiết món ăn và bỏ qua những phần bạn không cần.
- Tạo một món ăn tùy chỉnh: Các API GraphQL của chúng tôi có thể dễ dàng kết hợp để tạo ra các giải pháp tùy chỉnh hơn, giống như một nhà hàng kiểu buffet nơi bạn có thể tạo ra một món ăn độc đáo chính xác như bạn cần, sử dụng các nguyên liệu mà họ đã có. Ngược lại, một REST API giống như một tiệm bánh với các sản phẩm đã được làm sẵn đóng gói trong giỏ—bạn chỉ có thể gọi những gì đã được tạo ra và bạn không thể chọn mang về chỉ một phần bạn muốn.
- Ít chờ đợi hơn: Vì bạn có thể nhận tất cả thông tin bạn cần trong một yêu cầu duy nhất, điều này giống như việc yêu cầu nhân viên phục vụ mang đến món khai vị, món chính và món tráng miệng của bạn cùng một lúc, thay vì phải chờ giữa các món. Hầu hết các REST APIs yêu cầu bạn gửi nhiều yêu cầu để lấy các phần thông tin khác nhau.
- Dễ dàng thay đổi đơn hàng: Nếu nhu cầu dữ liệu của ứng dụng của bạn thay đổi, GraphQL giúp việc điều chỉnh trở nên dễ dàng hơn. Bạn chỉ cần thay đổi truy vấn cho những gì bạn cần. Với REST, bạn có thể phải chờ bếp (backend) tạo ra một món ăn mới (endpoint) cho thực đơn, điều này mất nhiều thời gian hơn.
GraphQL cung cấp nhiều tính linh hoạt, hiệu quả và đơn giản hơn cho việc lấy dữ liệu so với REST APIs, đặc biệt khi nhu cầu của bạn thay đổi hoặc phát triển.
Cách Zonos sử dụng GraphQL
Trong quá trình hiện đại hóa nền tảng của chúng tôi trong vài năm qua, Zonos đã quyết định xây dựng các chức năng mới bằng cách sử dụng GraphQL cho API của chúng tôi thay vì REST. Chúng tôi quyết định làm điều này vì dữ liệu của chúng tôi phức tạp và liên kết chặt chẽ, giống như dữ liệu đã dẫn đến việc Facebook tạo ra GraphQL. Sự phức tạp này khiến việc xây dựng REST APIs có khả năng mở rộng trở nên khó khăn vì cách mà các nhà phát triển cần lấy và sử dụng dữ liệu thay đổi đáng kể giữa các triển khai, và REST thì không linh hoạt.
GraphQL giải quyết vấn đề này một cách gọn gàng bằng cách cho phép các nhà phát triển triển khai API của chúng tôi chọn và lựa chọn chính xác dữ liệu họ muốn và cách họ lấy nó. Điều này cho phép họ tích hợp vào quy trình làm việc của họ mà không cần Zonos phải thực hiện công việc tùy chỉnh (trong khi họ chờ đợi) cho mọi tình huống.
Kết quả kết hợp của việc sử dụng GraphQL và các hiện đại hóa trong nền tảng của chúng tôi đã làm cho API của chúng tôi hiệu suất hơn, giúp việc tích hợp Zonos vào hệ thống của bạn nhanh hơn, và làm cho Zonos có thể cung cấp các tính năng mới nhanh hơn.
Các tính năng tốt hơn
Zonos liên tục phát triển các tính năng mới, và GraphQL là tính năng đầu tiên (và thường là duy nhất) nhận được những cập nhật này. Ngược lại, các REST APIs của chúng tôi được coi là đã hết hạn và không thể truy cập nhiều tính năng mới của chúng tôi.
Ví dụ về các tính năng giới hạn cho GraphQL:
- Inclusive pricing
- Labels API
- Checkout mới và Hello
- Kích thước hộp trong phản hồi API
- Báo cáo Dashboard
- Khả năng yêu cầu báo giá DDP nếu có thể, nhưng vẫn trả về báo giá DDU nếu DDP không khả dụng cho quốc gia đó với mức dịch vụ đó
- Phân tích chi tiết về thuế, phí và lệ phí (thông tin theo từng mặt hàng, phí cụ thể)—Dashboard được cung cấp bởi GraphQL và hiển thị dữ liệu này cho tất cả các cửa hàng, nhưng phản hồi REST API không bao gồm mức độ chi tiết này
- Chế độ thử nghiệm (sắp ra mắt)
Tại sao GraphQL
Khám phá lý do tại sao chúng tôi khuyên bạn nên tích hợp qua GraphQL thay vì REST.
Tại Zonos, chúng tôi cung cấp hai loại API chính cho việc tích hợp: GraphQL và REST. Trong khi các API REST đã tồn tại lâu hơn và có thể quen thuộc hơn với nhiều người, chúng tôi đã chuyển sang GraphQL để cho phép linh hoạt hơn và đổi mới nhanh hơn. Mặc dù cả hai vẫn được hỗ trợ, hướng dẫn này giải thích lý do tại sao GraphQL không chỉ là tương lai của các tích hợp của chúng tôi mà còn là tương lai của các tích hợp nói chung và là một công cụ mạnh mẽ hơn để đáp ứng nhu cầu của bạn ngày hôm nay.