GraphQLは、型システム、クエリ言語と実行セマンティクス、静的検証、型イントロスペクションで構成されます。それぞれの概要を以下に示します。これらの各コンポーネントをガイドするために、GraphQLのさまざまな部分を説明するための例を作成しました。
- https://github.com/facebook/graphql
Falcorでは、仮想JSONグラフを介して、すべてのリモートデータソースを単一のドメインモデルとして表すことができます。データの場所に関係なく、クライアントのメモリ内でもサーバー上のネットワーク経由でも同じ方法でコーディングします。
- http://netflix.github.io/falcor/
FalcorとGraphQLの違いは何ですか(Relayのコンテキストで)?
私は Angular Airエピソード26:FalcorJSとAngular 2 を見ました。ここで Jafar HusainGraphQL と FalcorJS の比較。これは要約です(言い換え):
genres[0..10]
。ただし、オープンエンドのクエリはサポートしていません。 genres[0..*]
。Jafarは、ほとんどのアプリケーションでは、クライアントからサーバーに送信されるクエリのタイプは同じ形を共有していると主張します。したがって、getやsetなどの特定の予測可能な操作があると、キャッシュを活用する機会が増えます。さらに、多くの開発者は、RESTアーキテクチャの単純なルーターを使用してリクエストをマッピングすることに精通しています。
最後の議論は、GraphQLに付属するパワーが複雑さを上回るかどうかについて解決します。
両方のライブラリを使用してアプリを作成しました。Gajusの投稿のすべてに同意できますが、フレームワークを使用する上でいくつかの異なることが最も重要であることがわかりました。
Lee Byron GraphQLの背後にいるエンジニアの1人が hashnodeのAMA を実行しました。この質問をしたときの答えは次のとおりです。
- FalcorはObservablesを返し、GraphQLは値のみを返します。 NetflixがFalcorをどのように使用したいかについて、これは非常に理にかなっています。複数のリクエストを作成し、準備ができたらデータを提示しますが、クライアント開発者はObservablesを直接操作する必要があります。 GraphQLは要求/応答モデルであり、JSONを返します。JSONは簡単に使用できます。リレーは、単純な値のみを使用して維持しながら、Falcorが提示するダイナミズムの一部を追加します。
- Type system。 GraphQLはタイプシステムの観点から定義されているため、GraphiQL、コードジェネレータ、エラー検出など、多くの興味深いツールを構築できます。Falcorははるかに動的で、価値がありますそれ自体が、この種のことを行う能力を制限します。
- ネットワークの使用状況 GraphQLは、もともとローエンドネットワーク上のローエンドデバイスでFacebookのニュースフィードを操作するために設計されたため、1つのネットワークリクエストで必要なすべてを順番に宣言できるようになります遅延を最小限に抑えます。一方、Falcorは多くの場合、複数のラウンドトリップを実行して追加データを収集します。これは、システムのシンプルさとネットワークの制御とのトレードオフにすぎません。 Netflixの場合、非常にローエンドのデバイス(Rokuスティックなど)も処理しますが、ビデオをストリーミングするのに十分なネットワークであることが前提です。
編集:Falcorは実際に バッチ要求 を実行でき、ネットワークの使用に関するコメントを不正確にします。 @PrzeoRに感謝
更新:投稿の下で、メインコンテンツの補足として共有したい非常に有用なコメントを見つけました。
例の欠如については、awesome-falcorjsリポジトリが使いやすいことがわかります。FalcorのCRUDの使用例がいくつかあります。 https://github.com/przeor/awesome-falcorjs ... 、「 Mastering Full Stack React Development 」という本があります。これにはFalcorも含まれています(使用方法を学ぶための良い方法です)。
元のPOST以下:
FalcorJS( https://www.facebook.com/groups/falcorjs/ )は、Relay/GraphQLと比較して効率がはるかに簡単です。
私の短い要約では、Falcorに行きましょう。次のプロジェクトでFalcorを使用して、チームに大きな予算と多くの学習時間を与えてから、RELAY + GRAPHQLを使用します。
GraphQL + Relayには巨大なAPIがあり、それを効率的にする必要があります。Falcorには小さなAPIがあり、JSONに精通しているフロントエンド開発者であれば非常に簡単に把握できます。
リソースが限られているAGILEプロジェクトがある場合-> FalcorJSをお試しください!
私の主観的な意見:FalcorJSは、フルスタックJavaScriptで500%以上簡単に効率化できます。
また、私のプロジェクトでFalcorJSスターターキットを公開しました(フルスタックのfalcorのサンプルプロジェクトがさらにあります): https://www.github.com/przeor
技術的な詳細を確認するには:
1)Falcorを使用している場合、フロントエンドとバックエンドの両方で使用できます。
「falcor」からfalcorをインポートします。
そして、それに基づいてモデルを構築します。
...バックエンドで簡単に使用できる2つのライブラリも必要です。a)falcor-express-1回使用します(例app.use( '/ model.json'、FalcorServer.dataSourceRoute(( )=>新しいNamesRouter())))。ソース: https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/index.js
b)falcor-router-単純なルートを定義します(例:route: '_view.length')。ソース: https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/router.js
Falcorは、学習曲線の点で非常に簡単です。
また、FBのlibよりもはるかに簡単なドキュメントを参照して、記事「 なぜfalcorjs(netflix falcor) 」を確認することもできます。
2)Relay/GraphQLは、巨大なエンタープライズツールのようです。
たとえば、次の2つの異なるドキュメントがあり、それぞれ個別に説明しています。
a)リレー: https://facebook.github.io/relay/docs/tutorial.html -コンテナー-ルート-ルートコンテナー-準備完了状態-突然変異-ネットワーク層-Babel Relayプラグイン-GRAPHQL
APIリファレンス
リレー
インターフェース
RelayNetworkLayer
b)GrapQL: https://facebook.github.io/graphql/
あなたの選択です:
GraphQL&Relayのように長くて高度なドキュメントを備えた、シンプルで短いドキュメントFalcor JS VERSUS巨大エンタープライズグレードのツール
前にも言ったように、JSONを使用するというアイデアを理解しているフロントエンド開発者であれば、FalcorのチームによるJSONグラフ実装がフルスタックの開発プロジェクトを行うのに最適な方法です。
要するに、FalcorまたはGraphQLまたはRestfulは同じ問題を解決します-データを効率的に照会/操作するツールを提供します。
それらの違いは、データの表示方法にあります。
ユーザーにデータを提供する必要があるときはいつでも、クライアント->クエリ-> {レイヤーがクエリをデータopsに変換します}->データのようになります。
GraphQL、Falcor、JSON API(およびODdata)に苦労した後、私は独自の データクエリレイヤー を作成しました。 GraphQLの方がシンプルで、学習しやすく、同等です。
でそれをチェックしてください:
https://github.com/giapnguyen74/nextql
また、リアルタイムのクエリ/突然変異のためにfeatherjsと統合します。 https://github.com/giapnguyen74/nextql-feathers
OK、単純だが重要な違いから始めてください。GraphQLはクエリベースですが、Falcorは違います!
しかし、彼らはあなたをどのように助けますか?
基本的に、データの管理とクエリの両方に役立ちますが、GraphQLにはreq/res Modelがあり、データをJSONとして返します。基本的にGraphQLのアイデアは、1つの目標ですべてのデータを取得するための単一の要求を持っていることです...また、正確な要求を持つことによって正確な応答を持っているので、低速インターネットとモバイルで実行するもの3Gネットワークなどのデバイス...したがって、多くのモバイルユーザーがいる場合、または何らかの理由でリクエストを減らして応答を速くしたい場合は、GraphQL ...を使用しますFaclorこれからそれほど遠くないので、読んでください...
一方、NetflixによるFalcorは、すべてのデータを取得するための追加の要求(通常は複数回)がありますが、単一の要求に改善しようとしていますが... Falcorはクエリに対してより制限されており、範囲などの事前定義されたクエリヘルパーはありません...
しかし、より明確にするために、それらのそれぞれがどのように自己紹介するかを見てみましょう:
GraphQL、APIのクエリ言語
GraphQLは、APIのクエリ言語であり、既存のデータでこれらのクエリを実行するためのランタイムです。 GraphQLは、API内のデータの完全で理解可能な説明を提供し、クライアントが必要なものだけを要求する能力を提供し、APIを徐々に進化させ、強力な開発者ツールを有効にします。
GraphQLクエリをAPIに送信して、必要なものだけを取得します。 GraphQLクエリは常に予測可能な結果を返します。 GraphQLを使用するアプリは、サーバーではなく取得するデータを制御するため、高速で安定しています。
GraphQLクエリは、1つのリソースのプロパティだけでなく、それらの間の参照にもスムーズにアクセスします。典型的なREST APIは複数のURLからロードする必要がありますが、GraphQL APIはアプリが必要とするすべてのデータを単一のリクエストで取得します。 GraphQLを使用するアプリは、低速のモバイルネットワーク接続でも高速に動作します。
GraphQL APIは、エンドポイントではなく、タイプとフィールドの観点から整理されています。単一のエンドポイントからデータのすべての機能にアクセスします。 GraphQLは型を使用して、アプリが可能なことのみを要求し、明確で役立つエラーを提供するようにします。アプリは型を使用して、手動の解析コードを記述することを回避できます。
Falcor、効率的なデータ取得のためのJavaScriptライブラリ
Falcorでは、仮想JSONグラフを介して、すべてのリモートデータソースを単一のドメインモデルとして表すことができます。データがどこにあっても、クライアントのメモリ内であろうとサーバー上のネットワーク上であろうと同じ方法でコーディングします。
JavaScriptに似たパス構文を使用すると、必要なときに必要なだけデータにアクセスできます。 get、set、callなどの使い慣れたJavaScript操作を使用してデータを取得します。データを知っていれば、APIを知っています。
Falcorはグラフ内の参照を自動的にトラバースし、必要に応じて要求を行います。 Falcorは、すべてのネットワーク通信を透過的に処理し、要求を日和見的にバッチ処理および重複排除します。