如何链接"GraphQL for .NET"和"Relay"中的模式?

Mic*_*lus 9 c# relay reactjs graphql asp.net-core

我想构建一个Web应用程序,前端使用Javascript,后端使用C#,我想确定GraphQL的值.

  • 对于我的C#后端,我使用名为GraphQL for .NET的GraphQL实现.
  • 对于我的前端,我想使用Relay,因为它与ReactJS配合得很好.

现在,对于我的后端,我实现了一个示例模式,如下所示:

public class StarWarsSchema : Schema
{
    public StarWarsSchema()
    {
        Query = new StarWarsQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的前端,我现在需要以某种方式告诉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
                    }
                }
            }
        `,
    }
});
Run Code Online (Sandbox Code Playgroud)

在Relay的一个例子中,我看到babel-relay-plugin用于转换.它获取一个模式文件(JSON).该入门继电器的指南显示,如何建立这样的架构graphql-JS和graphql继电器JS.

现在我的问题:

  1. 我真的需要在前端和后端创建模式吗?
  2. 教学Relay我的模式有什么意义,因为后端已经使用模式来返回格式良好的数据?
  3. 在这种情况下使用Relay有什么好处?当我通过常规REST端点以及GraphQL查询作为参数访问后端时,我会失去什么?

小智 7

  1. 您只需要在后端使用模式,您可以使用本文档底部的示例从后端下载schema.json:https://facebook.github.io/relay/docs/guides-babel-plugin.html
  2. 中继需要模式以正确构造查询并理解返回数据的类型.
  3. Relay包装您的React组件并获取/提供所有必要的数据以进行渲染.有许多开箱即用的功能,如数据缓存,查询整合,因此使用Relay,您无需获取任何内容并担心如何向组件提供数据,您只需编写查询和组件即可.