Comments (4)
@kylewilt just out of curiosity, are you talking about implementing queries like in mongodb or elasticsearch, e.g.
db.inventory.find(
{
type: 'food',
$or: [ { qty: { $gt: 100 } }, { price: { $lt: 9.95 } } ]
}
)
instead of using a SQL-like syntax?
from graphql-spec.
Yes that's the basic idea, of course that's a language specific implementation in your example. Ideally GraphQL would be defined in terms of pure conceptual data structures like maps, arrays/vectors, sets, etc with basic rules/expectations so that any language can fairly easily implement GraphQL using its native data structures rather than the string concatenation/parsing noise.
You can always define a standard textual representation over top of data structures but going the other direction is unpleasant and often harder to do because the grammars can start to deviate from something that is sensibly convertible to standard data structures in a consistent way. I can see a future world of "GraphQL Mappers" that turn your nice friendly language specific data structures that you normally prefer to work with into GraphQL text which is not really the world I'd prefer personally.
Having a non textual interface as the spec will simplify testing scenarios since you don't have to test for structured strings and enable faster throughput since you can pick more terse binary transport protocols or even direct function calls.
from graphql-spec.
We did in fact consider this and decided that the legibility of the query language was one of the critical factors we wanted to include. We were not able to come up with a JSON-specific representation that both covered all the cases and was easy to write and read. If someone wants to produce a library which defines such a thing and converts to and from GraphQL, I think that would be a perfectly good community project, but for now GraphQL will continue to maintain its language.
from graphql-spec.
Another important consideration is that GraphQL is defined to be a common request language regardless of frontend or backend languages involved. Since different languages have different representations of data structures, we still must agree upon a serialization format which can represent these concepts across most environments. JSON is probably the go-to for this sort of thing, but JSON feels pretty limiting for this task.
EDN is an interesting alternative because it is far more flexible than JSON, and datascript is a pretty great example of how EDN can be used to define this kind of macro language / datastructure. Taking a dependency on EDN is probably not the right decision for GraphQL, but we would encourage experimentation with EDN-macro style GraphQL-like systems.
from graphql-spec.
Related Issues (20)
- GraphQL Mutation how to make fields optional to update fields only by selection and generate schema HOT 1
- [RFC] Non-existent request field operator HOT 8
- (Graphql-schema) Cannot query field "closeDiscussion" on type "Mutation" HOT 1
- GraphQL spec is contradictory: can selection sets be empty or not? HOT 1
- Allow to return Input Object types HOT 1
- Formalize Global Object Identification.
- Grammar should have single root node HOT 2
- [Feature request]: Support non-list variables for list arguments HOT 9
- Redundant field aliases identical to field names
- Document Level Directives HOT 7
- Coercing Variable Values when hasValue is not true and defaultValue does NOT exist HOT 7
- Strawman: mention of non-self-describing responses
- why not allow directive on field argument ? HOT 2
- On specifying ordered vs unordered enum definitions HOT 5
- Casting Error in GraphQL C# Library HOT 2
- Is there a reason graphql floats do not support Infinity and NaN? HOT 3
- Composite types is not clearly defined HOT 1
- Unclear spec for array with fragments HOT 1
- What must be the result of executing only one fragment on a list of union or interface type? HOT 3
- Interface conditions fragments may not be used across spreads, discouraging reusability HOT 2
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 graphql-spec.