【问题标题】:Should we add the backend graphql schema in the case of Apollo Client?我们应该在 Apollo Client 的情况下添加后端 graphql 模式吗?
【发布时间】:2020-09-23 13:57:24
【问题描述】:

我正在使用带有 Apollo graphql(服务器端)的后端节点服务器,在客户端上,我也在使用 Apollo Client。
我在 Apollo 客户端的客户端架构中创建了一些客户端特定类型,但我想知道:
我应该对后端类型(模型)做同样的事情吗?只是为了增加一些理智等。

让我用一个例子来解释一下:

这是客户端架构:(客户端特定类型)

import gql from 'graphql-tag';

export default gql`
  type System {
    showSignInModal: Boolean!
  }

  type Robot {
    name: String!
    status: String!
  }

  type Member {
    name: String!
    isLogged: Boolean!
  }

  type Author {
    id: Int!
    posts: Int!
    name: String
  }


  input AuthorInput {
    id: Int!
    posts: Int!
    name: String
  }

`;

我有一个从服务器获取用户数据的查询(服务器特定数据)
那么我应该在我的架构中描述整个用户类型吗?

import gql from "graphql-tag";

export const GET_USER_SHORT_DATA = gql`
  mutation getUserShortData {
    me {
      id,
      email,
      name,
      profileUrl,
      locale
    }
  }
`;

感谢您的建议!

【问题讨论】:

    标签: graphql apollo react-apollo


    【解决方案1】:

    我假设您使用mongoose 进行数据库操作。您的主要类型应该在您的猫鼬模式中定义,因为GraphQL 只是一种查询语言,用于“只获得您想要的”。因此,您应该在两个地方添加相同的类型。在您的 mongoose 代码中用于数据库处理和在您的 GraphQL Schema 中用于查询获取支持。

    对于客户端,如果您使用的是 typescript 之类的类型化语言,那么您也应该在客户端定义它们,以防止出现错误并获得更好的 IDE 建议。

    【讨论】:

    • 嗨,Yogesh。感谢您的回答,但我想知道客户端。在服务器端,我有描述用户等的服务器端架构,这些架构在 GraphiQL 中可用,因此我可以检查它并查看服务器的确切类型。但我的主要兴趣是:我应该在 Client 模式中描述相同的类型吗?还是一种常见的做法?
    • 是的,如果您使用 typescript 之类的类型化语言来防止错误并获得更好的 IDE 建议,这是一种非常常见的做法。
    • 但是 Apollo 模式是专用的。它与 Typescript 没有任何关系。我有点困惑。如果我们使用纯 JS 会怎样?
    • 如果你使用 vanilla js,那么它对你来说意义不大,因为 Vanilla JS 并不关心接口或类型。我的建议是仅在使用 typescript 时才使用 interfaces
    • 看来我们这里有些误会=)。 Graphql(Apollo 客户端)可以用于 Valila JS(没有 typescript),但它有自己的类型和模式。我正在谈论它。看看我的代码示例 :) 这里是 graphql 文档:graphql.org/learn/schema 不管怎样,谢谢你的回答!
    猜你喜欢
    • 2021-01-13
    • 2020-04-24
    • 2020-06-23
    • 2020-02-12
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2013-06-11
    • 2019-09-14
    相关资源
    最近更新 更多