API GraphQL so với API REST

Sự khác biệt chính giữa REST và GraphQL và khi nào tốt nhất nên sử dụng cái này so với cái kia

TừNGHỈ NGƠIlà một cách tiếp cận phổ biến để xây dựng API và phổ biến hơn nhiều so vớiGraphQL, thật công bằng khi cho rằng bạn đã quen thuộc với nó, vì vậy hãy xem sự khác biệt giữa GraphQL và REST.

Nghỉ ngơi là một khái niệm

REST là một tiêu chuẩn kiến trúc de-facto nhưng nó thực sự không có đặc điểm kỹ thuật và hàng tấn định nghĩa không chính thức. GraphQL có mộtsự chỉ rõbản nháp, và nó là mộtNgôn ngữ truy vấnthay vì một kiến trúc, với một bộ công cụ được xác định rõ ràng được xây dựng xung quanh nó (và một hệ sinh thái phát triển mạnh mẽ).

Mặc dù REST được xây dựng trên nền tảng của một kiến trúc hiện có, nhưng trong các tình huống phổ biến nhất làHTTP, GraphQL mặt khác đang xây dựng bộ quy ước của riêng mình. Đó có thể là một lợi thế hoặc không, vì REST có lợimiễn phíbằng cách lưu vào bộ nhớ đệm trên lớp HTTP.

Một điểm cuối duy nhất

GraphQL chỉ có một điểm cuối, nơi bạn gửi tất cả các truy vấn của mình. Với cách tiếp cận REST, bạn tạo nhiều điểm cuối và sử dụng HTTPđộng từđể phân biệt các hành động đọc (GET) và viết các hành động (POST,PUT,DELETE). GraphQL không sử dụng động từ HTTP để xác định loại yêu cầu.

Phù hợp với nhu cầu của bạn

Với REST, bạn thường không thể chọn những gì máy chủ trả lại cho bạn, trừ khi máy chủ thực hiện các phản hồi một phần bằng cách sử dụngcánh đồng thưa thớtvà khách hàng sử dụng tính năng đó. Người bảo trì API không thể thực thi việc lọc như vậy.

API thường sẽ trả lại cho bạn nhiều thông tin hơn những gì bạn cần, trừ khi bạn cũng kiểm soát máy chủ API và bạn điều chỉnh phản hồi của mình cho từng yêu cầu khác nhau.

Với GraphQL, bạn chỉ yêu cầu thông tin bạn cần một cách rõ ràng, bạn không “chọn không tham gia” khỏi chế độ trả lời mặc định đầy đủ, nhưng bắt buộc phải chọn các trường bạn muốn.

Điều này giúp tiết kiệm tài nguyên trên máy chủ, vì hầu hết bạn có thể cần ít xử lý hơn và cũng tiết kiệm mạng, vì tải trọng cần chuyển nhỏ hơn.

Một cách tuyệt vời để hình dung đây là một ví dụ vềĐiểm cuối pizza(Tôi là người Ý, một ví dụ về Pizza là hoàn hảo).

Nếu bạn gọiGET /pizza/margherita, bạn sẽ nhận được một chiếc bánh pizza Margherita. Nếu bạn gọiGET /pizza/napoli, bạn sẽ nhận được một chiếc bánh pizza Napoli.

Nếu bạn có 30 hương vị khác nhau, bạn sẽ có 30 điểm cuối (trừ khi bạn chuyển tên pizza làm tham số choGET /pizza, ví dụ)

Nhưng có thể bạn muốn một loại bánh pizza cụ thể, nhưng không có một thành phần nào đó mà bạn không thích. Điều đó dễ dàng để yêu cầu người phục vụ, nhưng hơi khó để diễn đạt với điểm cuối REST.

Một điểm cuối GraphQL sẽ cho phép bạn gọi/pizza, và bạn yêu cầu các nguyên liệu cụ thể để tạo ra chiếc bánh pizza hoàn hảo mà bạn muốn.

GraphQL giúp dễ dàng theo dõi việc sử dụng các trường

Với REST, thường không có cách nào để xác định xem một trường có được khách hàng cần hay không, vì vậy khi cấu trúc lại hoặc không dùng nữa, không thể xác định mức sử dụng thực tế.

GraphQL giúp bạn có thể theo dõi trường nào được khách hàng sử dụng.

Truy cập tài nguyên dữ liệu lồng nhau

GraphQL cho phép tạo ra ít cuộc gọi mạng hơn rất nhiều.

Hãy làm một ví dụ: bạn cần truy cập vào tên của bạn bè của một người. Nếu API REST của bạn để lộ một/personendpoint, trả về một đối tượng người với danh sách bạn bè, trước tiên, bạn thường lấy thông tin người đó bằng cáchGET /person/1, chứa danh sách ID của bạn bè.

Trừ khi danh sách bạn bè của một người đã có tên bạn bè, với 100 người bạn, bạn cần thực hiện 101 yêu cầu HTTP đối với/personđiểm cuối, đó là một chi phí thời gian lớn và cũng là một hoạt động sử dụng nhiều tài nguyên.

Với GraphQL, bạn chỉ cần một yêu cầu, yêu cầu này yêu cầu tên của bạn bè của một người.

Các loại

API REST dựa trên JSON không thể cung cấp kiểm soát kiểu.GraphQL có Hệ thống loại.

Cái nào tốt hơn?

Các tổ chức trên khắp thế giới đang đặt câu hỏi về các lựa chọn công nghệ API của họ và họ đang cố gắng tìm hiểu xem việc chuyển từ REST sang GraphQL có phù hợp nhất với nhu cầu của họ hay không.

GraphQL hoàn toàn phù hợp khi bạn cần hiển thị các biểu diễn dữ liệu phức tạp và khi khách hàng có thể chỉ cần một tập hợp con của dữ liệu hoặc họ thường xuyên thực hiện các truy vấn lồng nhau để lấy dữ liệu họ cần.

Đối với các ngôn ngữ lập trình, không có người chiến thắng duy nhất, tất cả phụ thuộc vào nhu cầu của bạn.

Ngoài ra, có một điểm tôi muốn làm: bạn có thể sử dụng cả hai.

Bạn có thể trộn và kết hợp REST và GraphQL tùy thuộc vào nhu cầu của mình và đôi khi đó là điều tốt nhất nên làm.


Các hướng dẫn về graphql khác: