asyncio+graphql=快速简单的api

aiographql的Python项目详细描述


用法

pip install aiographql

cat <<'END' >serve.py
import asyncio, aiographql, graphene

class User(graphene.ObjectType):
    id = graphene.ID(required=True)
    name = graphene.String()

class Query(graphene.ObjectType):
    me = graphene.Field(User)

    async def resolve_me(self, info):
        await asyncio.sleep(1)  # DB
        return User(id=42, name='John')

schema = graphene.Schema(query=Query, mutation=None)

aiographql.serve(schema, listen=[
    dict(protocol='tcp', port=25100),
    dict(protocol='unix', path='/tmp/worker0'),
])
END

python3 serve.py

curl http://localhost:25100/ --data-binary \
'{"query": "{
    me {
        id
        name
    }
}", "variables": null}'

# OR:
curl --unix-socket /tmp/worker0 http:/ --data-binary ...

# Result:
# 1 second async await for DB and then:
{"data":{"me":{"id":"42","name":"John"}}}

请参阅more examples and tests关于jwt身份验证、并发慢速数据库查询等。

config

import aiographql; help(aiographql.serve)

serve(schema, listen, get_context=None, exception_handler=None, enable_uvloop=True, run=True)
    Configure the stack and start serving requests
  • schemagraphene.Schema-要服务的GraphQL模式

  • listenlist-要侦听连接的一个或多个终结点:

  • get_contextNone[async] callable(loop, context: dict): mixed-从与exception_handler()统一的输入生成类似于图形的上下文身份验证

  • exception_handlerNonecallable(loop, context: dict)-在the docs+

    中定义的默认或自定义异常处理程序
    • ^{tt15}$: ^{tt16}$ or ^{tt9}$ - HTTP headers, if known
    • ^{tt18}$: ^{tt19}$ or ^{tt16}$ or ^{tt9}$ - accumulated HTTP request before content length is known, then accumulated content, then GraphQL request
  • enable_uvloopbool-启用uvloop以获得最佳性能,除非有更好的循环

  • runbool-如果True,则运行循环;False对于测试很好

  • 返回serversServers-await servers.close()以关闭侦听套接字-适合测试

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java对象相等方法?   通过java从Mercury质量中心9读取测试数据   在Java中设置双精度值的小数点后2位   java从一个文件读取,导出到另一个文件   java在不包含JVM的机器上运行桌面应用程序的可能性   java CountDownLatch在尝试等待()时引发异常   java Toast继承主题背景   我的游戏操纵杆的java问题   java BringToFront Force关闭应用程序   spring boot无法通过java cloud sdk调用GCP NLP   多线程Java线程高cpu利用率?   使用TextField<Integer>   java无法连续读取/监视远程文件   java Android使用Mashape获取验证错误   java确保Android Studio构建不依赖于物理设备的缓存版本   java AWS Lambda Cloudwatch规则   java Spring在尝试创建数据源bean或JDBC模板时无法解析占位符   java MergeSort实现提供了StackOverflow