有很多GUI客户端,如GraphQL Playground,GraphiQl等。可以从URL中获取GraphQL schema。如何使用Python获取schema?
bsxbgnwa1#
从spec:GraphQL服务器支持对其模式的内省。这个模式是使用GraphQL本身查询的,为工具构建创建了一个强大的平台。模式自省系统可以从Meta字段__schema和__type访问,这两个字段可以从查询操作的根的类型访问。像GraphQL Playground和GraphiQL这样的工具利用内省来获取有关模式的信息。您不需要任何额外的工具或库来进行内省查询-因为它只是一个GraphQL查询,您将以向端点发出任何其他请求的方式发出请求(例如使用requests)。下面是来自graphql-core的一个完整的内省查询:
requests
graphql-core
introspection_query = """ query IntrospectionQuery { __schema { queryType { name } mutationType { name } subscriptionType { name } types { ...FullType } directives { name description locations args { ...InputValue } } } } fragment FullType on __Type { kind name description fields(includeDeprecated: true) { name description args { ...InputValue } type { ...TypeRef } isDeprecated deprecationReason } inputFields { ...InputValue } interfaces { ...TypeRef } enumValues(includeDeprecated: true) { name description isDeprecated deprecationReason } possibleTypes { ...TypeRef } } fragment InputValue on __InputValue { name description type { ...TypeRef } defaultValue } fragment TypeRef on __Type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } } """
kmpatx3s2#
graphql-core有一些实用程序可以获取查询并转换查询结果。下面是一个在sdl中打印结果模式的示例代码片段:
from graphqlclient import GraphQLClient from pprint import PrettyPrinter from graphql import get_introspection_query, build_client_schema, print_schema def main(): pp = PrettyPrinter(indent=4) client = GraphQLClient('http://swapi.graph.cool/') query_intros = get_introspection_query(descriptions=True) intros_result = client.execute(query_intros, variables=None, operationName=None) client_schema = build_client_schema(intros_result.get('data', None)) sdl = print_schema(client_schema) print(sdl) pp.pprint(sdl)
我一直在寻找同样的东西,最后找到了上面的东西。
c0vxltue3#
这将创建一个包含您的schema的json文件。
import json introspection_dict = your_schema_object.introspect() # Or save the schema into some file with open("schema.json", "w") as fp: json.dump(introspection_dict, fp)
1u4esq0p4#
你可以使用sqglc library,内省模块。
1.创建json模式文件:
python3 -m sgqlc.introspection --exclude-deprecated --include-description ****-H "Authorization: Bearer {TOKEN}" http://yourgrapqlservice.com schema.json
--exclude-deprecated如果给定,将排除已弃用的字段和枚举值。默认值:False--exclude-description如果给出,将排除描述(文档)。
2.如果需要,将schema转换为.py格式:
sgqlc-codegen schema schema1.json schema.py
pu3pd22g5#
我遇到了同样的问题,直到我在python graphql repo中找到了答案,你可以使用这个代码片段示例来获取模式并将其保存在.json文件中
async def get_graphql_schema(endpoint, api_key): headers = {"X-API-KEY": api_key} transport = AIOHTTPTransport(url=endpoint, headers=headers) async with Client(transport=transport, fetch_schema_from_transport=True) as session: query_intros = get_introspection_query(descriptions=True) query = gql(query_intros) intros_result = await session.execute(query) schema = build_client_schema(intros_result) return schema def save_schema_to_json(schema): schema_dict = introspection_from_schema(schema) output_file = 'schema.json' with open(output_file, 'w') as json_file: dump(schema_dict, json_file, indent=2) schema = asyncio.run(get_graphql_schema(env_dev['url'], env_dev['key'])) save_schema_to_json(schema)
你要找的是introspection_from_schema(),我在源代码中引用了它的文档:从GraphQLSchema构建IntrospectionQueryIntrospectionQuery对于关心类型和字段关系但不需要遍历这些关系的实用程序很有用。这与build_client_schema相反。主要用例在服务器上下文之外,例如在进行模式比较时。
introspection_from_schema()
5条答案
按热度按时间bsxbgnwa1#
从spec:
GraphQL服务器支持对其模式的内省。这个模式是使用GraphQL本身查询的,为工具构建创建了一个强大的平台。模式自省系统可以从Meta字段__schema和__type访问,这两个字段可以从查询操作的根的类型访问。
像GraphQL Playground和GraphiQL这样的工具利用内省来获取有关模式的信息。您不需要任何额外的工具或库来进行内省查询-因为它只是一个GraphQL查询,您将以向端点发出任何其他请求的方式发出请求(例如使用
requests
)。下面是来自
graphql-core
的一个完整的内省查询:kmpatx3s2#
graphql-core
有一些实用程序可以获取查询并转换查询结果。下面是一个在sdl中打印结果模式的示例代码片段:我一直在寻找同样的东西,最后找到了上面的东西。
c0vxltue3#
这将创建一个包含您的schema的json文件。
1u4esq0p4#
你可以使用sqglc library,内省模块。
1.创建json模式文件:
--exclude-deprecated如果给定,将排除已弃用的字段和枚举值。
默认值:False
--exclude-description如果给出,将排除描述(文档)。
2.如果需要,将schema转换为.py格式:
pu3pd22g5#
我遇到了同样的问题,直到我在python graphql repo中找到了答案,你可以使用这个代码片段示例来获取模式并将其保存在.json文件中
你要找的是
introspection_from_schema()
,我在源代码中引用了它的文档:从GraphQLSchema构建IntrospectionQuery
IntrospectionQuery对于关心类型和字段关系但不需要遍历这些关系的实用程序很有用。
这与build_client_schema相反。主要用例在服务器上下文之外,例如在进行模式比较时。