9

フロント エンドに Javascript、バック エンドに C# を使用して Web アプリを構築し、GraphQL の価値を判断したいと考えています。

  • 私の C# バックエンドでは、GraphQL for .NETという名前の GraphQL 実装を使用します。
  • 私のフロント エンドには、ReactJS とうまく連携するRelayを使用したいと考えています。

次に、バックエンド用に、次のような例の 1 つのようなサンプル スキーマを実装しました

public class StarWarsSchema : Schema
{
    public StarWarsSchema()
    {
        Query = new StarWarsQuery();
    }
}

私のフロントエンドでは、Relay にこのスキーマについて何らかの方法で伝える必要があります。何らかの理由で GraphQL クエリをトランスパイルする必要があるため、少なくともこれはチュートリアルを見ていくときに理解したものです。これは、すべてのドロイドをロードする方法の例です。

class Content extends React.Component<ContentProps, { }> {
    ...
}

export default Relay.createContainer(Content, {
    fragments: {
        viewer: () => Relay.QL`
            fragment on User {
                query HeroNameQuery {
                    droids {
                        id
                        name
                    }
                }
            }
        `,
    }
});

Relayの例の 1 つでbabel-relay-pluginが変換に使用されていることがわかりました。スキーマ ファイル (JSON) を取得します。Relayの入門ガイドには、graphql-js と graphql-relay-js を使用してそのようなスキーマを作成する方法が示されています。

今私の質問:

  1. フロントエンドとバックエンドでスキーマを作成する必要は本当にありますか?
  2. バックエンドはすでにスキーマを使用して適切な形式のデータを返しているため、Relay に自分のスキーマを教える意味は何ですか?
  3. このシナリオで Relay を使用する利点は何ですか? パラメータとして GraphQL クエリを使用し、通常の REST エンドポイントを介してバックエンドにアクセスすると、何が失われますか?
4

1 に答える 1

7
  1. バックエンドでのみスキーマが必要です。このドキュメントの下部にある例を使用して、バックエンドから schema.json をダウンロードできます: https://facebook.github.io/relay/docs/guides-babel-plugin.html
  2. リレーには、クエリを正しく構築し、返されるデータの種類を理解するためのスキーマが必要です。
  3. Relay は React コンポーネントをラップし、レンダリングに必要なすべてのデータを取得/提供します。データ キャッシング、クエリの統合など、すぐに使用できる多くの機能を備えているため、Relay を使用すると、何かをフェッチしたり、コンポーネントにデータがどのように提供されるかを心配したりする必要がなく、クエリとコンポーネントを作成するだけで済みます。
于 2016-09-17T20:34:06.603 に答える