使用 Ariadne GraphQL 和 Django 开发微服务
介绍
大多数现代应用程序都是以解耦的方式开发的。前端和后端是独立的应用程序,通常通过应用程序编程接口 (API) 连接。这使得 API 和 API 开发知识至关重要。
借助强大的 API,后端系统可以为多个前端客户端提供服务。这些客户端可以是 Web 客户端,也可以是移动客户端。
本指南假设您对 API 和 Django Web 框架有基本的了解,并且至少具有中级水平的 Python 和 GraphQL 能力。
有关 Django 的入门指南可在此处找到。
Ariadne GraphQL
Ariadne GraphQL是 Python 版graphql的解释。它由软件公司Mirumee开发。其主要目的是解决石墨烯的缺点。
要安装 Ariadne 和 GraphQL 核心,请在终端上运行以下命令。
pip install ariadne graphql-core
示例应用程序
在本练习中,您将开发一个 Django 应用,用于显示来自默认 Sqlite3 数据库的数据。数据是学校及其人口的列表。
首先,通过运行以下命令启动一个新的 Django 项目。
django-admin startproject school_list
接下来,使用以下命令创建一个应用程序并将其命名为school_stats。
python3 manage.py startapp school_stats
from django.db import models
class School(models.Model):
school_name = models.CharField(max_length=20)
school_population = models.IntegerField(default=100)
added_on = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.school_name
该模型需要数据。要添加数据,您需要访问管理面板。这需要超级用户访问权限。下一步是使用以下命令创建超级用户帐户。
python manage.py createsuperuser
这是一个交互式过程,您将提供必要的详细信息并注册您的用户。要使应用程序和模型可见,需要在 Django 项目和admin.py中注册它们。要注册应用程序以及第三方应用程序 Ariadne,请将其名称添加到settings.py中已安装的应用程序列表中。
将下面的列表复制到您的settings.py并替换现有列表。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'school_stats',
"ariadne.contrib.django",
]
为了确保School模型在管理窗格上可见,请在admin.py文件中注册它。将下面的代码块添加到您的admin.py文件中。
from django.contrib import admin
from .models import School
admin.site.register(School)
GraphQL Schema 和解析器
开发 GraphQL 部分的第一步是开发架构。在您的架构中,您将有一个用于添加学校的变异、一个School输入对象、一个用于查看学校的查询以及一个将作为查询结果返回的School对象。由于架构很简单,您可以创建一个文件内架构。下面的代码块定义了架构并分配了type_defs变量。在school_stats应用程序中,创建一个文件并将其命名为resolver.py。添加以下块。
type_defs= """
type Query{
all_schools: [School]
}
type School {
id: ID
school_name: String!
school_population: Int!
}
type Mutation{
add_school(input: SchoolInput): SchoolResults
}
input SchoolInput {
school_name: String
school_population: Int
}
type SchoolResults {
created: Boolean!
school: School
err: String
}
"""
GraphQL 查询
要设置查询,您需要从模型返回数据。这需要在架构中创建的查询all_schools的查询解析器。在您的resolver.py文件中,添加以下函数。
from ariadne import QueryType, make_executable_schema, MutationType
from .models import School
query = QueryType()
@query.field('all_schools')
def resolve_schools(*_):
return School.objects.all()
GraphQL 变更
与查询类似,为将在数据库中创建记录的变异设置一个解析器。
mutation = MutationType()
@mutation.field('add_school')
def resolve_add_school(_,info, input):
school = School.objects.create(school_name=input['school_name'], school_population=input['school_population'])
return {'created': True, 'school': school, 'err': None}
使架构可执行
要执行该模式并使其可在 GraphQL 游乐场中使用,请添加以下代码行。
schema = make_executable_schema(type_defs, query, mutation)
URL 配置
要配置 URL,请配置主项目的urls.py文件以使用路径函数将任何流量引导至 school_stats 应用程序,如下面的代码块所示。
from django.urls import path, include
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('school_stats.urls')),
]
接下来,创建一个urls.py文件并将 graphQL 视图和模式加载到默认 URL。
from django.urls import path, include
from ariadne.contrib.django.views import GraphQLView
from .resolver import schema
urlpatterns = [
path('graphql/', GraphQLView.as_view(schema=schema), name='graphql'),
path('', GraphQLView.as_view(schema=schema), name='graphql'),
]
运行应用程序
一切设置完成后,最后一步是迁移更改并运行服务器。要进行迁移,请运行以下命令:
python manage.py makemigrations
要将模型更改迁移到默认数据库,请运行以下命令:
python manage.py migrate
要启动服务器并运行应用程序,请运行以下命令:
python manage.py runserver
API 屏幕
样本突变
在 GraphQL 环境中,执行以下变更以创建记录。要创建更多记录,请更改变量。
mutation {
add_school(input: {school_name:"SchoolZ", school_population:330})
{
created
school{
school_name
school_population
}
err
}
}
示例查询
query{
all_schools{
school_name
school_population
}
}
结论
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~