如何使用 Django 和 Neo4j 数据库创建 GraphQL API?

Posted

技术标签:

【中文标题】如何使用 Django 和 Neo4j 数据库创建 GraphQL API?【英文标题】:How can I create GraphQL API's with Django and Neo4j Database? 【发布时间】:2021-07-28 16:11:36 【问题描述】:

我正在做一个项目,我需要使用 Django Server (Graphene-Django) 和 Neo4J 数据库制作 GraphQL API。我在互联网上看了很多,但我找不到任何有用的资源。如果有人可以给出一个简单的流程示例或建议一些资源,请提供帮助。

【问题讨论】:

嗨 Aanchal,你成功实现了吗?如果是,也请帮助我。我也卡在这里了。 嘿@SumitKumar,我还没有实现它。截至目前,我们决定继续使用 REST API。 【参考方案1】:

我正在运行类似的设置,但是您在这里谈论了很多事情,如果您分解概念可能会更容易理解。

如果您考虑仅在 Python(独立于 Django)中运行 Neo4j,则最容易理解。

Neo4j/Python

    让 Neo4j 运行并能够使用 python 连接到它(我使用 py2neo)。

我从这里开始制作了一个制作 neo4j 烧瓶应用程序的视频演示:https://www.youtube.com/watch?v=h8cyPIEfxQY&t=1215s

代码在这里:https://github.com/elena/graph-fun/blob/master/notebook.ipynb

Django/石墨烯

    让您的 Django 项目运行起来。在 Django 中设置石墨烯(注意,围绕石墨烯/graphQL 是另一回事,但请单独执行此步骤,确保您了解传统的 Django 应用如何连接到石墨烯)。

我们使用 GraphiQL 为 GraphQL 端点提供服务:https://github.com/graphql/graphiql 这通常会让您的生活更轻松。

这些文档:https://www.fullstacklabs.co/blog/django-graphene-rest-graphql

Python/石墨烯/Neo4j

    在您的 Django 项目中为 Neo4j 连接和语句创建一个模块/应用程序。这里需要注意的是:石墨烯不关心数据来自哪里。只需使用普通的 python-graphene 将任何数据发送到 graphene schema.py

这是烧瓶示例代码 (https://github.com/elena/graph-fun/blob/master/app.py),但您可以将 Neo4j 输出提供给您的 GraphQL python 架构。

看,python(不是 Django)Graphene 不在乎数据来自哪里:https://docs.graphene-python.org/en/latest/quickstart/

最后,您可以将其全部封装在您的 django 网址中,以便使用 graphiql 提供服务。

--

因此,您需要 django-graphene 来为您的 schema.py/urls 提供服务,但这会使事情变得过于复杂

然后你需要退后一步,使用朴素的 python-graphene 来服务 Neo4j。

至少这对我有用。

【讨论】:

@Catalin 的建议版本也是一个好主意,在某种意义上更简单,但增加了前端连接数,这通常很好。此版本用于无缝单源集成,并允许您对所服务的数据进行更大的处理控制(您可能想要也可能不想要)。哪种方式效果最好取决于您的堆栈架构和组织需求。【参考方案2】:

我使用了所有 3 个堆栈:

Graphene-Django 与 Postgresql DB Django 与 Neo4j 和 Postgresql Neo4j

我可以告诉你,实际上你可以选择其中一个。

Neo4j它自己的网络界面它自己的 GraphQL API 内置:

http://yourhost:7474/browser/ http://yourhost:7474/api/

要让 DjangoNeo4j 一起工作,您可以使用 neomodel 甚至更好的 django 版本:django-neomodel 即在后台使用 neomodel .

我实际上有一个单独的设置,我使用 Django REST Framework 以及我存储在 Neo4j 中的所有内容,我将它暴露在 REST 端点而不是 GraphQL 中。

所以我想说您可以使用 django-neomodel 来管理/处理您的数据,您可以简单地决定是否要:

使用 Graphene-Django 公开 Neo4j 包含的所有数据 使用 Neo4j GraphQL API

但有一件事...我仍然建议您使用官方支持的 DEFAULT_DATABASE 之一来处理与用户相关的数据和身份验证。

作为个人评论:Neo4j 是一项伟大的技术,但在交易速度方面并不是最快的(Postgres 或其他关系数据库大放异彩)。

毕竟它是一种在 Java 上运行的技术,而不是像大多数其他数据库那样在 C++ 上运行的技术......所以请记住这一点。

祝你好运。

【讨论】:

以上是关于如何使用 Django 和 Neo4j 数据库创建 GraphQL API?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Neo4j 中删除/创建数据库?

使用 neo4j 在 python 中开发 Web 应用程序

Neo4J与NeoModel:如何加速图形创建?

知识图谱现学现用(Django 2.2 + Neo4j 3.5)

知识图谱现学现用(Django 2.2 + Neo4j 3.5)

如何可视化从嵌入式 Neo4j Java 应用程序创建的 Neo4j 图形数据库