Python 中的 GraphQL 入门
现代框架来来去去,有些甚至成为了新的标准。随着React等现代 JavaScript 库的兴起,像 GraphQL API 这样的数据获取新方法也越来越流行。虽然Node.js仍然是基于GraphQL的后端最流行的技术,但还有很多其他选择。
如果您首选 Python,那么您一定非常乐意听到 Django 对GraphQL提供良好的支持。更具体地说, Graphene是一款旨在通过提供用于构建 GraphQL API 的库来简化开发人员工作的产品。在继续之前,让我们先来回顾一下这一切是如何开始的。
需要采取新方法
2010年代初,IT行业面临着新的挑战。移动端使用量的大幅增长,暴露出许多大型社交服务架构的弱点,这些服务的数据结构通常采用图的形式。移动端使用量的大幅增长导致许多性能问题,尤其是在低性能设备和网络不稳定的情况下。开发团队发现,REST 并非解决此类问题的最佳方案。
“适应或死亡”
Facebook 认为这是移动应用性能的关键部分,于是开始研究一种解决方案来满足其新闻推送的数据管理需求,该解决方案后来以 GraphQL 的名称开源。与此同时,其他几家公司也发现了其数据获取模型中存在同样的问题。许多公司在 GraphQL 公开发布后放弃了自己的项目,并决定采用这项伟大的技术。与其他公司不同,Netflix 继续开发自己的 REST 替代方案Falcor,并决定将其开源。
什么是 GraphQL
GraphQL 是一种 API 查询语言。它之所以越来越受欢迎,是因为与 REST 不同,它提供了更智能、更灵活的数据获取方式。
让我们看一个简单的 GraphQL 查询:
query {
user {
name
}
}
以及服务器返回的响应:
{
"user": {
"name": "Tomek Poniatowicz",
}
}
现在想象一下,您正在获取 Facebook 动态的数据,其中包含一个用户、该用户好友的帖子、其他用户对这些帖子的评论等等。需要请求的数据量很大,这可能会导致 REST 中的数据获取过度/不足问题。由于 GraphQL 赋予客户端获取所需数据的能力,因此不会降低速度。在查询中添加新字段也非常简单。
Graphene 的 Django 集成
我们需要安装graphene-django
库并将其包含在我们的settings.py
文件中
pip install "graphene-django>=2.0"
并在 Django 应用中设置 GraphQL 端点
现在让我们在app/models.py
文件中准备一个简单的 Django 数据模型
并在其中定义我们的模式app/schema.py
:
一切就绪。现在您可以查询您的简单架构:
使用 GraphQL 的主要好处
GraphQL 备受关注, GraphQL 与 REST的争论也层出不穷。
使用 GraphQL 的主要优势在于,它在数据获取方面比 REST 更具弹性,从而减少了与服务器的往返次数。GraphQL 消除了数据获取不足和过度的问题。
由于 GraphQL 尚处于早期应用阶段,它还存在一些不足之处(例如缓存),但它的发展势头强劲,正在成为一股不容小觑的力量。