2017-01-09 11 views
6

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?

Trả lời

0

Có nhiều giải pháp cho bộ đệm ẩn, máy chủ và phía máy khách. Tôi không nghĩ REST có cạnh ở đây ...

Bạn có thể giải quyết dữ liệu trong bộ nhớ đệm và triển khai pubsub để biết khi nào cần xóa, bạn cũng có thể có một số loại bộ nhớ đệm trên máy khách.

Không có lý do gì để kết hợp cả hai. Và tôi cảm thấy rằng câu hỏi thực sự không phải là liệu bạn có thể cache thành công với GraphQL, mà là "Cách nào để làm điều đó"?

+0

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

1

Một số triển khai của GraphQL như máy khách và máy chủ Apollo có bổ trợ cho bộ nhớ cache và tôi có dự án kết hợp REST và graphql, vì vậy tôi đang lưu vào bộ nhớ REST trong bộ nhớ (redis) và kết quả truy vấn Graphql được lưu trong trình duyệt bởi apollo client, nó hoạt động rất tốt nhưng tôi nghĩ bạn không cần phải kết hợp REST và graphql như tôi làm cho dự án của bạn là mới, tôi đã tạo ra nguyên nhân này vì tôi không có lựa chọn để xóa REST API và xây dựng tất cả trong graphql, tôi chỉ quấn REST bên trong graphql để có được những lợi ích trong front-end. Đề xuất của tôi là bạn cứ tiếp tục với graphql và áp dụng các kỹ thuật bộ nhớ cache trong các cuộc gọi truy vấn và khách hàng của khách hàng.

Các vấn đề liên quan