一、provice的概述
Provice是一個基於Python的極簡潔GraphQL API框架。 Provice不需要特定的ORM或數據庫集成,藉助乾淨的API分離了查詢邏輯和處理程序的語義。
該框架重在將最重要的基礎構建塊與核心QieryResolver的使用方式結合起來,並採用Python中的一些編程模式,例如:基類和元類,來提供鉤子和擴展,以滿足更高級別的要求。
儘管Provice處理程序在概念上像Django視圖函數,但由於其神經台階查詢語言和 GraphQL 架構,它比Django更適合為大型應用程序設計。
二、安裝和配置Provice
1. 安裝
pip install provice
pip install graphene
pip install sqlalchemy
pip install aiohttp
2. 配置
from sqlalchemy import create_engine
from settings import DATABASE_URL
engine = create_engine(DATABASE_URL, echo=True)
三、Provice API的實現
1. Schema和RootResolver
Provice的一切都是從Schema和Root Resolver開始的。這些類分別表示GraphQL架構的根。Provice僅支持單個查詢類型(QueryResolver)。這意味着,整個API都從這個查詢開始;類似於所有SQL查詢從 根表(root table)開始一樣。為了構建這個查詢,我們需要一個名稱為QueryResolver的Python類。此類不需要定義任何特殊方法。這個類的作用是指定我們GraphQL API中的所有可用查詢(Query)類型。在本程序中,我們定義的QueryResolver是Manga類型。
import graphene
from graphene_sqlalchemy import SQLAlchemyObjectType
from models import Manga as MangaModel
class MangaFields:
title = graphene.String(required=True)
author = graphene.String()
year = graphene.Int()
class Manga(SQLAlchemyObjectType, MangaFields):
id = graphene.Int(source='manga_id')
class Meta:
model = MangaModel
interfaces = (graphene.relay.Node, )
class QueryResolver(graphene.ObjectType):
manga = graphene.Field(lambda: Manga, id=graphene.Int())
def resolve_manga(self, info, id):
query = Manga.get_query(info)
return query.filter_by(manga_id=id).first()
schema = graphene.Schema(query=QueryResolver)
2. 數據模型(Data Model)
由於Provice沒有完全的ORM支持,因此我們需要一個簡單的Manga模型,作為 SQLAlchemy Model ORM 和 Manga GraphQL類型之間互操作的橋樑。讓我們來看一下Manga的模型定義。
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from settings import DATABASE_URL
engine = create_engine(DATABASE_URL, echo=True)
Base = declarative_base()
class Manga(Base):
__tablename__ = 'manga'
manga_id = Column(Integer, primary_key=True)
title = Column(String, nullable=False)
author = Column(String, nullable=False)
year = Column(Integer, nullable=False)
四、Provice API的使用
1. 查詢(Query)
根據id查詢漫畫
query {
manga(id: 1) {
id
title
author
year
}
}
2. 變更(Mutation)
漫畫添加
mutation {
addManga(title: "Naruto", author: "Masashi Kishimoto", year: 1999) {
id
title
author
year
}
}
五、小結
通過以上的介紹,我們對Provice有了更深入的了解。Provice提供了一個基於Python的GraphQL API框架,允許使用者通過自定義Schema和引入適當的解析器對數據庫進行查詢、添加、更新和刪除等操作,從而繞過了ORM的限制和不易調試的限制,充分利用GraphQL強大的靈活性和可視化交互。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/236304.html