Chúng tôi đang xây dựng một API được yêu cầu nhiều và hiện đang xem xét việc sử dụng GraphQL, REST hoặc kết hợp REST và GraphQL. Chúng tôi thích cách tiếp cận của GraphQL mà giao diện người dùng có thể quyết định, dữ liệu nào được trả lại và xem lợi ích của nó. Nhưng mặt khác, chúng tôi đang lo lắng về bộ nhớ đệm vì loại dữ liệu chúng tôi đang lưu trữ (Product and Product Configurations). Đối với thời điểm này chúng ta thấy các tùy chọn sau:GraphQL có cùng khả năng lưu bộ nhớ đệm như REST
Chỉ sử dụng GraphQL: Cho phép chúng tôi để tăng tốc độ developmentand frontend của chúng tôi mang đến cho API của chúng tôi linh hoạt hơn để thực hiện trong tương lai. Nhưng thông qua số lượng sản phẩm cao, chúng tôi muốn sử dụng khả năng bộ đệm http cơ bản và CDN của chúng tôi.
Chỉ sử dụng REST: Cho phép chúng tôi sử dụng bộ đệm http chuẩn trên mọi yêu cầu nhưng cần có điểm cuối xác định cho mọi yêu cầu giao diện người dùng.
Vì vậy, về cơ bản tôi muốn biết liệu khả năng bộ nhớ đệm của GraphQL có giống với REST không?
Chúng tôi cũng nghĩ đến việc kết hợp nó. Lý do cho điều này là chúng ta có một bộ nhớ cache backend mà lưu trữ dữ liệu từ backend-hệ thống của chúng tôi:
- Kết hợp cả hai: Ý tưởng là để có ví dụ như một sản phẩm JSON đằng sau những thiết bị đầu cuối REST của
product/1
mà sẽ phục vụ dữ liệu sản phẩm và tất cả các cấu hình. Điều này sau đó được lưu trong bộ nhớ đệm phụ trợ của chúng tôi. Sau đó, GraphQL có thể được các nhà phát triển phông chữ sử dụng để phân loại các phần cấu hình mà nhu cầu xem cụ thể (ví dụ: sản phẩm/1? Truy vấn = SomeGraphQLQuery '). Vì vậy, REST-Endpoint là cho máy chủ-bộ nhớ đệm và GraphQL cho khách hàng-bộ nhớ đệm.
Cách tiếp cận này có ý nghĩa trong thế giới 'GraphQL' hay nó chỉ là một lớp trừu tượng vô dụng và không mang lại sự cải thiện nào?
REST chắc chắn _can_ có lợi thế nếu bạn muốn dựa vào bộ nhớ đệm tự động bằng các trung gian HTTP như CDN hoặc proxy khác. Để làm cho rằng công việc với GraphQL sẽ yêu cầu trung gian để hiểu GraphQL và tôi không nhận thức được bất kỳ điều đó. – Evert