FastAPI 使用GraphQL
Facebook在2012年开发了 GraphQL ,这是一个新的API标准,目的是为了优化RESTful API调用。GraphQL是API的数据查询和操作语言。与REST相比,GraphQL更加灵活、高效和准确。GraphQL服务器只提供一个端点,并以客户端所需的精确数据进行响应。
由于GraphQL与ASGI兼容,它可以很容易地与FastAPI应用程序集成。有许多用于GraphQL的Python库。其中一些列在下面 –
- Strawberry
- Ariadne
- Tartiflette
- Graphene
FastAPI的官方文档推荐使用Strawberry库,因为它的设计也是基于类型注释的(就像FastAPI本身的情况一样)。
为了将GraphQL与FastAPI应用程序集成,首先将一个Python类装饰成Strawberry类型。
@strawberry.type
class Book:
title: str
author: str
price: int
接下来,声明一个 Query 类,包含一个返回Book对象的函数。
@strawberry.type
class Query:
@strawberry.field
def book(self) -> Book:
return Book(title="Computer Fundamentals", author="Sinha", price=300)
使用这个查询类作为参数来获得 Strawberry.Schema 对象。
schema = strawberry.Schema(query=Query)
然后声明GraphQL类和FastAPI应用类的对象。
graphql_app = GraphQL(schema)
app = FastAPI()
最后,向FastAPI对象添加路由并运行服务器。
app.add_route("/book", graphql_app)
app.add_websocket_route("/book", graphql_app)
在浏览器中访问http://localhost:8000/book。浏览器中的GraphQL IDE就会打开。
在注释部分下面,使用Graphiql IDE的资源管理器栏输入以下查询。运行该查询,在输出窗格中显示结果。