在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):graphql-python/graphql-core开源软件地址(OpenSource Url):https://github.com/graphql-python/graphql-core开源编程语言(OpenSource Language):Python 100.0%开源软件介绍(OpenSource Introduction):GraphQL-core 3GraphQL-core 3 is a Python 3.6+ port of GraphQL.js, the JavaScript reference implementation for GraphQL, a query language for APIs created by Facebook. The current version 3.2.1 of GraphQL-core is up-to-date with GraphQL.js version 16.3.0. An extensive test suite with over 2300 unit tests and 100% coverage comprises a replication of the complete test suite of GraphQL.js, making sure this port is reliable and compatible with GraphQL.js. Note that for various reasons, GraphQL-core does not use SemVer like GraphQL.js. Increases in the major version of GraphQL.js are reflected in the minor version of GraphQL-core instead. This means there can be breaking changes in the API when the minor version changes, and only patch releases are fully backward compatible. Therefore, we recommend something like DocumentationA more detailed documentation for GraphQL-core 3 can be found at graphql-core-3.readthedocs.io. The documentation for GraphQL.js can be found at graphql.org/graphql-js/. The documentation for GraphQL itself can be found at graphql.org. There will be also blog articles with more usage examples. Getting startedA general overview of GraphQL is available in the README for the Specification for GraphQL. That overview describes a simple set of GraphQL examples that exist as tests in this repository. A good way to get started with this repository is to walk through that README and the corresponding tests in parallel. InstallationGraphQL-core 3 can be installed from PyPI using the built-in pip command:
You can also use pipenv for installation in a virtual environment:
UsageGraphQL-core provides two important capabilities: building a type schema and serving queries against that type schema. First, build a GraphQL type schema which maps to your codebase: from graphql import (
GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString)
schema = GraphQLSchema(
query=GraphQLObjectType(
name='RootQueryType',
fields={
'hello': GraphQLField(
GraphQLString,
resolve=lambda obj, info: 'world')
})) This defines a simple schema, with one type and one field, that resolves to a fixed
value. The Note that the signature of the resolver functions is a bit different in GraphQL.js,
where the context is passed separately and arguments are passed as a single object.
Also note that GraphQL fields must be passed as a A more complex example is included in the top-level tests directory. Then, serve the result of a query against that type schema. from graphql import graphql_sync
source = '{ hello }'
print(graphql_sync(schema, source)) This runs a query fetching the one field defined, and then prints the result: ExecutionResult(data={'hello': 'world'}, errors=None) The from graphql import graphql_sync
source = '{ BoyHowdy }'
print(graphql_sync(schema, source)) Because we queried a non-existing field, we will get the following result: ExecutionResult(data=None, errors=[GraphQLError(
"Cannot query field 'BoyHowdy' on type 'RootQueryType'.",
locations=[SourceLocation(line=1, column=3)])]) The import asyncio
from graphql import (
graphql, GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString)
async def resolve_hello(obj, info):
await asyncio.sleep(3)
return 'world'
schema = GraphQLSchema(
query=GraphQLObjectType(
name='RootQueryType',
fields={
'hello': GraphQLField(
GraphQLString,
resolve=resolve_hello)
}))
async def main():
query = '{ hello }'
print('Fetching the result...')
result = await graphql(schema, query)
print(result)
asyncio.run(main()) Goals and restrictionsGraphQL-core tries to reproduce the code of the reference implementation GraphQL.js in Python as closely as possible and to stay up-to-date with the latest development of GraphQL.js. GraphQL-core 3 (formerly known as GraphQL-core-next) has been created as a modern alternative to GraphQL-core 2, a prior work by Syrus Akbary, based on an older version of GraphQL.js and also targeting older Python versions. Some parts of GraphQL-core 3 have been inspired by GraphQL-core 2 or directly taken over with only slight modifications, but most of the code has been re-implemented from scratch, replicating the latest code in GraphQL.js very closely and adding type hints for Python. Design goals for the GraphQL-core 3 library were:
Some restrictions (mostly in line with the design goals):
Integration with other libraries and roadmap
ChangelogChanges are tracked as GitHub releases. Credits and historyThe GraphQL-core 3 library
Please watch the recording of Lee Byron's short keynote on the history of GraphQL at the open source leadership summit 2019 to better understand how and why GraphQL was created at Facebook and then became open sourced and ported to many different programming languages. LicenseGraphQL-core 3 is MIT-licensed, just like GraphQL.js. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论