DOCS

Tại sao lại chọn GraphQL

Khám phá tại sao chúng tôi khuyến cáo tích hợp thông qua GraphQL thay vì REST.

Tại Zonos, chúng tôi cung cấp hai loại API chính cho tích hợp: GraphQL và REST. Mặc dù REST APIs đã 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 tính linh hoạt cao 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 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à công cụ mạnh mẽ hơn để đáp ứng nhu cầu của bạn ngày hôm nay.

GraphQL là gì? 

GraphQL là một cách thay thế để giao tiếp với các API phù hợp cho các cấu trúc dữ liệu phức tạp và xây dựng các giao diện trên chúng. Khác với việc coi dữ liệu là 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 coi 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 trực tiếp với cơ sở dữ liệu. Sử dụng GraphQL cho phép bạn tiến gần đến cơ sở dữ liệu nhất có thể, cho phép bạn chọn lựa dữ liệu nào bạn muốn và cách bạn lấy nó, cung cấp lợi ích hiệu năng lớn.

GraphQL được tạo bởi Facebook để giải quyết vấn đề mở rộng quy mô với các cấu trúc dữ liệu phức tạp. Do sự áp dụng thành công của họ, ngày càng nhiều công ty 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.

GraphQL APIs dễ làm việc hơn bạn có thể nghĩ. Nếu bạn quen với REST APIs, đây là cách các khái niệm cơ bản từ REST chuyển sang GraphQL.

Tính năngRESTGraphQL
EndpointCác yêu cầu được gửi đến nhiều endpoint cho các hành động khác nhauTất cả các yêu cầu được gửi đến một endpoint duy nhất (ví dụ: /graphql)
Truy xuất dữ liệuSử dụng phương thức GET trên các endpoint cụ thể để truy xuất dữ liệuSử dụng queries để yêu cầu chính xác dữ liệu cần thiết, giảm tải quá mức hoặc tải thiếu
Sửa đổi/hành động dữ liệuSử dụng các phương thức HTTP như POST, PUT, PATCH hoặc DELETE để sửa đổi hoặc xử lý dữ liệu.Sử dụng mutations để thực hiện các hoạt động (ví dụ: tạo bên, tính toán Landed Cost)
Định dạng phản hồiĐịnh dạng phản hồi cố định trả về tất cả các trường được xác định trước, bất kể chúng có cần thiết hay khôngPhả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 truyền 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 được 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ệuThường cần nhiều yêu cầu để lấy dữ liệu liên quanCác truy vấn lồng nhau cho phép truy xuất dữ liệu liên quan trong một yêu cầu duy nhất (ví dụ: chi tiết bên và mục hàng hóa cùng nhau). Người dùng cũng có thể xây dựng quy trình làm việc để quản lý nhiều mutations trong một yêu cầu GraphQL duy nhất, giảm độ phức tạp và cải thiện hiệu quả

Ưu điểm của GraphQL

Một bài so sánh 

Hãy tưởng tượng bạn đang ở một nhà hàng với một thực đơn cho phép bạn đặt các món ăn chính xác như bạn muốn, 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 đặt. GraphQL giống như nhà hàng đầu tiên:

  • Lấy 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 thành phần. Với REST APIs, bạn phải nhận toàn bộ chi tiết món ăn và bỏ qua các phần bạn không cần.
  • Soạn một món ăn tùy chỉnh: GraphQL API của chúng tôi có thể dễ dàng kết hợp để tạo các giải pháp tùy chỉnh hơn, tương tự như một nhà hàng phong cách buffet nơi bạn có thể tạo một món ăn độc nhất vô nhị chính xác như bạn cần nó, sử dụng các thành phần mà họ đã có. Ngược lại, REST API giống như một tiệm bánh có những thứ được làm sẵn được đóng gói trong giỏ—bạn chỉ có thể đặt những gì đã được tạo sẵn và bạn không thể chọn chỉ lấy miếng bạn muốn.
  • Ít chờ đợi hơn: Vì bạn có thể nhận được tất cả thông tin bạn cần trong một yêu cầu duy nhất, nó giống như yêu cầu người phục vụ mang món khai vị, món chính và món tráng miệng ra cùng một lúc, thay vì chờ đợi giữa các món. Hầu hết 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 bạn dễ dàng điều chỉnh. 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ể cần phải chờ đợi nhà bếp (backend) tạo một bữa ă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 tính linh hoạt, hiệu quả và đơn giản hơn để lấy dữ liệu so với REST APIs, đặc biệt là khi nhu cầu hoặc khả năng của bạn thay đổi hoặc phát triển.

Cách Zonos sử dụng GraphQL 

Trong khi hiện đại hóa nền tảng của chúng tôi trong vài năm qua, Zonos đã lựa chọn xây dựng chức năng mới bằ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ẽ với nhau, giống như dữ liệu khiến Facebook tạo GraphQL. Sự phức tạp này khiến việc xây dựng các REST APIs có thể mở rộng trở nên khó khăn vì các cách mà các nhà phát triển cần tìm nạp và sử dụng dữ liệu khác nhau rất lớn giữa các triển khai, và REST không linh hoạt.

GraphQL gọn gàng giải quyết vấn đề này 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 lựa chính xác dữ liệu nào họ muốn và cách họ lấy nó. Điều này cho phép họ phù hợp với quy trình làm việc của họ mà không cần Zonos phải làm công việc tùy chỉnh (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 quả hơn, tích hợp Zonos vào các hệ thống của bạn nhanh hơn, và giúp Zonos có thể cung cấp các tính năng mới nhanh chóng 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ác bản cập nhật này. Ngược lại, các REST APIs của chúng tôi được coi là end-of-life 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 ở quốc gia đó với mức dịch vụ đó
  • Phân tích chi tiết về thuế nhập khẩu, thuế và phí (thông tin cấp độ mục, 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 tới)

Trang này có hữu ích không?