This is an implementation of Facebook's GraphQL in .NET.
This project uses a lexer/parser originally written by Marek Magdziak and released with a MIT license. Thank you Marek!
You can install the latest version via NuGet.
PM> Install-Package GraphQL
http://graphql-dotnet.github.io
https://github.com/graphql-dotnet/examples
Define your schema with a top level query object then execute that query.
A more full-featured example can be found here.
var schema = Schema.For(@"
type Query {
hello: String
}
");
var root = new { Hello = "Hello World!" };
var result = schema.Execute(_ =>
{
_.Query = "{ hello }";
_.Root = root;
});
Console.WriteLine(result);
public class Droid
{
public string Id { get; set; }
public string Name { get; set; }
}
public class Query
{
[GraphQLMetadata("hero")]
public Droid GetHero()
{
return new Droid { Id = "123", Name = "R2-D2" };
}
}
var schema = Schema.For(@"
type Droid {
id: String
name: String
}
type Query {
hero: Droid
}
", _ => {
_.Types.Include<Query>();
});
var result = schema.Execute(_ =>
{
_.Query = "{ hero { id name } }";
});
public class Droid
{
public string Id { get; set; }
public string Name { get; set; }
}
public class Query
{
private List<Droid> _droids = new List<Droid>
{
new Droid { Id = "123", Name = "R2-D2" }
};
[GraphQLMetadata("hero")]
public Droid GetHero(string id)
{
return _droids.FirstOrDefault(x => x.Id == id);
}
}
var schema = Schema.For(@"
type Droid {
id: String
name: String
}
type Query {
hero(id: String): Droid
}
", _ => {
_.Types.Include<Query>();
});
string id = "123";
var result = schema.Execute(_ =>
{
_.Query = $"{{ hero(id: \"{id}\") {{ id name }} }}";
});
- Grammar and AST for the GraphQL language should be compatible with the October 2016 specification.
- Scalars
- Objects
- Lists of objects/interfaces
- Interfaces
- Unions
- Arguments
- Variables
- Fragments
- Directives
- Include
- Skip
- Custom
- Enumerations
- Input Objects
- Mutations
- Subscriptions
- Async execution
- Arguments of correct type
- Default values of correct type
- Fields on correct type
- Fragments on composite types
- Known argument names
- Known directives
- Known fragment names
- Known type names
- Lone anonymous operations
- No fragment cycles
- No undefined variables
- No unused fragments
- No unused variables
- Overlapping fields can be merged (help with this rule)
- Possible fragment spreads
- Provide non-null arguments
- Scalar leafs
- Unique argument names
- Unique directives per location
- Unique fragment names
- Unique input field names
- Unique operation names
- Unique variable names
- Variables are input types
- Variables in allowed position
- __typename
- __type
- name
- kind
- description
- fields
- interfaces
- possibleTypes
- enumValues
- inputFields
- ofType
- __schema
- types
- queryType
- mutationType
- subscriptionType
- directives
yarn run setVersion 0.17.0
git commit/push
download nuget from AppVeyor
upload nuget package to github
publish nuget from MyGet
Publishing documentation requires access to https://github.com/graphql-dotnet/graphql-dotnet.github.io
cd docs
./publish_docs.sh 2.0.0
To run this project on OSX with mono you will need to add some configuration. Make sure mono is installed and add the following to your bash configuration:
export FrameworkPathOverride=/Library/Frameworks/Mono.framework/Versions/4.6.2/lib/mono/4.5/
See the following for more details: