Câu trả lời:
Nhược điểm:
Nhưng, những điều đó còn nhiều hơn những điều sau:
graphql-spring-boot-starter
và graphql-java-tools
bắt đầu. Tạo lược đồ của bạn trong tài nguyên .graphqls và tạo các lớp Trình giải quyết và bạn đã hoàn tất. Để có được một ví dụ kiểm tra hoạt động và chạy mất khoảng 10 phút.
Tôi đã tìm thấy một số mối quan tâm quan trọng đối với bất kỳ ai đang cân nhắc sử dụng GraphQL và cho đến nay các điểm chính là:
Truy vấn độ sâu không xác định : GraphQL không thể truy vấn độ sâu không xác định, vì vậy nếu bạn có một cây và muốn trả về một nhánh mà không biết độ sâu, bạn sẽ phải thực hiện một số phân trang.
Cấu trúc phản hồi cụ thể : Trong GraphQL, phản hồi phù hợp với hình dạng của truy vấn, vì vậy nếu bạn cần phản hồi trong một cấu trúc rất cụ thể, bạn sẽ phải thêm một lớp chuyển đổi để định hình lại phản hồi.
Bộ nhớ cache ở cấp độ mạng : Do cách GraphQL được sử dụng phổ biến qua HTTP (A POST trong một điểm cuối duy nhất), bộ nhớ cache ở cấp độ mạng trở nên khó khăn. Một cách để giải quyết nó là sử dụng Truy vấn liên tục.
Xử lý tải lên tệp : Không có gì về tải lên tệp trong đặc tả GraphQL và các đột biến không chấp nhận tệp trong đối số. Để giải quyết vấn đề này, bạn có thể tải lên tệp bằng cách sử dụng các loại API khác (như REST) và chuyển URL của tệp đã tải lên đến đột biến GraphQL hoặc đưa tệp vào ngữ cảnh thực thi, vì vậy bạn sẽ có tệp bên trong các hàm của trình phân giải.
Thực thi không thể đoán trước : Bản chất của GraphQL là bạn có thể truy vấn kết hợp bất kỳ trường nào bạn muốn nhưng tính linh hoạt này không miễn phí. Có một số mối quan tâm cần biết như Hiệu suất và Truy vấn N + 1.
Các API siêu đơn giản : Trong trường hợp bạn có một dịch vụ hiển thị một API thực sự đơn giản, GraphQL sẽ chỉ tăng thêm độ phức tạp, vì vậy một API REST đơn giản có thể tốt hơn.
Vấn đề lớn nhất mà tôi thấy với graphQL, tức là nếu bạn đang sử dụng với cơ sở dữ liệu quan hệ là với các phép nối .
Thực tế là bạn có thể cho phép / không cho phép một số trường làm cho các phép nối trở nên không tầm thường (không đơn giản). Dẫn đến các truy vấn bổ sung.
Ngoài ra, các truy vấn lồng nhau trong graphql dẫn đến các truy vấn vòng tròn và có thể làm hỏng máy chủ . Cần phải cẩn thận hơn.
Việc giới hạn tốc độ cuộc gọi trở nên khó khăn vì giờ đây người dùng có thể kích hoạt nhiều truy vấn trong một cuộc gọi.
MẸO : Sử dụng dataloader của facebook để giảm số lượng truy vấn trong trường hợp javascript / node
cost
cho yêu cầu. Ngoài ra, đây không phải là mối quan tâm nếu bạn đang sử dụng các truy vấn được xác định trước, trong đó máy khách chỉ gửi ID.
Nó ngày càng tốt hơn mỗi năm, và hiện tại, cộng đồng GraphQL đang phát triển và kết quả là có nhiều giải pháp hơn cho rất nhiều vấn đề đã được nêu trong các câu trả lời khác trước đây. Nhưng để thừa nhận điều gì vẫn đang ngăn cản các công ty ném mọi nguồn lực vào GraphQL, tôi muốn liệt kê một số vấn đề và giải pháp tiếp theo là những vấn đề chưa được giải quyết.
Nhưng có một vài trường hợp khác có thể được coi là bất lợi:
Tóm lại, GraphQL chỉ là một công cụ cho các mục tiêu cụ thể và chắc chắn nó không phải là viên đạn bạc cho mọi vấn đề và tất nhiên không phải là sự thay thế cho REST.
Thực sự tuyệt vời khi có một điểm cuối duy nhất và hiển thị tất cả dữ liệu. Tôi thấy những điểm dưới đây cần được xem xét cho GraphQL:
Ngoài ra, người ta nên xem xét các Ưu điểm sau khi thực hiện:
Dễ dàng thêm điều kiện bằng cách sử dụng các đối số và thứ tự tùy chỉnh sau khi được triển khai
Sử dụng nhiều bộ lọc tùy chỉnh và loại bỏ tất cả các hành động cần được tạo, ví dụ người dùng có thể có id, tên, v.v. làm đối số và thực hiện lọc. Ngoài ra, các bộ lọc cũng có thể được áp dụng trên các nhóm trong người dùng.
Tôi nghĩ rằng graphql vào lúc này phải là một phần của kiến trúc phụ trợ, để tải tệp lên, bạn vẫn gặp phải một api bình thường