Sự khác biệt giữa Falcor và GraphQL là gì?


163

GraphQL bao gồm một hệ thống loại, ngôn ngữ truy vấn và ngữ nghĩa thực hiện, xác thực tĩnh và nội quan kiểu, mỗi loại được nêu dưới đây. Để hướng dẫn bạn qua từng thành phần này, chúng tôi đã viết một ví dụ được thiết kế để minh họa các phần khác nhau của GraphQL.

- https://github.com/facebook/graphql

Falcor cho phép bạn biểu diễn tất cả các nguồn dữ liệu từ xa dưới dạng một mô hình miền duy nhất thông qua biểu đồ JSON ảo. Bạn viết mã theo cùng một cách cho dù dữ liệu ở đâu, cho dù trong bộ nhớ trên máy khách hay qua mạng trên máy chủ.

- http://netflix.github.io/falcor/

Sự khác biệt giữa Falcor và GraphQL (trong bối cảnh của Relay) là gì?


5
hãy xem podcast này, nơi Jafar nói về sự khác biệt giữa Relay / GraphQL và Falcor / JSON Graph youtu.be/WL54eYbTJUw?t=53m55s
gdi2290 23/8/15

Câu trả lời:


131

Tôi đã xem Angular Air Tập 26: FalcorJS và Angular 2 nơi Jafar Husain trả lời cách GraphQL so sánh với FalcorJS . Đây là tóm tắt (diễn giải):

  • FalcorJS và GraphQL đang giải quyết cùng một vấn đề (truy vấn dữ liệu, quản lý dữ liệu).
  • Sự khác biệt quan trọng là GraphQL là ngôn ngữ truy vấn và FalcorJS thì không.
  • Khi bạn hỏi FalcorJS về tài nguyên, bạn rất rõ ràng yêu cầu một loạt các giá trị hữu hạn. FalcorJS không hỗ trợ những thứ như phạm vi, vd genres[0..10]. Nhưng nó không hỗ trợ các truy vấn kết thúc mở, vd genres[0..*].
  • GraphQL được thiết lập dựa trên: cung cấp cho tôi tất cả các bản ghi trong đó đúng, theo thứ tự này, v.v. Theo nghĩa này, ngôn ngữ truy vấn GraphQL mạnh hơn FalcorJS.
  • Với GraphQL, bạn có một ngôn ngữ truy vấn mạnh mẽ, nhưng bạn phải diễn giải ngôn ngữ truy vấn đó trên máy chủ.

Jafar lập luận rằng trong hầu hết các ứng dụng, các loại truy vấn đi từ máy khách đến máy chủ đều có chung hình dạng. Do đó, việc có một hoạt động cụ thể và có thể dự đoán được như get và set sẽ cho thấy nhiều cơ hội hơn để tận dụng bộ đệm. Hơn nữa, rất nhiều nhà phát triển đã quen với việc ánh xạ các yêu cầu bằng bộ định tuyến đơn giản trong kiến ​​trúc REST.

Cuộc thảo luận cuối cùng giải quyết xung quanh việc sức mạnh đi kèm với GraphQL có vượt trội hơn mức độ phức tạp hay không.


82

Bây giờ tôi đã viết ứng dụng với cả hai thư viện và tôi có thể đồng ý với mọi thứ trong bài đăng của Gajus, nhưng tìm thấy một số điều khác nhau quan trọng nhất trong việc sử dụng các khung công tác của riêng tôi.

  • Có lẽ sự khác biệt thực tế lớn nhất là hầu hết các ví dụ và có lẽ là công việc được thực hiện cho đến thời điểm này trên GraphQL đã tập trung vào việc tích hợp GraphQL với Relay - hệ thống của Facebook để tích hợp các widget ReactJS với các yêu cầu dữ liệu của họ. Mặt khác, FalcorJS có xu hướng hoạt động tách biệt với hệ thống widget, điều đó có nghĩa là cả hai có thể dễ dàng tích hợp vào máy khách không React / Relay hơn và nó sẽ tự động làm ít hơn cho bạn về mặt phụ thuộc dữ liệu của widget với các widget.
  • Mặt trái của FalcorJS là linh hoạt trong tích hợp phía máy khách là nó có thể rất quan tâm về cách máy chủ cần phải hành động. FalcorJS thực sự có khả năng "Gọi truy vấn này qua HTTP" ngay lập tức - mặc dù Jafar Husain dường như không nói về nó rất nhiều - và một khi bạn bao gồm những điều đó, cách các thư viện khách phản ứng với thông tin máy chủ khá giống nhau ngoại trừ điều đó GraphQL / Relay thêm một lớp cấu hình. Trong FalcorJS, nếu bạn trả về giá trị cho phim, giá trị trả về của bạn tốt hơn là 'phim', trong khi trong GraphQL, bạn có thể mô tả rằng ngay cả khi truy vấn trả về 'phim', bạn nên đặt nó vào kho dữ liệu phía máy khách dưới dạng 'phim '. - đây là một phần của sự đánh đổi sức mạnh và sự phức tạp mà Gajus đã đề cập.
  • Trên cơ sở thực tế, GraphQL và Relay dường như được phát triển hơn. Jafar Husain đã đề cập rằng phiên bản tiếp theo của giao diện Netflix sẽ chạy ít nhất một phần trên FalcorJS trong khi nhóm Facebook đã đề cập rằng họ đã sử dụng một số phiên bản của ngăn xếp GraphQL / Relay trong hơn 3 năm.
  • Cộng đồng nhà phát triển nguồn mở xung quanh GraphQL và Relay dường như đang phát triển mạnh. Có một số lượng lớn các dự án hỗ trợ được tham dự tốt xung quanh GraphQL và Relay trong khi cá nhân tôi đã tìm thấy rất ít xung quanh FalcorJS. Ngoài ra, kho github cơ sở cho Relay ( https://github.com/facebook/relay/pulse ) hoạt động mạnh hơn đáng kể so với kho github cho FalcorJS ( https://github.com/netflix/falcor/pulse ). Khi tôi lần đầu tiên kéo repo Facebook, các ví dụ đã bị hỏng. Tôi đã mở một vấn đề github và nó đã được sửa trong vài giờ. Mặt khác, vấn đề github tôi đã mở trên FalcorJS đã không có phản hồi chính thức trong hai tuần.

1
GraphQL (2012) đã xuất hiện từ lâu trước React và Relay, vì vậy điểm đầu tiên của bạn có thể không hoàn toàn chính xác.
Burgi

Bạn có thể đúng. Tôi không phải là một facebooker, vì vậy tôi thực sự không thể nói về lịch sử. Nhận xét của tôi đến nhiều hơn từ trạng thái hiện tại của tài liệu và các cuộc nói chuyện của facebook. Họ được giới thiệu với thế giới như những người bạn đồng hành ( facebook.github.io/react/blog/2015/02/20/ mẹo ) và cả hai quay trở lại khá nhiều cách. Tôi đã thấy một số câu hỏi mơ hồ về Relay quay lại 3 năm trong các bình luận vào đầu năm 2015 vì vậy có thể cả hai đã được phát triển nội bộ trong vài năm trước khi trình bày với thế giới bên ngoài. Nhưng tôi chắc chắn không có kiến ​​thức đặc biệt.
OverclockedTim

25

Lee Byron, một trong những kỹ sư đằng sau GraphQL đã thực hiện AMA trên hashnode , đây là câu trả lời của anh ấy khi được hỏi câu hỏi này:

  • Falcor trả về các giá trị quan sát, GraphQL chỉ là giá trị. Đối với cách Netflix muốn sử dụng Falcor, điều này rất có ý nghĩa với họ. Họ thực hiện nhiều yêu cầu và trình bày dữ liệu khi nó sẵn sàng, nhưng điều đó cũng có nghĩa là nhà phát triển ứng dụng khách phải làm việc trực tiếp với Đài quan sát. GraphQL là một mô hình yêu cầu / phản hồi và trả về JSON, rất dễ sử dụng. Relay bổ sung trở lại trong một số tính năng động mà Falcor thể hiện trong khi chỉ duy trì sử dụng các giá trị đơn giản.
  • Loại hệ thống. GraphQL được định nghĩa theo hệ thống loại và điều đó cho phép chúng tôi xây dựng nhiều công cụ thú vị như GraphiQL, trình tạo mã, phát hiện lỗi, v.v. Falcor năng động hơn, có giá trị riêng nhưng hạn chế khả năng thực hiện loại điều này
  • Sử dụng mạng. GraphQL ban đầu được thiết kế để vận hành nguồn cấp tin tức của Facebook trên các thiết bị cấp thấp trên các mạng cấp thấp hơn, do đó, nó sẽ có độ dài lớn để cho phép bạn khai báo mọi thứ bạn cần trong một yêu cầu mạng để giảm thiểu độ trễ. Falcor, mặt khác, thường thực hiện nhiều chuyến đi khứ hồi để thu thập dữ liệu bổ sung. Đây thực sự chỉ là sự đánh đổi giữa sự đơn giản của hệ thống và sự kiểm soát của mạng. Đối với Netflix, họ cũng đối phó với các thiết bị cấp thấp (ví dụ: thanh Roku) nhưng giả định là mạng sẽ đủ tốt để truyền phát video.

Chỉnh sửa: Falcor thực sự có thể yêu cầu hàng loạt , làm cho nhận xét về việc sử dụng mạng không chính xác. Cảm ơn @PrzeoR


4
KHÔNG ĐÚNG -> "" "Falcor, mặt khác, thường thực hiện nhiều chuyến đi khứ hồi để thu thập dữ liệu bổ sung. Đây thực sự chỉ là sự đánh đổi giữa sự đơn giản của hệ thống và kiểm soát mạng." "". Chỉ cần kiểm tra chức năng Falcor Batch và nó tương tự hoặc thậm chí tốt hơn trong Relay.
PrzeoR

1
@PrzeoR Cảm ơn bạn đã sửa! Tôi đã chỉnh sửa bài viết!
YasserKaddour

bạn được chào đón :-) liên quan đến FalcorJS kiểm tra để biết thêm chi tiết tại đây: Reacjs.co/2016/02/03/ Lời
PrzeoR 17/8/2016

Bài viết tuyệt vời thực sự Falcor rất tuyệt, tiếc là tôi là Nhà phát triển Scala và không có triển khai Falcor nào trong Scala và bằng bất kỳ ngôn ngữ nào khác cho vấn đề đó, tuy nhiên có Sangria triển khai GraphQL tuyệt vời trong Scala
YasserKaddour 17/8/2016

Và có một lựa chọn khác để chuyển tiếp sử dụng redux như apollo-clientcashay
YasserKaddour 17/8/2016

21

CẬP NHẬT: Tôi đã tìm thấy nhận xét rất hữu ích dưới bài đăng của mình mà tôi muốn chia sẻ với bạn như một điều bổ sung cho nội dung chính: nhập mô tả hình ảnh ở đây

Về việc thiếu các ví dụ, bạn có thể tìm thấy người dùng repo tuyệt vời, có nhiều ví dụ khác nhau về cách sử dụng CRUD của Falcor: https://github.com/przeor/awclaw-falcorjs ... Điều thứ hai, có một cuốn sách tên là " Nắm vững phát triển phản ứng toàn ngăn xếp "bao gồm cả Falcor (cách tốt để học cách sử dụng nó):

nhập mô tả hình ảnh ở đây

BÀI VIẾT TỔ CHỨC DƯỚI ĐÂY:

FalcorJS ( https://www.facebook.com/groups/falcorjs/ ) đơn giản hơn nhiều để có hiệu quả so với Relay / GraphQL.

Đường cong học tập cho GraphQL + Relay là LỚN: nhập mô tả hình ảnh ở đây

Trong tóm tắt ngắn gọn của tôi: Đi cho Falcor. Sử dụng Falcor trong dự án tiếp theo của bạn cho đến khi BẠN có ngân sách lớn và nhiều thời gian học tập cho nhóm của bạn sau đó sử dụng RELAY + GRAPHQL.

GraphQL + Relay có API khổng lồ mà bạn phải có hiệu quả. Falcor có API nhỏ và rất dễ nắm bắt đối với bất kỳ nhà phát triển front-end nào quen thuộc với JSON.

Nếu bạn có một dự án AGILE với nguồn lực hạn chế -> thì hãy tìm FalcorJS!

Ý kiến ​​ĐỐI TƯỢNG CỦA TÔI: FalcorJS dễ dàng hơn 500% để có hiệu quả trong javascript đầy đủ.

Tôi cũng đã xuất bản một số bộ khởi động FalcorJS trong dự án của mình (+ các dự án ví dụ đầy đủ hơn của falcor): https://www.github.com/przeor

Để biết thêm chi tiết về kỹ thuật:

1) Khi bạn đang sử dụng Falcor, thì bạn có thể sử dụng cả trên front-end và backend:

nhập khẩu falcor từ 'falcor';

và sau đó xây dựng mô hình của bạn dựa trên.

... bạn cũng cần hai thư viện đơn giản để sử dụng trên phụ trợ: a) falcor-express - bạn sử dụng nó một lần (ví dụ: app.use ('/ model.json', FalcorServer.dataSourceRoute (() => tên mới ())) ). Nguồn: https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/index.js

b) falcor-router - ở đó bạn xác định các tuyến SIMPLE (ví dụ : tuyến đường: '_view.length' ). Nguồn: https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/router.js

Falcor là miếng bánh về phương diện học tập.

Bạn cũng có thể xem tài liệu đơn giản hơn nhiều so với lib của FB và cũng xem bài viết " tại sao bạn nên quan tâm đến falcorjs (netflix falcor) ".

2) Relay / GraphQL giống như một công cụ doanh nghiệp khổng lồ.

Ví dụ: bạn có hai tài liệu khác nhau mà riêng biệt đang nói về:

a) Rơle: https://facebook.github.io/relay/docs/tutorial.html - Container - Tuyến đường - Root Container - Trạng thái sẵn sàng - Đột biến - Lớp mạng - Plugin chuyển tiếp Babel - GRAPHQL

  • Đặc điểm kỹ thuật chuyển tiếp GraphQL
  • Nhận dạng đối tượng
  • Kết nối
  • Đột biến
  • Đọc thêm
  • THAM KHẢO API

  • Rơle

  • RelayContainer
  • Rơle
  • Rơle.RootContainer
  • Tiếp sức.QL
  • Rơle
  • Rơle.PropTypes
  • Tiếp sức
  • GIAO DỊCH

  • RelayNetworkLayer

  • RelayMutingRequest
  • RelayQueryRequest

b) GrapQL: https://facebook.github.io/graphql/

  • 2 Ngôn ngữ
  • 2.1 Nguồn văn bản
  • 2.1.1 Mã số
  • 2.1.2 Không gian trắng
  • 2.1.3 Thiết bị đầu cuối dây
  • 2.1.4 Phần
  • 2.1.5 Dấu phẩy không đáng kể
  • 2.1.6 Mã thông báo chính thức
  • 2.1.7 Mã thông báo được nhận
  • 2.1.8.
  • 2.1.9Tên
  • Tài liệu 2.2Query
  • 2.2.1 Hoạt động
  • 2.2.2 Bộ phụ kiện
  • 2.2.3 Lợi nhuận
  • 2.2.4Kiến thức
  • 2.2.5 Bí danh năng suất
  • 2.2.6Fragment
  • 2.2.6.1 Loại điều kiện
  • 2.2.6.2 Đoạn nội tuyến
  • 2.2.7 Giá trị đầu vào
  • Giá trị 2.2.7.1Int
  • 2.2.7.2 Giá trị gia tăng
  • 2.2.7.3 Giá trị động học
  • 2.2.7.4 Giá trị thanh toán
  • Giá trị 2.2.7.5Enum
  • 2.2.7.6 Giá trị danh sách
  • 2.2.7.7 Giá trị đối tượng đầu vào
  • 2.2.8 Biến
  • 2.2.8.1 Sử dụng có thể thay đổi trong Fragment
  • 2.2.9 Các loại thông số
  • 2.2.10 Hướng dẫn
  • 2.2.10.1 Chỉ thị khuyến khích
  • Hệ thống 3Type
  • 3,1 loại
  • 3.1.1Sarars
  • 3.1.1.1 Được tích hợp vô hướng
  • 3.1.1.1.1Int
  • 3.1.1.1.2Float
  • 3.1.1.1.3String
  • 3.1.1.1.4Boolean
  • 3.1.1.1.5ID
  • 3.1.2 Dự án
  • 3.1.2.1Oject đối số trường
  • 3.1.2.2 Khấu hao trường dự án
  • 3.1.2.3 Xác thực loại dự án
  • 3.1.3 Giao diện
  • 3.1.3.1 Xác thực kiểu khuôn mặt
  • 3.1.4 Liên minh
  • 3.1.4.1 Xác thực loại
  • 3.1.5Enums
  • 3.1.6 Đối tượng đầu vào
  • 3.1.7Lists
  • 3.1.8Không
  • 3.2 Hướng dẫn
  • 3.2.1@skip
  • 3.2.2 @ bao gồm
  • 3.3 Các loại khởi động
  • 4 Hướng dẫn
  • 4.1 Nguyên tắc chung
  • 4.1.1 Quy ước đặt hàng
  • 4.1.2 Tài liệu
  • 4.1.3 Đánh giá cao
  • 4.1.4 Loại tên nội quan
  • 4.2Schema nội tâm
  • 4.2.1 Loại "__Type"
  • 4.2.2 Các loại
  • 4.2.2.1Sarar
  • 4.2.2.2
  • 4.2.2.3Union
  • 4.2.2.4Trình mặt
  • 4.2.2.5Enum
  • 4.2.2.6 Đối tượng đầu vào
  • 4.2.2.7 Liệt kê
  • 4.2.2.8Không
  • 4.2.2.9 Danh sách kết hợp và không Null
  • 4.2.3 Loại __Field
  • 4.2.4 Loại __InputValue
  • 5Validation
  • 5.1Operations
  • 5.1.1 Định nghĩa hoạt động được đặt tên
  • 5.1.1.1Operation Tên duy nhất
  • 5.1.2 Định nghĩa hoạt động đồng nghĩa
  • 5.1.2.1 Hoạt động ẩn danh
  • 5,2 Lợi nhuận
  • 5.2.1 Lựa chọn năng suất trên các loại đối tượng, giao diện và các loại kết hợp
  • 5.2.2 Kết hợp lựa chọn năng suất
  • 5.2.3 Lựa chọn trường trống
  • 5.3Argument
  • 5.3.1 Tên biểu tượng
  • 5.3.2Argument tính độc đáo
  • 5.3.3 Giá trị bản quyền Loại chính xác
  • 5.3.3.1 Giá trị tương thích
  • 5.3.3.2 Lý luận đầy đủ
  • 5.4Fragment
  • 5.4.1 Tuyên bố
  • 5.4.1.1 Tên duy nhất
  • 5.4.1.2 Hiện diện loại lây lan
  • 5.4.1.3Fragments trên các loại hỗn hợp
  • 5.4.1.4Fragments phải được sử dụng
  • 5.4.2 Lan truyền
  • 5.4.2.1 Mục tiêu lây lan được xác định
  • 5.4.2.2 Lan truyền không được tạo thành chu kỳ
  • 5.4.2.3 Lan truyền có thể xảy ra
  • 5.4.2.3.1Object lây lan trong phạm vi đối tượng
  • 5.4.2.3.2. Chênh lệch chênh lệch trong phạm vi đối tượng
  • 5.4.2.3.3Object lây lan trong phạm vi trừu tượng
  • 5.4.2.3.4 lây lan trong phạm vi trừu tượng
  • 5,5 giá trị
  • 5.5.1 Tính duy nhất của trường đối tượng
  • 5.6 Hướng dẫn
  • 5.6.1 Các hướng dẫn được xác định
  • 5,7 Biến
  • 5.7.1 Tính duy nhất có thể thay đổi
  • 5.7.2 Các giá trị mặc định có thể thay đổi được nhập chính xác
  • 5.7.3 Biến là loại đầu vào
  • 5.7.4Tất cả các biến sử dụng được xác định
  • 5.7.5Tất cả các biến được sử dụng
  • 5.7.6Tất cả các cách sử dụng biến được phép
  • 6 Thi hành
  • 6.1 Yêu cầu định giá
  • Biến số 6.2Cocing
  • 6.3 Hoạt động định giá
  • 6.4 Bộ định giá
  • 6.5 Đánh giá một tập hợp trường được nhóm
  • 6.5.1 Mục nhập năng suất
  • 6.5.2 Đánh giá bất thường
  • 6.5.3 Thực thi lệnh
  • 6.5.4Error xử lý
  • 6.5.5Khả năng
  • 7 phản hồi
  • Định dạng 7.1Serialization
  • 7.1.1
  • Định dạng 7.2Response
  • 7.2.1Data
  • 7.2.2 Gương
  • Phụ lục: Công ước ký hiệu
  • A.1 Ngữ pháp không có nội dung
  • A.2 Ngữ pháp học và ngữ pháp
  • Ký hiệu A.3Grammar
  • A.4Grammar Semantics
  • A.5 Thuật toán
  • Phụ lục: Tóm tắt ngữ pháp
  • Mã thông báo B.1Ignored
  • Mã thông báo B.2Lexical
  • Tài liệu B.3Query

Đó là sự lựa chọn của bạn:

Falcor JS VERSUS tài liệu đơn giản và ngọt ngào Công cụ cấp doanh nghiệp lớn với tài liệu dài và nâng cao là GraphQL & Relay

Như tôi đã nói trước đây, nếu bạn là một nhà phát triển hàng đầu nắm bắt ý tưởng sử dụng JSON, thì việc triển khai biểu đồ JSON từ nhóm của Falcor là cách tốt nhất để thực hiện dự án phát triển toàn bộ ngăn xếp của bạn.


13
Trả lời chủ quan. Không bao gồm so sánh kỹ thuật. Thích hợp hơn như một bình luận.
Gajus 14/03/2016

2
@GajusKuizinas trả lời chủ quan? Kiểm tra tài liệu của cả hai ;-) Tôi chỉ nói rằng Falcor học nhanh hơn và nhanh hơn - và đó là sự thật ;-) tôi cũng đã làm việc với cả hai - sự đơn giản sẽ chiến thắng trong thời gian dài ngay cả khi FB đang làm rất tốt công việc với sự cường điệu ;-)
PrzeoR 14/03/2016

2
Đó chỉ là một ý kiến ​​và nó không trả lời câu hỏi nào cả.
Michał Miszczyszyn 15/03/2016

14
Tôi nghĩ rằng đây là một câu trả lời tuyệt vời, đến thời điểm này, đường cong học tập của công nghệ không nhất thiết phải chủ quan và có thể dễ dàng đo lường, các sự kiện đang được trình bày ở đây để có thể rút ra kết luận rõ ràng. Trong thế giới thực, các chuyên gia nghiêm túc xem xét những sự thật này. Đây là sau tất cả một câu hỏi mở, trong đó rõ ràng lợi ích từ các câu trả lời như thế này.
bmaggi

2
Tôi đồng ý với @MorgenCheng, đã bỏ phiếu! Tôi đã thực hiện các vòng trong vài tuần qua để đánh giá GraphQL / Relay, Cashay, Redux và giờ là Falcor, và tôi đồng ý 100% với PrzeoR. Relay và GraphQL là những công nghệ tuyệt vời nhưng chúng đòi hỏi nhiều trí tuệ hơn và khó tìm kiếm người mới hơn. Có một lượng đáng kể học tập liên quan. Nhược điểm của Falcor, là thiếu ví dụ cho một ứng dụng dựa trên CRUD đầy đủ. Và tôi rất muốn thấy các dự án PostgreSQL và RethinkDB phun ra JsonGraph.
Dom

5

Nói tóm lại, Falcor hoặc GraphQL hoặc Restful giải quyết cùng một vấn đề - cung cấp một công cụ để truy vấn / thao tác dữ liệu hiệu quả.

Làm thế nào họ khác nhau là cách họ trình bày dữ liệu của họ:

  • Falcor muốn bạn nghĩ dữ liệu của họ như một cây JSON ảo rất lớn và sử dụng get , setgọi để đọc, ghi dữ liệu.
  • GraphQL muốn bạn nghĩ dữ liệu của họ như một nhóm các đối tượng được xác định trước và sử dụng các truy vấnđột biến để đọc, ghi dữ liệu.
  • Restful muốn bạn nghĩ dữ liệu của họ như một nhóm tài nguyên và sử dụng động từ HTTP để đọc, ghi dữ liệu.

Bất cứ khi nào chúng tôi cần cung cấp dữ liệu cho người dùng, chúng tôi sẽ kết thúc với một thứ thích: client -> truy vấn -> {một lớp dịch truy vấn thành dữ liệu ops} -> dữ liệu.

Sau khi vật lộn với GraphQL, Falcor và API JSON (và thậm chí ODdata), tôi đã viết lớp truy vấn dữ liệu của riêng mình . Nó đơn giản hơn, dễ học hơn và tương đương hơn với GraphQL.

Kiểm tra nó tại:
https://github.com/giapnguyen74/nextql

Nó cũng tích hợp với Featherjs cho truy vấn / đột biến thời gian thực. https://github.com/giapnguyen74/nextql-feathers


2

OK, chỉ cần bắt đầu từ một sự khác biệt đơn giản nhưng quan trọng, GraphQL là một truy vấn dựa trên trong khi Falcor thì không!

Nhưng họ giúp bạn như thế nào?

Về cơ bản, cả hai đều giúp chúng tôi quản lý và truy vấn dữ liệu, nhưng GraphQLMô hình req / res và trả lại dữ liệu dưới dạng JSON , về cơ bản, ý tưởng trong GraphQL là có một yêu cầu duy nhất để có được tất cả dữ liệu của bạn trong một mục tiêu ... Ngoài ra, có phản hồi chính xác bằng cách có một yêu cầu chính xác, Vì vậy, một cái gì đó để chạy trên internet và thiết bị di động tốc độ thấp, như mạng 3G ... Vì vậy, nếu bạn có nhiều người dùng di động hoặc vì một số lý do bạn muốn có ít yêu cầu hơn và phản hồi nhanh hơn , sử dụng GraphQL ... Mặc dù Faclor không quá xa, nên đọc tiếp ...

Mặt khác, Falcor của Netflix, thường có thêm yêu cầu (thường là hơn một lần) để truy xuất tất cả dữ liệu của bạn, mặc dù họ cố gắng cải thiện nó thành một req duy nhất ... Falcor bị hạn chế hơn đối với các truy vấn và không có trước trình trợ giúp truy vấn được xác định như phạm vi và vv ...

Nhưng để làm rõ hơn, chúng ta hãy xem cách mỗi người trong số họ tự giới thiệu:

GraphQL, Ngôn ngữ truy vấn cho API của bạn

GraphQL là ngôn ngữ truy vấn cho API và thời gian chạy để thực hiện các truy vấn đó với dữ liệu hiện có của bạn. GraphQL cung cấp mô tả đầy đủ và dễ hiểu về dữ liệu trong API của bạn, cung cấp cho khách hàng khả năng yêu cầu chính xác những gì họ cần và không có gì nữa, giúp phát triển API dễ dàng hơn theo thời gian và cho phép các công cụ phát triển mạnh mẽ.

Gửi truy vấn GraphQL đến API của bạn và nhận chính xác những gì bạn cần, không hơn không kém. Các truy vấn GraphQL luôn trả về kết quả dự đoán. Các ứng dụng sử dụng GraphQL rất nhanh và ổn định vì chúng kiểm soát dữ liệu họ nhận được chứ không phải máy chủ.

Truy vấn GraphQL không chỉ truy cập các thuộc tính của một tài nguyên mà còn theo dõi trơn tru các tham chiếu giữa chúng. Mặc dù API REST điển hình yêu cầu tải từ nhiều URL, API GraphQL nhận tất cả dữ liệu mà ứng dụng của bạn cần trong một yêu cầu. Các ứng dụng sử dụng GraphQL có thể nhanh chóng ngay cả trên các kết nối mạng di động chậm.

API GraphQL được tổ chức theo các loại và trường, không phải điểm cuối. Truy cập toàn bộ khả năng dữ liệu của bạn từ một điểm cuối duy nhất. GraphQL sử dụng các loại để đảm bảo Ứng dụng chỉ yêu cầu những gì có thể và cung cấp các lỗi rõ ràng và hữu ích. Ứng dụng có thể sử dụng các loại để tránh viết mã phân tích thủ công.


Falcor, một thư viện JavaScript để tìm nạp dữ liệu hiệu quả

Falcor cho phép bạn biểu diễn tất cả các nguồn dữ liệu từ xa dưới dạng một mô hình miền duy nhất thông qua biểu đồ JSON ảo. Bạn viết mã theo cùng một cách cho dù dữ liệu ở đâu, cho dù trong bộ nhớ trên máy khách hay qua mạng trên máy chủ.

Cú pháp đường dẫn giống như JavaScript giúp bạn dễ dàng truy cập nhiều hoặc ít dữ liệu như bạn muốn, khi bạn muốn. Bạn lấy dữ liệu của mình bằng các thao tác JavaScript quen thuộc như get, set và call. Nếu bạn biết dữ liệu của mình, bạn sẽ biết API của mình.

Falcor tự động duyệt qua các tham chiếu trong biểu đồ của bạn và thực hiện các yêu cầu khi cần thiết. Falcor xử lý một cách minh bạch tất cả các thông tin liên lạc mạng, yêu cầu xử lý theo khối và cơ hội.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.