【问题标题】:Admin on Rest graphql client returns empty resourcesRest graphql 客户端上的管理员返回空资源
【发布时间】:2020-12-23 22:36:04
【问题描述】:

我正在尝试在使用 graphql 客户端时与管理员交手。我正在使用“aor-graphql-client-graphcool”和启动板上的端点。 调试应用程序会显示分配给资源键的零长度数组。类型/查询看起来不错,所以我认为内省工作正常。

introspectionResults {types: Array(39), queries: Array(9), resources: Array(0)}

我已经在我的端点中实现了 getPageOf[Resource]s 和 get[Resource] 查询,但如果我需要做更多的事情,文档中并不清楚。

我在 next.js react 组件中初始化客户端,如文档所示:

componentDidMount() {
  buildApolloClient({
    clientOptions: {
      uri: 'https://xxxxxxxxx.lp.gql.zone/graphql'
    }
  }).then((restClient) => {
    this.setState({ restClient });
  });
}

我还尝试禁用自省并传入自定义查询,但在这种情况下,我的自省结果为空。

我想知道以下几点:

  • 启动板是否与 graphcool 客户端兼容?
  • 我是否需要在客户端初始化时进行更多配置才能填充资源。
  • 休息时管理员是否是它声称的灵丹妙药,即它能否通过自省查询破译我的架构并呈现数据。

我真的希望如此,因为这东西看起来很酷!

【问题讨论】:

    标签: graphql admin-on-rest


    【解决方案1】:

    您需要自省或 schema.js 文件来使用您的 graphql 服务器的可用资源和类型初始化 admin-on-rest (aor)。 AOR 做了很多工作,但由于 graphql 正在发展并且也没有标准化所有内容(例如预期变量或其命名约定),您将不得不为 graphql 调整简单的数据提供程序(请参阅 graphql 的示例/演示)或编写自己的.

    我是如何开始的:如果您刚刚开始使用新的 graphql 服务器/模式,那么将您自己的示例基于示例/演示(如 AOR 文档中所述)。请务必使用存储库的“下一个”分支。首先逐步完成将从您的示例中调用的 ra-data-graphql/src/index.js 和 ra-data-graphql-simple/src/index.js。这将向您显示您的自省结果与默认/简单 dataProvider 不匹配的位置。

    【讨论】:

    • 谢谢,但不是问题。内省工作正常。我的架构中的 graphql(标准)接口类型导致 AOR 拒绝该架构。如果您声称支持 GrahpQL,则 INTERFACE 不是可选的...
    【解决方案2】:

    如果您的自省返回一个空的resources,您主要需要为您的自省函数提供一个适配器。

    默认情况下,react-admin 需要特定的架构形状(更多详细信息here

    例如,对于Post 资源,您应该使用allPosts 查询来获取Post 的列表

    type Query {
      Post(id: ID!): Post
      allPosts(page: Int, perPage: Int, sortField: String, sortOrder: String, filter: PostFilter): [Post]
      _allPostsMeta(page: Int, perPage: Int, sortField: String, sortOrder: String, filter: PostFilter): ListMetadata
    }
    

    如果在您的后端,而不是 allPosts,您有 postList,例如,您可以使用自省选项将 allPosts 映射到 postList

    export const introspectionOperationNames = {
        //schema,
        [GET_LIST]: resource => {
            return `${inflection.camelize(resource.name, true)}List`;
        },
        ...
    };
    

    CREATEGET_ONEGET_MANYGET_MANY_REFERENCEUPDATEDELETE 相同。

    您可以找到一个很好的自定义内省示例here

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 2019-01-04
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2015-08-30
      相关资源
      最近更新 更多