如何使用 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/要让 Django 与 Neo4j 一起工作,您可以使用 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 在 python 中开发 Web 应用程序
知识图谱现学现用(Django 2.2 + Neo4j 3.5)