Comments (4)
from ariadne.
We've discussed this yesterday, and new API we would like to have looks like this:
from ariadne import Schema, gql, start_simple_server
type_defs = gql("""
type Query {
people: [Person!]!
}
type Person {
firstName: String
lastName: String
age: Int
fullName: String
}
scalar Datetime
""")
schema = Schema(type_defs)
query_resolvers = schema.type("Query")
@query_resolvers.register("people")
def resolve_people(*_):
return [
{"first_name": "John", "last_name": "Doe", "years": 21},
{"first_name": "Bob", "last_name": "Boberson", "years": 24},
]
people_resolvers = schema.type("People")
people_resolvers.alias("age", "years")
@people_resolvers.register("fullName")
def resolve_person_fullname(person, *_):
return "%s %s" % (person["first_name"], person["last_name"])
start_simple_server(schema)
from ariadne.
We've stepped back from above to keep modularization easy and expectable. Instead we are moving from dict as lowest level of abstraction for mapping resolvers (but that would be easy to add back if we'll decide to do so).
New approach replaces resolver dicts with ResolverMap
objects and moves resolver assignment to those objects:
person = ResolverMap("Person")
person.alias("age", "years")
@person.field("fullName")
def resolve_person_fullname(person, *_):
return "%s %s" % (person["first_name"], person["last_name"])
# Create and run dev server that provides api browser
start_simple_server(type_defs, [query, person]) # Visit http://127.0.0.1:8888 to see API browser!
This has few nice advantages:
- We no longer rely
if isinstance()
checks around code for type-specific handling logic. - We get nice separation and extensitivity via
ResolverMap
and potentiallyScalar
,DateTimeScalar
,Interface
or such.
-It's super easy to include extra type-specific validation logic for catching dev mistakes.
from ariadne.
I've updated original post, in coming days I'll try to find time to get this PR to mergeable state.
from ariadne.
Related Issues (20)
- No way to send custom error from `on_connect` when using GraphQLTransportWSHandler
- execution_context_class argument for graphql_sync raises an error HOT 4
- Subscription Chat Application full example does not return message data HOT 2
- "str" is incompatible with "GraphQLSchema" HOT 2
- Update GraphQL fixing logic
- Python 3.12 has deprecation warnings
- Starlette integration tests are broken
- Re-tag the source HOT 1
- Ariadne `graphql` and `graphql_sync` will attempt to execute `subscription` operations
- Return data and errors from root resolver callable
- Update GraphiQL version HOT 1
- Interface resolver issues with Pydantic schemas HOT 2
- When performing multiple queries, an error stops any other data being returned HOT 1
- set_alias support for nested attributes
- Camel case arguments HOT 2
- Nested subscriptions not supported HOT 2
- Typing error in extract_data_from_request
- make_federated_schema is unable to parse repeatable directives
- convert_names_case inconsistent with numbers. HOT 1
- Async resolvers are not executed in Flask HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ariadne.