为啥在graphene-django中中继?

Posted

技术标签:

【中文标题】为啥在graphene-django中中继?【英文标题】:Why relay in graphene-django?为什么在graphene-django中中继? 【发布时间】:2019-01-13 00:11:03 【问题描述】:

我想知道为什么 Relay 规范在 graphene-django 中?我知道在 graphene-django 中使用中继我们默认获得分页和过滤器。

我的要求是从 React 调用 graphql apis(用于 Web)并使用 Apollo 客户端用于 androidios

    客户端使用使用graphene-django 编写的graphql api 是否会出现问题,该api 具有Relay 兼容,尤其是分页(和游标)功能?

    如何使用graphene-django支持订阅?

任何帮助将不胜感激。

【问题讨论】:

@RajKrishan 您的问题实际上是两个独立的问题,它们必须分开。第一个问题根本不是石墨烯python特有的。 【参考方案1】:

Relay 是 React 和任何 GraphQL 服务器之间的客户端中间件。 graphene-django 提供的 Relay Specs 只是让使用 graphene-django 更容易。它们不是绝对必要的

    客户端使用使用graphene-django编写的graphql api应该没有问题

    订阅由单独的包处理 - graphene-django-subscriptions

【讨论】:

感谢您的回复。只是再澄清几句。 “它们不是绝对必要的” - 如何在 graphene-django 中不使用中继的情况下实现分页?此外,“客户端使用使用 graphene-django 编写的 graphql api 应该没有问题” - 在 graphene-django 中实现了 Relay?。 Relay Specs 对于使用 graphene-django 作为 GraphQL 服务器不是必需的。它们只是为了让使用 Relay 更容易/更快。结果的分页由 graphene-django 提供。 in graphene-django 未实现中继。 Relay 在客户端(在浏览器中)运行,并在 React 和任何 GraphQL 服务器(graphene-django 提供)之间提供了一座桥梁。数据分页由 graphene-django 提供。 UI 分页由您在 React 中提供。同样,Relay 只是两者之间的桥梁。 但是 Relay 作为 graphene 包中的一个模块存在,并添加了很多功能,例如分页和过滤器。此外,还有一些缺点——例如模型中“id”字段的阴影。问题“我们可以在不使用中继的情况下快速实现分页吗?”到目前为止,这是一个悬而未决的问题。 @Psion 据我所知,只有graphene_django_extras包提供了简单且独立于Relay Server Spec的实现。但是我非常不鼓励你使用这个包——它有很多奇怪的行为和难以调整默认逻辑的地方。可能,仅使用中继支持将是最好的解决方案。【参考方案2】:

    使用符合 Relay 的 graphene-django API 没有任何问题。我的团队目前正在使用react-query library,效果非常好!

    正如这个 graphene-django Github issue 中提到的,GraphQL 订阅目前不支持开箱即用。

【讨论】:

以上是关于为啥在graphene-django中中继?的主要内容,如果未能解决你的问题,请参考以下文章

在没有中继的情况下使用带有graphene-django的子字段中的参数进行分页

如何更改graphene-python(中继)中的连接参数(之后,之前)?

普通数组上的中继突变不起作用

为啥我不能在 C# 中继承一个类? [复制]

如何在graphene-django中使用别名

为啥在 Qt 中继承 QWidget 类时出现内存泄漏