定义GraphQL模式的简单方法

gqltype的Python项目详细描述


说明

目前正在试验中。在

gqltype是来自python类型注释的GraphQL模式生成器。在

特点

  • 通过python类型注释简单定义GraphQL模式
  • 基于graphql-core>=3.0库生成架构
  • asgi友好型

安装

使用pip

$ pip install gqltype

使用poetry

^{pr2}$

快速介绍

假设我们要对https://graphql.org/learn/schema/教程开头提到的模式进行建模。在

fromdataclassesimportdataclassfromenumimportEnumfromtypingimportListimportgqltypeclassEpisode(Enum):"""Codename for the episodes"""NEWHOPE="new hope"EMPIRE="empire"JEDI="jedi"@dataclassclassCharacter:"""An individual person within the Star Wars universe"""name:strappears_in:List[Episode]classLengthUnit(Enum):"""Measure of length"""METER="meter"INCH="inch"@dataclassclassStarship:"""A single transport craft that has hyperdrive capability"""id:strname:strlength:floatdefresolve_length(self,unit:LengthUnit=LengthUnit.METER)->float:ifunit==LengthUnit.INCH:returnself.length/0.0254returnself.lengthdefget_character()->Character:returnCharacter(name="R2D2",appears_in=[Episode.JEDI,Episode.NEWHOPE])asyncdefget_starship()->Starship:returnStarship(id="F1000",name="Millennium Falcon",length=34.75)defadd_character(name:str,appears_in:List[Episode])->Character:returnCharacter(name=name,appears_in=appears_in)schema=gqltype.Schema(queries=[get_character,get_starship],mutations=[add_character])fromgraphql.utilitiesimportprint_schemaprint(print_schema(schema.build()))

它将产生以下输出

type Query {
  getCharacter: Character!
  getStarship: Starship!
}

"""An individual person within the Star Wars universe"""
type Character {
  appearsIn: [Episode!]!
  name: String!
}

"""Codename for the episodes"""
enum Episode {
  NEWHOPE
  EMPIRE
  JEDI
}

"""A single transport craft that has hyperdrive capability"""
type Starship {
  length(unit: LengthUnit! = METER): Float!
  id: ID!
  name: String!
}

"""Measure of length"""
enum LengthUnit {
  METER
  INCH
}

type Mutation {
  addCharacter(name: String!, appearsIn: [Episode!]!): Character!
}

为了用这个模式运行服务器,我们可以使用Starlette

if__name__=="__main__":importuvicornfromgqltype.contrib.starletteimportGraphQLAppfromstarlette.applicationsimportStarlettefromstarlette.routingimportRouteapp=Starlette(routes=[Route("/graphql",GraphQLApp(schema=schema))])uvicorn.run(app)

执行

{
  getCharacter {
    name
    appearsIn
  }

  getStarship {
    id
    name
    length(unit: INCH)
  }
}

给予

{"data":{"getCharacter":{"name":"R2D2","appearsIn":["JEDI","NEWHOPE"]},"getStarship":{"id":"F1000","name":"Millennium Falcon","length":1368.1102362204724}}}

托多

  • 健全性检查

    • 如果类和解析方法指定了不同的类型,则发出警告
  • 某些类型的通用解析器?在

  • gqltype.F?--字段定义

  • 核心部分和高级部分

  • 业务层面

    • 输入值验证
    • 输出值的序列化

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

推荐PyPI第三方库


热门话题
iOS MDM注册配置文件请求/Profile使用java对证书进行签名   java如何调试GWT项目中的PHP文件   Mac和Windows之间的Java文件getFreeSpace差异   java从ArrayList进入JComboBox   ApacheKafka如何执行zookeeperserverstart。我的java程序中的bat文件?   JAXRS应用程序的java初始化   java如何为double覆盖compareTo方法?   使用进程动态运行java代码   sockets java。网SocketException:权限被拒绝openshift   java PorterduffXfermode:清除位图的一部分   其他线程中变量的java更改侦听器   java如何初始化接口实例以与父片段中的子片段通信   java Cordova插件在构建时出错,源代码1.6中不支持菱形运算符使用源代码7   java是学习编程的教育游戏吗?   在不同机器上使用JasperReports API运行代码时出现java问题   java Spring引导延迟Flyway序列化循环依赖   未为加密/解密初始化java密码