From ba0c613e0edd3ab18bab0d6595a789f94e133da1 Mon Sep 17 00:00:00 2001 From: Kevin Carroll Date: Fri, 6 Jan 2023 19:10:55 -0700 Subject: [PATCH 1/5] WIP, mostly verbiage and rewording of sections. --- docs/advanced/directives.md | 2 +- docs/advanced/subscriptions.md | 7 +- docs/controllers/field-paths.md | 18 +-- docs/quick/overview.md | 8 +- docs/reference/attributes.md | 2 +- docs/types/enums.md | 35 +++++- docs/types/interfaces.md | 212 ++++++++++++++++++++++++-------- docs/types/objects.md | 110 ++++++++++++++--- docs/types/scalars.md | 26 +++- docusaurus.config.js | 2 +- 10 files changed, 331 insertions(+), 91 deletions(-) diff --git a/docs/advanced/directives.md b/docs/advanced/directives.md index 643f3e2..44c9924 100644 --- a/docs/advanced/directives.md +++ b/docs/advanced/directives.md @@ -175,7 +175,7 @@ public class ToUpperDirective : GraphDirective [DirectiveLocations(DirectiveLocation.FIELD)] public IGraphActionResult UpdateResolver() { - if (this.DirectiveTarget as IFieldDocumentPart fieldPart) + if (this.DirectiveTarget is IFieldDocumentPart fieldPart) { // if (fieldPart.Field?.ObjectType != typeof(string)) diff --git a/docs/advanced/subscriptions.md b/docs/advanced/subscriptions.md index dcfc7c9..c5f9156 100644 --- a/docs/advanced/subscriptions.md +++ b/docs/advanced/subscriptions.md @@ -15,10 +15,10 @@ The first step to using subscriptions is to install the subscription server pack ```powershell title="Install The Library" # Using the dotnet CLI -> dotnet add package GraphQL.AspNet.Subscriptions --prerelease +> dotnet add package GraphQL.AspNet.Subscriptions # using Package Manager Console -> Install-Package GraphQL.AspNet.Subscriptions -IncludePrerelease +> Install-Package GraphQL.AspNet.Subscriptions ``` This adds the necessary components to create a subscription server for a given schema such as communicating with web sockets, parsing subscription queries and responding to events. @@ -60,7 +60,8 @@ public class SubscriptionController : GraphController // highlight-next-line [SubscriptionRoot("onWidgetChanged", typeof(Widget), EventName = "WIDGET_CHANGED")] - public IGraphActionResult OnWidgetChanged(Widget eventData, string filter){ + public IGraphActionResult OnWidgetChanged(Widget eventData, string filter) + { if(eventData.Name.StartsWith(filter)) { // send the data down to the listening client diff --git a/docs/controllers/field-paths.md b/docs/controllers/field-paths.md index ff5b090..2c174e2 100644 --- a/docs/controllers/field-paths.md +++ b/docs/controllers/field-paths.md @@ -58,7 +58,7 @@ public class GroceryStoreController : GraphController Internally, for each encountered path segment (e.g. `bakery`, `meats`), GraphQL generates a virutal, intermediate graph type to fulfill resolver requests for you and acts as a pass through to your real code. It does this in concert with your real code and performs a lot of checks at start up to ensure that the combination of your real types as well as virutal types can be put together to form a functional graph. If a collision occurs the server will fail to start. :::info Intermediate Type Names -You may notice some object types in your schema named as `Query_Bakery`, `Query_Deli` these are the virtual types generated at runtime to create a valid schema from your path segments. +You may notice some object types in your schema named as `Query_Bakery`, `Mutation_Deli`. These are the virtual types generated at runtime to create a valid schema from your path segments. ::: ## Declaring Field Paths @@ -166,7 +166,7 @@ public class BakeryController : GraphController } ``` -From a GraphQL perspective this equivilant to trying to define a `bakery` type with two fields named `orderDonuts`. Since both methods map to a field path of `[mutation]/bakery/orderDonuts` this would cause a `GraphTypeDeclarationException` to be thrown when your application starts. +From a GraphQL perspective this equivilant to trying to define a `Bakery` type with two fields named `orderDonuts`. Since both methods map to a field path this would cause a `GraphTypeDeclarationException` to be thrown when your application starts. With Web API, the ASP.NET runtime could inspect any combinations of parameters passed on the query string or the POST body to work out which overload to call. You might be thinking, why can't GraphQL inspect the passed input arguments and make the same determination? @@ -212,7 +212,7 @@ But this can feel a bit awkward in some situations so instead... ### Change The Hierarchy -Another alternative is to change where in the object graph the field sits. Here we've moved one field to the root mutation type and left the other under the controller's own `bakery` field. This can be a good strategy if you have one primary way of interacting with your data and a few auxillary methods such as a quick dozen donuts at the drive thru window or going into the shop and selecting which ones you want. +Another alternative is to change where in the object graph the field sits. Here we've moved one field to the root mutation type and left the other under the controller's own virtual `Bakery` type. This can be a good strategy if you have one primary way of interacting with your data and a few auxillary methods such as a quick dozen donuts at the drive thru window or going into the shop and selecting which ones you want. ```csharp title="Change the Field Path" @@ -306,21 +306,21 @@ These are some valid field paths: ```csharp title="Valid Field Fragments" [Mutation("store/bakery/deliCounter/sandwiches/order")] -[Mutation("path1/path2/path3/path4/")] +[Query("path1/path2/path3/path4/")] [Mutation("path1/path1/path1/path1/path1/path1/path1/path1/path1")] ``` But if even one segment of the path is invalid GraphQL will reject it completely. ```csharp title="Invalid Field Fragments" -[Query("store/__bakery")] // can't start with "__" -[Query("store/βakery")] // unicode characters are not allowed -[Query("path1/path2/path 33")] // spaces are not allowed +[Query("store/__bakery")] // can't start with "__" +[Query("store/βakery")] // unicode characters are not allowed +[Query("path1/path2/path 33")] // spaces are not allowed ``` -### Schema Naming Formats +### Field Naming Formats -At runtime, when your schema is generated, the naming requirements it defines will be enforced for each path segment. By default this means `camelCasing` on field names. +At runtime, when your schema is generated, the naming requirements it defines for fields will be enforced for each path segment individually. By default, this means `camelCasing`: If you declare: diff --git a/docs/quick/overview.md b/docs/quick/overview.md index 5b00645..2f74708 100644 --- a/docs/quick/overview.md +++ b/docs/quick/overview.md @@ -9,10 +9,10 @@ description: A quick overview of how to use the library ```powershell title="Install The Library" # Using the dotnet CLI -> dotnet add package GraphQL.AspNet --prerelease +> dotnet add package GraphQL.AspNet -# using Package Manager Console -> Install-Package GraphQL.AspNet -IncludePrerelease +# Using Package Manager Console +> Install-Package GraphQL.AspNet ``` ## Documentation @@ -45,7 +45,7 @@ This documentation should can be used as a reference for various aspects of the ```powershell # Powershell terminal, Package Manager in Visual Studio, Developer Command Prompt etc. -> dotnet add package GraphQL.AspNet --prerelease +> dotnet add package GraphQL.AspNet ``` ### Create a Controller diff --git a/docs/reference/attributes.md b/docs/reference/attributes.md index 842b171..d7013b1 100644 --- a/docs/reference/attributes.md +++ b/docs/reference/attributes.md @@ -343,7 +343,7 @@ public class Donut ``` ```graphql title="GraphQL Type Definition" -# +# Recipe is not included in the schema type Donut { Id: String Name: String diff --git a/docs/types/enums.md b/docs/types/enums.md index ede543f..878b113 100644 --- a/docs/types/enums.md +++ b/docs/types/enums.md @@ -44,6 +44,7 @@ public enum DonutType Custard, Jelly, SugarCoated, + // highlight-next-line Filled = Custard | Jelly } ``` @@ -55,6 +56,7 @@ enum DonutType { CUSTARD JELLY SUGARCOATED + // highlight-next-line FILLED } ``` @@ -72,12 +74,14 @@ public enum DonutType Custard, Jelly, + // highlight-next-line [GraphSkip] SugarCoated, } ``` ```graphql title="DonutType Type Definition" +# Sugar Coated is not part of the enum type enum DonutType { GLAZED CAKE @@ -86,12 +90,17 @@ enum DonutType { } ``` +:::caution +An excluded enum value is not just hidden, its NOT part of the schema. Any attempt to use it as a value in a query will result in a validation error. +::: + ## Custom Type Name -Like with other graph types use the `[GraphType]` attribute to indicate a custom name for the enumeration in the object graph. +Like with other graph types use the `[GraphType]` attribute to indicate a custom name for the enumeration in the graph. ```csharp title="DonutType.cs" +// highlight-next-line [GraphType("Donut_Type")] public enum DonutType { @@ -104,6 +113,7 @@ public enum DonutType ``` ```graphql title="DonutType Type Definition" +// highlight-next-line enum Donut_Type { GLAZED CAKE @@ -115,7 +125,7 @@ enum Donut_Type { ## Custom Value Names -Use `[GraphEnumValue]` to declare a custom name for the enum value and GraphQL will automatically handle the name translation when parsing a query document. A target schema's naming format rules will be applied and enforced on the name provided. +Use `[GraphEnumValue]` to declare a custom name for the enum value and GraphQL will automatically handle the name translation when parsing a query document. A target schema's naming format rules will be applied and enforced on the value provided. ```csharp title="DonutType.cs" public enum DonutType @@ -140,3 +150,24 @@ enum DonutType { SUGAR_COATED } ``` + +## Value Name Formatting + +By default, enum values are rendered in all CAPITAL LETTERS. This is the standard convention for GraphQL. If, however; you'd prefer something different you can override the defaults by creating a new `GraphNameFormatter` on your [schema configuration](../reference/schema-configuration.md#graphnamingformatter). + +```csharp title="Startup Code" +services.AddGraphQL(o => { + var customFormatter = = new GraphNameFormatter(enumValueStrategy: GraphNameFormatStrategy.ProperCase); + o.DeclarationOptions.GraphNamingFormatter = customFormatter; +}) +``` + +```graphql title="Sample Formatting" +enum DonutType { + Glazed + Cake + Custard + Jelly +} +``` +> If you need something even more exotic, inherit from `GraphNameFormatter` and override the various methods as you see fit. diff --git a/docs/types/interfaces.md b/docs/types/interfaces.md index da4af12..5978c46 100644 --- a/docs/types/interfaces.md +++ b/docs/types/interfaces.md @@ -5,9 +5,9 @@ sidebar_label: Interfaces sidebar_position: 2 --- -Interfaces in GraphQL work like interfaces in C#. They provide a contract for a set of common fields amongst different objects. When it comes to declaring them, the `INTERFACE` graph type works exactly like [object types](./objects). +Interfaces in GraphQL work like interfaces in C#, for the most part. They provide a contract for a set of common fields amongst different objects. When it comes to declaring them, the `INTERFACE` graph type works exactly like [object types](./objects). -By default, when creating an interface graph type GraphQL: +By default, when creating an interface graph type, the library: - Will name the interface the same as its C# type name. - Will include all properties that have a getter. @@ -27,12 +27,13 @@ interface IPastry { name: String } ``` +> You can override the default settings in your [schema configuration](../reference/schema-configuration.md#fielddeclarationrequirements) or by use of the [GraphType](../reference/attributes.md#graphtype) and [GraphField](../reference/attributes.md#graphfield) attributes. -## Object Graph Types Must be Known +## Inheritance and Implmentations The section on working with interfaces with [action methods](../controllers/actions#working-with-interfaces) provides a great discussion on proper usage but its worth pointing out here as well. -You must let GraphQL know of the possible object types you intend to return as the interface. If your action method returns `IPastry` and you return a `Donut`, but didn't let GraphQL know about the `Donut` class, it won't be able to continue to resolve the requested fields. +You must let GraphQL know of the possible object types which implement your interface. If your action method returns `IPastry` and you return a `Donut`, but didn't let GraphQL know about the `Donut` class, it won't be able to continue to resolve the requested fields as it won't know which resolvers to call. This is especially true if you use type restricted fragments or spreads. ```csharp title="BakeryController.cs" public class BakeryController : GraphController @@ -61,9 +62,11 @@ query { } ``` -## Use It To Include It +### Use it to Include it -When GraphQL starts building a schema it will read the interfaces attached to any model classes it finds and stage them in a special holding area. However, unless an interface is actually referenced as a return value of a field, be it from an action method or a model property, it won't be added to your schema and won't be visible to introspection queries. That is to say that when you register `Donut`, unless you specifically return `IPastry` from your application, GraphQL will leave it out of the schema. This goes a long ways in preventing clutter in your schema with all the interfaces you may declare internally. +Unless an interface is actually referenced as a return value of a field, be it from an action method or a model property, it won't be added to your schema and won't be visible to introspection queries. + +That is to say that when you register `Donut`, unless you specifically return `IPastry` from your application, GraphQL will leave it out of the schema. This goes a long ways in preventing security vulnerabilities and reducing clutter in your schema with all the interfaces you may declare internally. For instance, while common in .NET, its doubtful that you ever want to expose `IEnumerable` to your graph. ```csharp title="IPastry is never used" public class BakeryController : GraphController @@ -77,7 +80,7 @@ public class Donut : IPastry {/*...*/} // IPastry will be excluded from the schema since -// its not referenced in any controllers +// its not referenced in any controllers or other object properties. public interface IPastry {/*...*/} ``` @@ -93,14 +96,84 @@ type Donut { } ``` - :::tip - Use `.AddGraphType()` during [schema configuration](../reference/schema-configuration) to publish the interface even if its never used in the graph. + Use `schemaOptions.AddGraphType()` during [schema configuration](../reference/schema-configuration) at startup to force GraphQL to publish the interface, even if its never used in the graph. This is true for any graph type. +::: + +### Implmenting Other Interfaces + +Interfaces implementing other interfaces worksa bit differently than it does in .NET. Take for example, these two interfaces: + +```csharp title="C# Interface Inheritance" +public interface IPastry +{ + int Id { get; set; } + string Name { get; set; } +} + +public interface IDonut : IPastry +{ + string Flavor{ get; set; } +} +``` + +In .NET `IDonut`, by virtue of implementing `IPastry`, grants "access" to the `Id` and `Name` fields for any object that implements IDonut since said object must implement both interfaces to compile correctly. However, this is not the case with interfaces in your graphql schema. As said above, since interfaces are not automatically parsed the fields they define are also not automatically included in child interfaces. + +```csharp title="Startup Code" +services.AddGraphQL(o => +{ + // only include IDonut in the schema + // highlight-next-line + o.AddGraphType(); +}); +``` + +```graphql title="IDonut Type Definition" +# IDonut DOES NOT contain name or id +# because IPastry is not part of the schema +interface IDonut { + flavor: String +} +``` + +However, GraphQL does support interface inheritance. As long as both interfaces are included as part of the schema then the fields will wire up as you'd expect. + + +```csharp title="Startup Code" +services.AddGraphQL(o => +{ + // Include both interfaces + // highlight-start + o.AddGraphType(); + o.AddGraphType(); + // highlight-end +}); +``` + + +```graphql title="Type Definitions" +interface IPastry { + id: Int! + name: String +} + +# IDonut DOES contain all the expected fields +# Since IPastry is included +// highlight-next-line +interface IDonut implements IPastry { + id: Int! + name: String + flavor: String +} +``` + +:::info +GraphQL will NOT attempt to include inherited fields unless the interface they are declared on is part the schema. ::: ## Interfaces are not Input Objects -The GraphQL specification states that "interfaces are never valid inputs" [Spec § [3.7](https://graphql.github.io/graphql-spec/October2021/#sec-Interfaces)]. As a result the runtime will reject any attempts to use an interface as an action method parameter. +The GraphQL specification states that "interfaces are never valid inputs" [[Spec § 3.7](https://graphql.github.io/graphql-spec/October2021/#sec-Interfaces)]. The runtime will reject any attempts to use an interface as a parameter to a method (i.e. a field argument) that is exposed on the graph. ```csharp title="Interfaces cannot be used as input arguments" public class BakeryController : GraphController @@ -112,13 +185,8 @@ public class BakeryController : GraphController public Donut AddNewDonut(IPastry newPastry) {/* ... */} } - -public class Donut : IPastry -{/*...*/} ``` -An exception to this is with [type extensions](../controllers/type-extensions). A type extension is supplied the object reference returned from the parent-field to assist in child-field resolution and this can be an interface reference, specifically the interface returned by the parent field. Since this method parameter is not exposed on the object graph there is no violation of the specification. - ## Interface Names Like with other graph types use the `[GraphType]` attribute to indicate a custom name for the interface in the object graph. @@ -141,72 +209,112 @@ interface Pastry { } ``` -## Inheritance -Interface inheritance in GraphQL works differently than it does in .NET. Take for example, these two interfaces: +## Methods as Fields +By default, interface methods are excluded from being fields on the graph but can be added by tagging the method with `[GraphField]`. -```csharp title="C# Interface Inheritance" + +```csharp title="Including a POCO method as a field" public interface IPastry { + // highlight-next-line + [GraphField("salesTax")] + decimal CalculateSalesTax(decimal taxPercentage); + int Id { get; set; } string Name { get; set; } + decimal Price { get; set; } } +``` -public interface IDonut : IPastry -{ - string Flavor{ get; set; } +```graphql title="IPastry Type Definition" +inteface IPastry { + // highlight-next-line + salesTax (taxPercentage: Decimal!): Decimal! + id: Int! + name: String + price: Decimal! } ``` +Just as with [controller actions](../controllers/actions), GraphQL will analyze the signature of the method to determine its return type, expression requirements and input arguments. -In .NET `IDonut`, by virtue of implementing `IPastry`, grants "access" to the `Id` and `Name` fields for any object that implements IDonut since said object must implement both interfaces to compile correctly. This is not the case in GraphQL. The library does not attempt to walk or parse any interfaces that are not part of the schema and an interface is added to the schema only if its expliclty added at startup or indicated as a return type from one of your controller methods or object fields. This allows you to safely manage your internal interfaces like `IList` without worry that GraphQL will see them and try parse them. +> Methods on interfaces lack many of the features of controllers such as being able to perform [model state](../controllers/model-state) validation or provide access to `this.User` and `this.Request`. -This can create some less than ideal scenarios. For instance, if only `IDonut` is part of the schema, the fields for `Id` and `Name` won't be seen nor made available in the graph, even though its understandable that you'd want them to be. +## Excluding Fields +To exclude a single property that you don't want to expose to GraphQL add the `[GraphSkip]` attribute to it: -```csharp title="Startup Code" -services.AddGraphQL(o => +```csharp title="Excluding a property" +public interface IPastry { - // highlight-next-line - o.AddGraphType(); -}); + int Id { get; set; } + string Name { get; set; } + + // highlight-next-line + [GraphSkip] + decimal Price { get; set; } +} ``` -```graphql title="IDonut Type Definition" -# IDonut does NOT contain name or id -# because IPastry is not part of the schema -interface IDonut { - flavor: String +```graphql title="IPastry Type Definition" +interface IPastry { + id: Int! + name: String + # price is not included } ``` +Or force GraphQL to skip all fields except those you explicitly define with a `[GraphField]` attribute: -However GraphQL does support interface inheritance. As long as both interfaces are included as part of the schema then the fields will wire up as you'd expect. +```csharp title="Require explicit declarations for this type" +// highlight-next-line +[GraphType(FieldDeclarationRequirements = TemplateDeclarationRequirements.RequireAll)] +public interface IPastry +{ + [GraphField] + int Id { get; set; } + [GraphField] + string Name { get; set; } -```csharp title="Startup Code" -services.AddGraphQL(o => -{ - // highlight-start - o.AddGraphType(); - o.AddGraphType(); - // highlight-end -}); + decimal Price { get; set; } +} ``` - -```graphql title="Type Definitions" -interface IPastry { +```graphql title="IPastry Type Definition" +# only id and name are included +interface IPastry { id: Int! name: String } +``` -interface IDonut implements IPastry { - id: Int! - name: String - flavor: String +Or set a schema-wide option during startup: + +```csharp title="Set Field Declaration Requirements at Startup" +services.AddGraphQL(options => + { + options.DeclarationOptions.FieldDeclarationRequirements = TemplateDeclarationRequirements.RequireAll; + }); +``` + +Your schema will follow a cascading model of inclusion rules in order of increasing priority from `schema -> class -> field` level declarations. This can be useful in multi-schema setups where a class may be shared but you don't want the exposed fields to be different or if there is a secure field that you want to guarantee is not exposed regardless of the schema. + +## Forced Interface Exclusions + +Perhaps there exists an interface in a shared assembly used amongst multiple work teams that contains some utility classes that absolutely, positively CANNOT be exposed to GraphQL at any cost. + +In these cases, add `[GraphSkip]` to an interface and GraphQL will throw a `GraphTypeDeclarationException` if its ever asked to include it in a schema. + +```csharp title="Prevent a Type from EVER Being Included in the Graph" +// ERROR, GraphTypeDeclarationException will be thrown! +[GraphSkip] +public interface IPastry +{ + int Id { get; set; } + string Name { get; set; } + decimal Price { get; set; } } ``` -:::info -GraphQL will NOT attempt to include fields from inherited interfaces unless they are part of the schema. -::: \ No newline at end of file +> This rule is enforced at the template level and is applied to the `System.Type`. Its not specific to the `INTERFACE` graph type. Any class, interface, enum etc. with the `[GraphSkip]` attribute will be permanantly skipped. \ No newline at end of file diff --git a/docs/types/objects.md b/docs/types/objects.md index 5db2156..69269f5 100644 --- a/docs/types/objects.md +++ b/docs/types/objects.md @@ -5,11 +5,11 @@ sidebar_label: Objects sidebar_position: 0 --- -The `object graph type` is one of six fundamental types defined by GraphQL. We can think of a graph query like a tree and if [scalar values](./scalars), such as `string` and `int`, are the leafs then objects are the branches. +The `OBJECT` graph type is one of six fundamental types defined by GraphQL. We can think of a graph query like a tree and if [scalar values](./scalars), such as `string` and `int`, are the leafs then objects are the branches. -In GraphQL ASP.NET a C# `class` or `struct` is used to identify an `OBJECT` type in a schema. +✅ Use a `class` or `struct` to identify an object type in a schema. -Here we've defined a `Donut` model class. The runtime will convert it, automatically, into a graph type. If you're familiar with GraphQL's own type definition language the equivalent expression is shown below. +Here we've defined a `Donut` model class. The runtime will convert it, automatically, into an object graph type. If you're familiar with GraphQL's own type definition language the equivalent expression is shown below. ```csharp title="Donut.cs" public class Donut @@ -32,9 +32,11 @@ type Donut { By Default, object graph types: -- Are named the same as the `class` name +- Are named the same as the `class` or `struct` name - Have all public properties with a `get` statement included as fields - - The return type of a property must be an acceptable type or it will be skipped + - The return type of a property must be of an acceptable type or it will be skipped + +> You can override the default settings in your [schema configuration](../reference/schema-configuration.md#fielddeclarationrequirements) or by use of the [GraphType](../reference/attributes.md#graphtype) and [GraphField](../reference/attributes.md#graphfield) attributes. ## Custom Naming @@ -68,6 +70,7 @@ By default, POCO class methods are excluded from being fields on the graph but c ```csharp title="Including a POCO method as a field" public class Donut { + // highlight-next-line [GraphField("salesTax")] public decimal CalculateSalesTax(decimal taxPercentage) { @@ -83,6 +86,7 @@ public class Donut ```graphql title="Donut Type Definition" type Donut { + // highlight-next-line salesTax (taxPercentage: Decimal!): Decimal! id: Int! name: String @@ -93,7 +97,7 @@ type Donut { Just as with [controller actions](../controllers/actions), GraphQL will analyze the signature of the method to determine its return type, expression requirements and input arguments. -Object methods lack many of the abilities of controllers such as being able to perform [model state](../controllers/model-state) validation or provide access to `this.User` and `this.Request`. It is recommended to keep your methods simple, like on the example, but its not required. +> Methods on POCO classes lack many of the features of controllers such as being able to perform [model state](../controllers/model-state) validation or provide access to `this.User` and `this.Request`. ## Excluding Fields @@ -106,6 +110,7 @@ public class Donut public string Name { get; set; } public DonutType Type { get; set; } + /highlight-next-line [GraphSkip] public decimal Price { get; set; } } @@ -116,11 +121,13 @@ type Donut { id: Int! name: String type: DonutType! + # price is not included } ``` Or force GraphQL to skip all fields except those you explicitly define with a `[GraphField]` attribute: ```csharp title="Require explicit declarations for this type" +// highlight-next-line [GraphType(FieldDeclarationRequirements = TemplateDeclarationRequirements.RequireAll)] public class Donut { @@ -136,6 +143,7 @@ public class Donut ``` ```graphql title="Donut Type Definition" +# only id and name are included type Donut { id: Int! name: String @@ -151,7 +159,7 @@ services.AddGraphQL(options => }); ``` -GraphQL will follow a cascading model of inclusion rules. Indicating a rule on the `[GraphType]` attribute will override any settings declared by the schema. This can be useful in multi-schema setups where a class may be shared but you don't want the exposed fields to be different or if there is a secure field that you want to guarantee is not exposed regardless of the schema. +Your schema will follow a cascading model of inclusion rules in order of increasing priority from `schema -> class -> field` level declarations. This can be useful in multi-schema setups where a class may be shared but you don't want the exposed fields to be different or if there is a secure field that you want to guarantee is not exposed regardless of the schema. ## Excluding A Class @@ -161,12 +169,13 @@ By Default, GraphQL won't include your class in a schema unless: - Referenced by a graph type that is referenced in a controller OR - Tagged with `[GraphType]`. -But schema configurations can override this behavior and allow GraphQL to greedily include classes that it'll never use. This can expose them in an introspection query unintentionally. You can flag a class such that it skipped unless GraphQL can determine that the object is required to fulfill a request to the schema. +But certian schema configurations can override this behavior and allow GraphQL to greedily include classes that it'll never use. This can expose them in an introspection query unintentionally. You can flag a class such that it skipped unless GraphQL can determine that the object is required to fulfill a request to the schema. This is also helpful to prevent objects that are only used as an `INPUT_OBJECT` from being accidentally added as an `OBJECT` and can reduce the clutter in your schema. ```csharp title="Prevent the Type From Being Auto Included" +// highlight-next-line [GraphType(PreventAutoInclusion = true)] public class Donut { @@ -185,7 +194,7 @@ public class Donut There are times where preventing auto-inclusion is not enough. Perhaps there is a shared assembly amongst work teams that contains some graph types and some utility classes that absolutely, positively CANNOT be exposed to GraphQL at any cost. Yet those classes are required for the graph types to function. -In these cases, add `[GraphSkip]` to the class itself and GraphQL will throw a `GraphTypeDeclarationException` if its ever asked to include the class in a schema. Be that as an explicit reference or through discovery in a controller. This will occur when the schema is first initialized by your `IServiceProvider`, rendering your application dead. But better a crash when a developer is testing a new change than unknowingly leaking sensitive details. +In these cases, add `[GraphSkip]` to the class itself and GraphQL will throw a `GraphTypeDeclarationException` if its ever asked to include the class in a schema. Be that as an explicit reference or through discovery in a controller. This will occur when the schema is first initialized, rendering your application dead. But better a crash when a developer is testing a new change vs. unknowingly leaking sensitive information. ```csharp title="Prevent a Type from EVER Being Included in the Graph" @@ -197,21 +206,62 @@ public class SuperSensitiveData } ``` -This rule is enforced at the template level and is applied to any `System.Type` across the board. Its not specific to the `OBJECT` graph type. If you tag an `interface` or an `enum` with `[GraphSkip]` it will cause the same failure. +> This rule is enforced at the template level and is applied to the `System.Type` across the board. Any class, interface, enum etc. with the `[GraphSkip]` attribute will be permanantly skipped. ## Structs as Objects -The usage of `struct` types as an `OBJECT` graph type is fully supported. The same rules listed above that apply to `class` types also apply to `struct` types. +The usage of `struct` types as an `OBJECT` graph type is fully supported. The same rules listed above that apply to `class` types also apply to `struct` types. The only difference is that since structs are value types there are non-nullable by default. + +```csharp title="Using a Coffee struct" +public class CoffeeController: GraphController +{ + [QueryRoot] + public Coffee RetrieveCoffee(string flavor){ /*...*/} +} + +public struct Coffee +{ + public string Flavor{ get; set; } +} +``` + +```graphql title="GraphQL Type Definition" +# Coffee must be returned +type Query { + retrieveCoffee(flavor: String) : Coffee! +} +``` + +Use the standard `Nullable` syntax to make them nullable (e.g. `Coffee?`): +```csharp title="Using a 'Nullable' Coffee struct" +public class CoffeeController: GraphController +{ + [QueryRoot] + public Coffee? RetrieveCoffee(string flavor){ /*...*/} +} + +public struct Coffee +{ + public string Flavor{ get; set; } +} +``` + +```graphql title="GraphQL Type Definition" +# Coffee or null may be returned +type Query { + retrieveCoffee(flavor: String) : Coffee +} +``` ## Reuse as Input Objects Both `class` and `struct` types can be used as an `INPUT_OBJECT` and an `OBJECT` graph type. See the section on [input objects](./input-objects) for some of the key differences and requirements. -## Inheritance +## Object Inheritance Class inheritance as we think of it in .NET is not concept in GraphQL. As a result, there is no association between two objects in the graph even if they share an inheritance structure in .NET. -```csharp title="Class Inheritance" +```csharp title="C# Class Inheritance" public class Pastry { public int Id { get; set; } @@ -238,6 +288,38 @@ type Donut { flavor: String } ``` + :::tip GraphQL ASP.NET is smart enough to figure out your intent with object use (i.e. [Liskov Subsitutions](https://en.wikipedia.org/wiki/Liskov_substitution_principle)). If you return a `Donut` where a `Pastry` is indicated by the graph. The library will happily use your donut as a pastry for any field resolutions. -::: \ No newline at end of file +::: + +## Implementing Interfaces + +> Read the section on [interfaces](./interfaces.md) for details on how to use them. + +Graphql will not attempt to "auto include" the interfaces implemented by your objects in your schema. This is both a security measure to prevent information from leaking as well as a decluttering technique. Its unlikely that your schema cares about the myriad of interfaces you may declare on your business objects. + +However, when an interface is included in schema, graphql will sense the inclusion and automatically wire up the necessary information on your objects that implement. + +```csharp title="Including a Pastry" +public class PastryController: GraphController +{ + [QueryRoot("retrievePastry", typeof(Donut))] + public IPastry RetrievePastry(string id){/* ... */} +} +``` +```graphql title="GraphQL Type Definition" +interface IPastry { + id: String! + name: String +} + +# donut will automatically declare that it implements IPastry when its +# included in the schema +// highlight-next-line +type Donut implements IPastry { + id: String! + name: String + flavor: DonutFlavor +} +``` \ No newline at end of file diff --git a/docs/types/scalars.md b/docs/types/scalars.md index 87048b6..4c32471 100644 --- a/docs/types/scalars.md +++ b/docs/types/scalars.md @@ -20,7 +20,7 @@ GraphQL ASP.NET has 20 built in scalar types. | Double | System.Double | Number | | Float | System.Single | Number | | Guid | System.Guid | String | -| ID | GraphQL.AspNet.GraphId | String | +| ID | GraphQL.AspNet.GraphId | String or Number | | Int | System.Int32 | Number | | Long | System.Int64 | Number | | Short | System.Int16 | Number | @@ -84,13 +84,27 @@ Unlike other graph types, scalar names are fixed across all schemas. The name de For the value types listed above, GraphQL will automatically coerce values into the appropriate `Nullable` as required by an argument's type expression. -## GraphId +## ID Scalar GraphQL defines a special scalar value value called `ID` which is defined as: > _a unique identifier, often used to refetch an object or as the key for a cache_" [Spec § [3.5.5](https://graphql.github.io/graphql-spec/October2021/#sec-ID)]. -GraphQL ASP.NET maintains a struct, `GraphQL.AspNet.GraphId` to hold this value and serializes and deserializes it as a string. You can perform an implicit and explicit conversion between `GraphId` and `System.String` +GraphQL ASP.NET maintains a struct, `GraphQL.AspNet.GraphId` to hold this value and will always serialize it to a string. However, per the specification, when supplying values on a query document, ID can accept strings or integers as input values. Floating point numbers and boolean values are not allowed. + +- Valid ID values + - `"abc"` + - `34` + - `-200` +- Invalid ID Values + - `true` + - `4.0` + +:::note Integer Value Range +When using an integer value for an ID scalar, the minimum allowed value is `long.MinValue` and the maximum allowed value is `ulong.MaxValue` +::: + +You can perform an implicit and explicit conversion between `GraphId` and `System.String` as well. ```csharp title="Converting GraphId" GraphId id = new GraphId("abc"); @@ -103,4 +117,8 @@ GraphId id = (GraphId)str; ``` ## Custom Scalars -See the section on [custom scalars](../advanced/custom-scalars.md) for details on creating your own scalar types. \ No newline at end of file +See the section on [custom scalars](../advanced/custom-scalars.md) for details on creating your own scalar types. + +### Working with Structs + +Structs, by default, will be treated like [object graph types](./objects.md). Sometimes it may make sense to create a custom scalar out of a struct, for example, the default scalar for `Guid`. Use your best judgement when determining if a struct should be a scalar or not. But always try to opt for fewer scalars when possible. \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index 25fb489..b5b0060 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -7,7 +7,7 @@ const darkCodeTheme = require('prism-react-renderer/themes/palenight'); /** @type {import('@docusaurus/types').Config} */ const config = { title: 'GraphQL ASP.NET', - tagline: 'v1.0.0-rc4', + tagline: 'v1.0.0', url: 'https://graphql-aspnet.github.io', baseUrl: '/', onBrokenLinks: 'throw', From af6647d5d1a6a031d11af70b756775241a9d98cf Mon Sep 17 00:00:00 2001 From: Kevin Carroll Date: Sat, 7 Jan 2023 17:18:57 -0700 Subject: [PATCH 2/5] WIP, a lot of page updates, reworked home page and overpage. --- docs/advanced/type-expressions.md | 54 +++++---- docs/assets/create-new-web-api-project.png | Bin 87917 -> 101470 bytes docs/controllers/field-paths.md | 1 + docs/controllers/model-state.md | 10 +- docs/controllers/type-extensions.md | 1 + docs/development/debugging.md | 4 +- docs/development/entity-framework.md | 25 ++-- .../made-for-aspnet-developers.md | 8 +- docs/quick/code-examples.md | 54 +++++++-- docs/quick/create-app.md | 94 +++++++++++++++ docs/quick/overview.md | 112 ++++-------------- docs/reference/attributes.md | 65 +++++++++- docs/reference/demo-projects.md | 5 + docs/reference/graph-controller.md | 5 +- docs/reference/query-caching.md | 4 +- docs/types/list-non-null.md | 29 ++--- docusaurus.config.js | 9 +- src/css/custom.css | 46 +++++++ src/pages/index.js | 9 +- 19 files changed, 355 insertions(+), 180 deletions(-) create mode 100644 docs/quick/create-app.md diff --git a/docs/advanced/type-expressions.md b/docs/advanced/type-expressions.md index 5aa8d39..acd7d69 100644 --- a/docs/advanced/type-expressions.md +++ b/docs/advanced/type-expressions.md @@ -7,13 +7,13 @@ sidebar_position: 1 The GraphQL specification states that when a field resolves a value that doesn't conform to the expected type expression of the field that the value is rejected, converted to null and an error added to the response. -When the library build a schema it makes as few assumptions as possible about the data returned from your fields to result in as few errors as possible. +When the library builds a schema it makes as few assumptions as possible about the data returned from your fields to result in as few errors as possible. These assumptions are: - Fields that return reference types **can be** null -- Fields that return value types **cannot be** null -- Fields that return Nullable value types (e.g. `int?`) **can be** be null. +- Fields that return primatives or value types (including structs) **cannot be** null +- Fields that return Nullable primatives or value types (e.g. `int?`) **can be** be null. - When a field returns an object that implements `IEnumerable` it will be presented to GraphQL as a "list of `TType`". Basically, if your method is able to return a value...then its valid as far as GraphQL is concerned. @@ -31,14 +31,16 @@ public class BakeryController : GraphController ``` ```graphql title="Sample Query" query { - donut(id: 15){ - name - flavor + bakery { + donut(id: 15){ + name + flavor + } } } ``` -This action method could return a `Donut` or return `null`. But should the donut field, from a GraphQL perspective, allow a null return value? The code certainly does and the rules above say fields that return a reference type can be null...but that's not what's important. Its ultimately your decision to decide if a "null donut" is allowed, not the C# compiler and not the assumptions made by the library. +Assuming `Donut` was a class (a reference type), this action method could return a donut object or `null`. But should the donut field, from a GraphQL perspective, allow a null return value? The code certainly does and the rules above say fields that return a reference type can be null...but that's not what's important. Its ultimately your decision to decide if a "null donut" is allowed, not the C# compiler and not the assumptions made by the library. On one hand, if a null value is returned, regardless of it being valid, the _outcome_ of the field is the same. When we return a null no child fields are processed. On the other hand, if null is not allowed we need to tell someone, let them know its nulled out not because it simply _is_ null but because a schema violation occurred. @@ -84,36 +86,44 @@ public IEnumerable RetrieveDonut(string id) ``` :::info `Type` is a place holder -The value `Type` used in the examples is arbitrary and can be any valid string. The correct type name for the target schema will be used in its place at runtime. +The type name used in the examples (e.g. `Type`) is arbitrary and can be any valid string. The correct type name for the target field will be used in its place at runtime. ::: +## Input Argument Type Expressions + +Similar to fields, you can use the `TypeExpression` property on `[FromGraphQL]` to add more specificity to your input arguments. + +```csharp title="Type Expression on an Argument" +// Force the argument "id" to supply a string (it cannot be supplied as null) +// ----------------- +// Final Type Expression of the 'id' arg: String! +[Query] +// highlight-next-line +public Donut RetrieveDonut([FromGraphQL(TypeExpression = "Type!")] string id) +{/*...*/} +``` + + +## Runtime Type Validation + Note that the library will accept your type string even if it would be impossible, from a C# perspective, to return data that would match. ```csharp title="Data and Type Expression Mismatch" // QUERY EXECUTION ERROR -// GraphQL will attempt to process a Donut as an IEnumerable and will fail +// GraphQL will attempt to process a single Donut as a list and will fail // highlight-next-line [Query("donut", TypeExpression ="[Type]")] public Donut RetrieveDonut(string id) {/*...*/} ``` +When executing a query and resolving a field, should one of your action methods (or even your object properties) not return data conforming to the type expression that's defined for it, GraphQL will reject the data. The value is set to null and an error is registered in the response for the field in question. The runtime will not attempt to resolve any referenced child fields for a rejected value. + +If the rejected field does not allow nulls, the error is propagated up to its parent, which is then also set to null. If that parent field can't return a null value the error continues up until it reaches a field that can be null or the entire field collection is nulled out. \[Spec § [6.4.4](https://graphql.github.io/graphql-spec/October2021/#sec-Errors-and-Non-Nullability)\] + :::danger When declared, the runtime will use your `TypeExpression` as law for any field declarations; skipping its internal checks. You can setup a scenario where by you could return data that the runtime could never validate as being correct and GraphQL will happily process it and return an error every time. ::: > "With great power comes great responsibility" -Uncle Ben -## Input Argument Type Expressions - -Similar to fields, you can use the `TypeExpression` property on `[FromGraphQL]` to add more specificity to your input arguments. - -```csharp title="Type Expression on an Argument" -// Force the argument "id" to supply a string (it cannot be supplied as null) -// ----------------- -// Final Type Expression of the 'id' arg: String! -[Query] -// highlight-next-line -public Donut RetrieveDonut([FromGraphQL(TypeExpression = "Type!")] string id) -{/*...*/} -``` \ No newline at end of file diff --git a/docs/assets/create-new-web-api-project.png b/docs/assets/create-new-web-api-project.png index 7e902177b6b9b8c3c11e97d858c1421acf7340c4..f96cbb03541ffdad64736ff871692c13fd7ea5ab 100644 GIT binary patch literal 101470 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 z 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

WiWi9b-z%kd@XtlJ9{=sZkb(IXSFa?`21 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

-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 diff --git a/docs/controllers/type-extensions.md b/docs/controllers/type-extensions.md index 5010bc6..2bca595 100644 --- a/docs/controllers/type-extensions.md +++ b/docs/controllers/type-extensions.md @@ -142,3 +142,4 @@ Theoretically, yes. But take a moment and think about performance. For basic obj Type extensions shine in parent-child relationships when preloading data is a concern but be careful not to go isolating every graph field just to avoid retrieving data. Fetching a few extra bytes from a database is negligible compared to querying a database 20 individual times. Your REST APIs were already querying extra data and they were likely transmitting that data to the client. It comes down to your use case. There are times when it makes sense to seperate things using type extensions and times when preloading whole objects is better. For many applications, once you've deployed to production, the queries being executed are finite. Design your model objects and extensions to be performant in the ways your data is being requested, not in the ways it _could be_ requested. + diff --git a/docs/development/debugging.md b/docs/development/debugging.md index 2af597c..9d207b8 100644 --- a/docs/development/debugging.md +++ b/docs/development/debugging.md @@ -7,9 +7,9 @@ sidebar_position: 0 ## Disable Field Asynchronousity -GraphQL will execute sibling fields asynchronously during normal operation. This includes multiple top level controller action calls. However, during a debugging session, having multiple fields trying to resolve themselves can play havoc with your debug cursor. If you've ever encountered a situation where the yellow line in Visual Studio seemly jumps around to random lines of code then you've experienced this issue. +GraphQL will execute sibling fields asynchronously during normal operation. This includes multiple top-level controller action calls. However, during a debugging session, having multiple fields trying to resolve themselves can play havoc with your debug cursor. If you've ever encountered a situation where the yellow line in Visual Studio seemly jumps around to random lines of code then you've experienced this issue. -At startup it can help to disable asynchronous field resolution and instead force each field to execute in sequential order awaiting its completion before beginning the next one. Don't forget to disable this in production though as awaiting fields individually will significantly impact performance. +At startup, it can help to disable asynchronous field resolution and instead force each field to execute in sequential order awaiting its completion before beginning the next one. Don't forget to disable this in production though, as awaiting fields individually will _**significantly**_ impact performance. ```csharp title="Configure Debug Mode" services.AddGraphQL(options => diff --git a/docs/development/entity-framework.md b/docs/development/entity-framework.md index a6c70b8..87332fa 100644 --- a/docs/development/entity-framework.md +++ b/docs/development/entity-framework.md @@ -22,13 +22,13 @@ This default registration adds the `DbContext` to the DI container is as a `Scop public class FoodController : GraphController { private AppDbContext _context; - public FoodController(AppDbContext context){} + public FoodController(AppDbContext context){/**/} [QueryRoot] - public IFood SearchMeat(string name){} + public IFood SearchMeat(string name){/**/} [QueryRoot] - public IFood SearchVeggies(string name){} + public IFood SearchVeggies(string name){/**/} } ``` @@ -43,33 +43,32 @@ query { } ``` -The `FoodController` contains two action methods both of which are executed by the query. This means two instances of the controller are needed, once for each field resolution, since they are executed in parallel. While the controller itself is registered with the DI container as transient the `DbContext` is not, it is shared between the controller instances. This can result in an exception being thrown : +The `FoodController` contains two action methods both of which are requested. Since this is a query and not a mutation, both top-level action methods are executed in parallel. This can result in an exception being thrown : ![Ef Core Error](../assets/ef-core-error.png) -This is caused by graphql attempting to execute both controller actions simultaneously. Ef Core will reject multiple active queries. There are a few ways to handle this and each comes with its own trade offs: +This is caused by graphql attempting to execute both controller actions simultaneously. EF Core will reject multiple active queries. There are a few ways to address this and each comes with its own trade offs: -## Register DbContext as Transient +### Register DbContext as Transient -One way to correct this problem is to register your DbContext -as a transient object. +One way to correct this problem is to register your DbContext as a transient object. -```csharp title="Register DbContext as Transient" +```csharp title="Option 1: Register DbContext as Transient" services.AddDbContext(o => { o.UseSqlServer(""); }, ServiceLifetime.Transient); ``` -Now each controller instance will get its own DbContext and the queries can execute in parallel without issue. +Now each invocation will get its own DbContext and the queries can execute in parallel without issue. -The tradeoff here is that you lose the singular scoped unit-of-work for the whole request granted by the shared context. +The tradeoff here is that you lose the singular scoped unit-of-work for the whole request granted by the shared context. If you have services registered to the DI container that make use of the DbContext you would want to register them as `Transient` as well lest one scoped service be created for the request trapping a single DbContext instance. Sometimes, however; this is unavoidable, especially with legacy code... -## Execute Controller Actions in Isolation +### Execute Controller Actions in Isolation Another option is to instruct graphql to execute its controller actions in sequence, rather than in parallel. -```csharp title="Isolate GraphQL Controller Actions" +```csharp title="Option 2: Isolate GraphQL Controller Actions" services.AddGraphQL(o => { o.ExecutionOptions.ResolverIsolation = ResolverIsolationOptions.ControllerActions; diff --git a/docs/introduction/made-for-aspnet-developers.md b/docs/introduction/made-for-aspnet-developers.md index fabef40..c298214 100644 --- a/docs/introduction/made-for-aspnet-developers.md +++ b/docs/introduction/made-for-aspnet-developers.md @@ -62,9 +62,9 @@ Are you working on a large project that has shared assemblies between services? ## Plays Nice with Web API Controllers, Razor Views and Razor Pages -This library sits as an extension on the standard ASP.NET pipeline, not a replacement. At its core, a graphql query is just another GET or POST route on your application. At startup it registers a middleware component to handle requests using `appBuilder.Map()`. +This library is an extension to the standard ASP.NET pipeline, not a replacement. At its core, a graphql query is just another GET or POST route on your application. At startup the library registers a middleware component to handle requests using `appBuilder.Map()`. -Also, if you are integrating into an existing project, you'll find a lot of your utility code should work out of the box which should ease your migration. Any existing services, custom authorization and model validation attributes etc. can be directly attached to graph action methods and input models. You might even find that most of your model objects work as well. +Also, if you are integrating into an existing project, you'll find a lot of your utility code should work out of the box which should ease your migration. Any existing services, custom authorization and model validation attributes etc. can be directly attached to graph action methods and input models. You might even find that most of your model objects work with little to no changes as well. ## Scoped Dependency Injection @@ -72,10 +72,10 @@ Services are injected into graph controllers in the same manner as ASP.NET contr ## User Authorization -The user model is exactly the same. In fact, the `ClaimsPrincipal` passed to `this.User` on a Web API controller is the same instance used to validate any `[Authorize]` attributes on your graph controller actions. Internally, it uses the same `IAuthorizationService` that gets added when you call `services.AddAuthorization()` during startup. +The user model is exactly the same. In fact, the `ClaimsPrincipal` passed to `this.User` on a Web API controller is the same instance used to validate any `[Authorize]` attributes on your graph controller actions. Internally, it uses the same `IAuthorizationService` that gets added when you call `.AddAuthorization()` during startup. ## Custom Action Results -Many teams define custom action results beyond `this.Ok()` and `this.BadRequest()` to standardize how they will respond to requests on their Web API controllers to provide consistent messaging, perform some sort of logging or create a common return payload. GraphQL ASP.NET supports this model as well. Out of the box you get support for many of the relevant action results around returning data, indicating an error or denying access, but you can implement your own `IGraphActionResult` to standardize how a given result is converted into a response object and used by the runtime. This includes control to invalidate the field, inject customized error messages or cancel the field request altogether. +Many teams define custom action results beyond `this.Ok()` and `this.BadRequest()` for their REST queries to standardize how they will respond to requests on their Web API controllers to provide consistent messaging, perform some sort of logging or create a common return payload. GraphQL ASP.NET supports this model as well. Out of the box you get support for many of the relevant action results around returning data, indicating an error or denying access, but you can implement your own `IGraphActionResult` to standardize how a given result is converted into a response object and used by the runtime. This includes control to invalidate the field, inject customized error messages or cancel the field request altogether. _Side Note:_ Not all action results make sense in GraphQL. For instance, you won't find a way to download a file or indicate a 204 (no content) result. A GraphQL field must always return a piece of data (even if its null). Since the `IGraphActionResult` object is only a small piece in an entire query of many fields, its scope of abilities is paired to match. diff --git a/docs/quick/code-examples.md b/docs/quick/code-examples.md index 06d3720..85f7785 100644 --- a/docs/quick/code-examples.md +++ b/docs/quick/code-examples.md @@ -7,22 +7,38 @@ sidebar_position: 2 This page shows a quick introduction to some common scenarios and the C# code to support. +## Configuring Services -## A Basic Controller +The library uses a standard "Add & Use" pattern for configuring services with your application. A route is added to the ASP.NET request pipeline when you call `.UseGraphQL()`. Place it as appropriate amongst any other configurations, routes, authorization etc. when you build your pipeline. + +```csharp title="Program.cs" +var builder = WebApplication.CreateBuilder(args); -A simple controller to return data based on the input of an `Enum`. +// Add graphql services to the DI container +// highlight-next-line +builder.Services.AddGraphQL(); -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +var app = builder.Build(); +// Configure the HTTP request pipeline +// highlight-next-line +app.UseGraphQL(); +app.Run(); +``` +> _The configuration steps may vary slightly when using a Startup.cs file; typical for .NET 5 or earlier _ + + +## A Basic Controller + +A simple controller to return data based on a string value. ```csharp title="HeroController.cs" public class HeroController : GraphController { [QueryRoot] - public Human Hero(Episode episode) + public Human Hero(string episode) { - if(episode == Episode.Empire) + if(episode == "Empire") { return new Human() { @@ -46,7 +62,7 @@ public class HeroController : GraphController ```graphql title="GraphQL Query" query { - hero(episode: EMPIRE) { + hero(episode: "Empire") { name homePlanet } @@ -65,20 +81,23 @@ query { ``` :::info Did you notice? -In the query the hero field is `camelCased` but in C# the method is `ProperCased`? GraphQL ASP.NET automatically translates your names appropriately to standard GraphQL conventions. The same goes for your graph type names, enum values etc. +In the query the hero field is `camelCased` but in C# the method is `ProperCased`? Field names are automatically translated to standard GraphQL conventions. The same goes for your graph type names, enum values etc. -You can implement your own `GraphNameFormatter` and alter the name formats for each of your registered schemas. +You can also implement your own `GraphNameFormatter` and alter the name formats for each of your registered schemas. ::: ## Using an Interface -If your models share a common interface just return it from a controller action and GraphQL ASP.NET takes care of the rest. You can always use a fragment to specify fields of specific object types. +If your models share a common interface just return it from a controller action and the library will take care of the rest. +> Don't forget to declare the object types that implement your interface or graphql won't know what resolvers to invoke at runtime. In this example, we've declared them inline but you can easily add them at startup to reduce the noise. ```csharp title="HeroController.cs" public class HeroController : GraphController { + // highlight-next-line [QueryRoot(typeof(Droid), typeof(Human))] + // highlight-next-line public ICharacter Hero(Episode episode) { if(episode == Episode.Empire) @@ -126,9 +145,11 @@ We've used `[QueryRoot]` so far to force a controller action to be a root field ```csharp title="RebelAllianceController.cs" +// highlight-next-line [GraphRoute("rebels")] public class RebelAllianceController : GraphController { + // highlight-next-line [Query("directory/hero")] public Human RetrieveHero(Episode episode) { @@ -207,6 +228,7 @@ public class PersonsController : GraphController _personService = service; } + // highlight-next-line [Authorize] [QueryRoot("self")] public async Task RetrievePerson() @@ -226,7 +248,7 @@ query { } ``` -#### Notes on Authorization +#### ✅ Notes on Authorization - Your controller actions have full access to the same `ClaimsPrincipal` that you get with `this.User` on an web api controller. In fact, its the same object reference. - Out of the box, the library performs authorization on a "per field" basis. This includes POCO object properties! If you have a piece of sensitive data attached to a property, say Birthday, on your Person model, then implement your own `IAuthorizeData` attribute and apply it to the property. Unauthorized user's won't be able to query for that field, even if they can access the controller that produced the object its attached or every other field on the object. @@ -249,8 +271,10 @@ public class PersonsController : GraphController // Check if the model passed validation // requirements before using it // *************************** + // highlight-start if(!this.ModelState.IsValid) return null; + // highlight-end return await _service.CreatePerson(model); } @@ -262,6 +286,7 @@ public class Human { public int? Id{ get; set; } + // highlight-next-line [StringLength(35)] public string Name { get; set; } @@ -283,7 +308,7 @@ mutation { ``` :::info Did You Notice? -We used `Human` as an input argument and as the returned data object. GraphQL ASP.NET will automatically generate the appropriate graph types for `OBJECT` and `INPUT_OBJECT` and add them to your schema when needed. +We used `Human` as an input argument **and** as the returned data object. The library will automatically generate the appropriate graph types for `OBJECT` and `INPUT_OBJECT` and add them to your schema when needed. ::: @@ -297,7 +322,7 @@ Reusing the previous example, here we make use of `this.BadRequest()` to automat // C# Controller public class PersonsController : GraphController { - [MutationRoot("joinTheResistance")] + [MutationRoot("joinTheResistance", typeof(Human))] public async IGraphActionResult CreatePerson(Human model) { // *************************** @@ -305,12 +330,15 @@ public class PersonsController : GraphController // requirements before using it // *************************** if(!this.ModelState.IsValid) + // highlight-next-line return this.BadRequest(this.ModelState); var result = await _service.CreatePerson(model); return result != null + // highlight-start ? this.Ok(result) : this.Error("Woops Something broke"); + // highlight-end } } diff --git a/docs/quick/create-app.md b/docs/quick/create-app.md new file mode 100644 index 0000000..a391baf --- /dev/null +++ b/docs/quick/create-app.md @@ -0,0 +1,94 @@ +--- +id: create-app +title: Building Your First App +sidebar_label: Your First App +sidebar_position: 1 +description: Step by Step instructions for creating a sample application +--- + +This document will help walk you through creating a new Web API project, installing the GraphQL ASP.NET library and writing your first controller. + +## Create a New Web API Project +💻 Setup a new `ASP.NET Core Web API` project: + +![web api project](../assets/create-new-web-api-project.png "Select ASP.NET Core Web API") + +## Add the Package From Nuget +💻 Add the `GraphQL.AspNet` nuget package: + +```powershell +# Using the dotnet CLI +> dotnet add package GraphQL.AspNet +``` + +## Create a Controller + +💻 Create your first Graph Controller: + +```csharp title="BakeryController.cs" +using GraphQL.AspNet.Attributes; +using GraphQL.AspNet.Controllers; + +public class BakeryController : GraphController +{ + [QueryRoot("donut")] + public Donut RetrieveDonut() + { + return new Donut() + { + Id = 3, + Name = "Snowy Dream", + Flavor = "Vanilla" + }; + } +} + +public class Donut +{ + public int Id { get; set; } + public string Name { get; set; } + public string Flavor { get; set; } +} +``` + + +## Configure Startup + +💻 Register GraphQL with your services collection and your application pipeline: + +```csharp title="Program.cs" +using GraphQL.AspNet.Configuration; + +var builder = WebApplication.CreateBuilder(args); + +// Add graphql services to the DI container. +// highlight-next-line +builder.Services.AddGraphQL(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +// highlight-next-line +app.UseGraphQL(); +app.Run(); +``` +> _The configuration steps may vary slightly when using a Startup.cs file; typical for .NET 5 or earlier _ + +## Execute a Query + +💻 Start the application and using your favorite tool, execute a query: + +```graphql title="Sample Query" +query { + donut { + id + name + flavor + } +} +``` + +### Results: + +![query results](../assets/overview-sample-query-results.png "Results using GraphQL Playground") +> _The port number on your app may be different than that shown in the image_ \ No newline at end of file diff --git a/docs/quick/overview.md b/docs/quick/overview.md index 2f74708..031d0bf 100644 --- a/docs/quick/overview.md +++ b/docs/quick/overview.md @@ -7,114 +7,42 @@ description: A quick overview of how to use the library --- -```powershell title="Install The Library" -# Using the dotnet CLI -> dotnet add package GraphQL.AspNet - -# Using Package Manager Console -> Install-Package GraphQL.AspNet -``` - -## Documentation - -This documentation should can be used as a reference for various aspects of the library or read to discover the various features of the library. If you have questions don't hesitate to ask over on [Github](https://github.com/graphql-aspnet/graphql-aspnet). - - -## Helpful Pages - - -📌 [Demo Projects](../reference/demo-projects.md) : A number of downloadable sample projects covering a wide range of topics - -💡 [Controllers](../controllers/actions.md) : Everything you need to know about `GraphController` and defining action methods. - -📜 [Attributes](../reference/attributes.md) : A reference list of the various `[Attributes]` used by GraphQL ASP.NET to create your schema. +Use the menus on the left to navigate through the documentation. You do not need to read the various sections in order, feel free to use this as a reference guide as you dig deeper. -📐 [Schema Configuration](../reference/schema-configuration.md) : A reference list of the various configuration options available at application startup. +## Nuget & Installation - - -## Building Your First Application - -### Create a new Web API Project -💻 Setup a new `ASP.NET Core Web API` project: - -![web api project](../assets/create-new-web-api-project.png) +.NET Standard 2.0 .NET 6 .NET 7

-### Add the Package From Nuget -💻 Add the `GraphQL.AspNet` nuget package: +The library is available on [nuget](https://www.nuget.org/packages/GraphQL.AspNet/) and can be added to your project via the conventional means. -```powershell -# Powershell terminal, Package Manager in Visual Studio, Developer Command Prompt etc. +```powershell title="How to Install The Library" +# Using the dotnet CLI > dotnet add package GraphQL.AspNet -``` -### Create a Controller - -💻 Create your first Graph Controller: - -```csharp title="BakeryController.cs" -using GraphQL.AspNet.Attributes; -using GraphQL.AspNet.Controllers; - -public class BakeryController : GraphController -{ - [QueryRoot("donut")] - public Donut RetrieveDonut() - { - return new Donut() - { - Id = 3, - Name = "Snowy Dream", - Flavor = "Vanilla" - }; - } -} - -public class Donut -{ - public int Id { get; set; } - public string Name { get; set; } - public string Flavor { get; set; } -} +# Using Package Manager Console +> Install-Package GraphQL.AspNet ``` + +👉 [Quick Start Guide](./create-app.md): Step by step instructions for configuring app services and writing your first controller. -### Configure Startup - -💻 Register GraphQL with your services collection and your application pipeline: +👉 [Code Examples](./code-examples.md): A few code snippets if you just want the gist of things. -```csharp title="Program.cs" -using GraphQL.AspNet.Configuration; + -var builder = WebApplication.CreateBuilder(args); -// Add services to the container. -// highlight-next-line -builder.Services.AddGraphQL(); +## Other Helpful Pages -var app = builder.Build(); +These pages may be helpful in getting started with the library: -// Configure the HTTP request pipeline. -// highlight-next-line -app.UseGraphQL(); -app.Run(); -``` + +💡 [Controllers](../controllers/actions.md) : Everything you need to know about creating a `GraphController` and defining action methods. -### Execute a Query +📜 [Attributes](../reference/attributes.md) : A reference list of the various `[Attributes]` used to configure your controllers and models. -💻 Start the application and using your favorite tool, execute a query: +📐 [Schema Configuration](../reference/schema-configuration.md) : A reference list of the various configuration options. -```graphql title="Sample Query" -query { - donut { - id - name - flavor - } -} -``` - -#### Results: +📌 [Demo Projects](../reference/demo-projects.md) : A number of downloadable sample projects covering a wide range of topics -![query results](../assets/overview-sample-query-results.png) \ No newline at end of file + \ No newline at end of file diff --git a/docs/reference/attributes.md b/docs/reference/attributes.md index d7013b1..d7838f5 100644 --- a/docs/reference/attributes.md +++ b/docs/reference/attributes.md @@ -397,10 +397,22 @@ public class CharacterController : GraphController } ``` +```graphql title="Sample Query" +query { + character { + # field is named "hero" not "RetrieveTheHero" + hero(episode: EMPIRE) { + name + homePlanet + } + } +} +``` + #### `[Query(returnType, params otherTypes)]` - `returnType`: the expected return type of this field. - - must be used when this field returns an `IGraphActionResult` + - **Must** be used when this field returns an `IGraphActionResult` - `otherTypes`: additional possible types this field could return. - Can be used to declare possible concrete types when this field returns an interface. @@ -420,7 +432,7 @@ public class CharacterController : GraphController - `template` - The field path template to use for this method. - `returnType`: the expected return type of this field. - - must be used when this field returns an `IGraphActionResult` + - **Must** be used when this field returns an `IGraphActionResult` ```csharp public class CharacterController : GraphController @@ -471,10 +483,59 @@ public class CharacterController : GraphController } ``` +## PossibleTypes + +_(optional)_ When returning an interface from an action method, this attribute allows for the declaration of additional object types to help reduce clutter in the primary query or mutation declaration. + +#### `[PossibleTypes(typeof(TypeA), typeof(TypeB) ...)]` + +These two controller examples are identical: + +```csharp title="Example A" +public class CharacterController : GraphController +{ + // highlight-next-line + [Query("hero", typeof(Human), typeof(Droid), typeof(Gungan)] + public ICharacter RetrieveTheHero(Episode episode) + { + // .... + } +} +``` + +```csharp title="Example B" +public class CharacterController : GraphController +{ + [Query("hero")] + // highlight-next-line + [PossibleTypes(typeof(Human), typeof(Droid), typeof(Gungan))] + public ICharacter RetrieveTheHero(Episode episode) + { + // .... + } +} +``` +## SpecifiedBy + +_(optional)_ Provides a convienent way to apply the `@specifiedBy` directive to a custom scalar. When not used, no url is provided to introspection requests for the scalar information. + +#### `[SpecifiedBy(url)]` + +```csharp +// highlight-next-line +[SpecifiedBy("https://documentation.example.com/api/money-scalar")] +public class MoneyScalar : IScalarGraphType +{ + // details ommited... +} +``` + + ## TypeExtension Declares a controller action method as a field on another graph type rather than a query or mutation action. + #### `[TypeExtension(typeToExtend, fieldName)]` - `typeToExtend` - The graph type to which this field will be added diff --git a/docs/reference/demo-projects.md b/docs/reference/demo-projects.md index dcf0254..1701fdf 100644 --- a/docs/reference/demo-projects.md +++ b/docs/reference/demo-projects.md @@ -16,6 +16,9 @@ Demonstrates the creation of a custom `ILogProvider` to intercept logging events 📌 [Custom Http Processor](https://github.com/graphql-aspnet/demo-projects/tree/master/Custom-HttpProcessor)
Demonstrates overriding the default HTTP Processor to conditionally process entire queries at the ASP.NET level. + +
+ ### Authentication & Authorization 📌 [Field Authorization](https://github.com/graphql-aspnet/demo-projects/tree/master/Authorization)
@@ -24,6 +27,8 @@ Demonstrates fields with authorization requirements and how access denied messag 📌 [Firebase Authentication](https://github.com/graphql-aspnet/demo-projects/tree/master/Firebase-Authentication)
Demonstrates how to setup a [Firebase](https://firebase.google.com/) project and link a GraphQL ASP.NET project to it. +
+ ### Subscriptions 📌 [Subscriptions w/ Azure Service Bus](https://github.com/graphql-aspnet/demo-projects/tree/master/Subscriptions-AzureServiceBus)
diff --git a/docs/reference/graph-controller.md b/docs/reference/graph-controller.md index 230cfb3..40d87f5 100644 --- a/docs/reference/graph-controller.md +++ b/docs/reference/graph-controller.md @@ -15,8 +15,9 @@ The completed model state dictionary contains an entry for each validated parame public class CharacterController : GraphController { [Query] - public IGraphActionResult Hero(Episode episode = Episode.EMPIRE) + public IGraphActionResult CreateCharacter(Character characterModel) { + // highlight-next-line if(!this.ModelState.IsValid) return this.BadRequest(this.ModelState); @@ -34,6 +35,7 @@ public class CharacterController : GraphController [Query] public IGraphActionResult Hero(Episode episode = Episode.EMPIRE) { + // highlight-next-line if(this.Request.Field.IsLeaf) { // ... @@ -62,6 +64,7 @@ public class CharacterController : GraphController [Query] public IGraphActionResult Hero(Episode episode = Episode.EMPIRE) { + // highlight-next-line if(this.User.Identity.Name == "DebbieEast") { // ... diff --git a/docs/reference/query-caching.md b/docs/reference/query-caching.md index 6a17917..7e2e453 100644 --- a/docs/reference/query-caching.md +++ b/docs/reference/query-caching.md @@ -27,4 +27,6 @@ services.AddGraphQLLocalQueryCache(); services.AddGraphQL(); ``` -**Note:** Because a query plan contains function pointers and references to local types, the default query cache is currently restricted to being in-process for a single server instance. Query Plan serialization for a shared cache such as Redis is on the road map after v1.0 is complete. If you would like to contribute in this area please reach out! +:::note +Because a query plan contains function pointers and references to local graph types, the default query cache is restricted to being "in process" for a single server instance and does not scale out to reddis or other similar technologies. +::: diff --git a/docs/types/list-non-null.md b/docs/types/list-non-null.md index 1d9a3d8..b61a94a 100644 --- a/docs/types/list-non-null.md +++ b/docs/types/list-non-null.md @@ -10,29 +10,29 @@ In addition to the six fundamental graph types, GraphQL contains two meta graph - `NON_NULL` : Indicates that the Graph Type its describing must not be a null value, be that as an input argument or returned from a field - `LIST`: Indicates that GraphQL should expect a collection of objects instead of just a single item. -These meta types aren't anything concrete like a scalar or an enum. Instead they "wrap" another graph type (such as `int` or `Donut`). They describe the usage of a graph type in a field or input argument: +These meta types aren't anything concrete like a scalar or an enum. Instead they "wrap" another graph type (such as `int` or `Donut`). They are used to describe the usage of a graph type in a field or input argument: For example, we would say: -- "A field that returns a list of `integers`." -- "A field that must return a `person`." -- "An input argument that must be a list of `Dates`." +- "A field that returns a `Float` number." +- "A field that must return a `Person`." +- "An input argument that must be a `Date`." We can even describe complex scenarios: -- "A field that might return a collection of `persons` but when returned, each person must be a valid reference." -- "An input argument that must be a list that contains lists of `integers`." (e.g. `[[1, 2], [5, 15]]`) +- "A field that **might** return a collection of `persons` but when returned, each person **must** be a valid reference." +- "An input argument that **must** be a list that contains lists of `integers`." (e.g. `[[1, 2], [5, 15]]`) ## Type Expressions Together these "wrappers" make up a field's `Type Expression`. GraphQL ASP.NET will automatically infer a type expression for every field and every input argument when generating your schema. -GraphQL ASP.NET makes the following assumptions about your data when creating type expressions: +The following assumptions about your data are made when creating type expressions: -- Reference types **can be** null -- Value types **cannot be** null -- Nullable value types (e.g. `int?`) **can be** null -- When a reference type implements `IEnumerable` it will be expressed as a "list of `TType`" +✅ Reference types **can be** null
+✅ Value types **cannot be** null
+✅ Nullable value types (e.g. `int?`) **can be** null
+✅ When a reference type implements `IEnumerable` it will be expressed as a "list of `TType`" Type Expressions are commonly shown in the GraphQL schema syntax for field definitions. Here are a few examples of a .NET type and its equivalent type expression in schema syntax. @@ -51,12 +51,7 @@ Type Expressions are commonly shown in the GraphQL schema syntax for field defin ### Overriding Type Expressions -You may need to override the default behavior from time to time. For instance, a `string`, which is a reference type, is nullable by default but you may want to enforce nullability at the query level and declare that null is not a valid string. Or, perhaps, an object implements `IEnumerable` but you don't want graphql to treat it as a list. +You may need to override the default behavior from time to time. For instance, a `string`, which is a reference type, is nullable by default but you may want to enforce non-nullability at the query level and declare that null is not valid for a given argument. Or, perhaps, an object implements `IEnumerable` but you don't want graphql to treat it as a list. You can override the default type expression of any field or argument by defining a [custom type expression](../advanced/type-expressions) when needed. -## Runtime Type Validation - -When executing a query and resolving a field, should one of your action methods (or even your object properties) not return data conforming to the type expression that's defined for it, GraphQL will reject the data. The value is set to null and an error is registered in the response for the field in question. The runtime will not attempt to resolve any referenced child fields for a rejected value. - -If the rejected field does not allow nulls, the error is propagated up to its parent, which is then also set to null. If that parent field can't return a null value the error continues up the chain until it reaches a field that can be null or the entire field collection is nulled out. \[Spec § [6.4.4](https://graphql.github.io/graphql-spec/October2021/#sec-Errors-and-Non-Nullability)\] diff --git a/docusaurus.config.js b/docusaurus.config.js index b5b0060..40ef45a 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -68,7 +68,14 @@ const config = { alt: 'My Site Logo', src: 'img/logo-128.png', }, - items: [], + items: [ + { + to: 'https://github.com/graphql-aspnet/graphql-aspnet', + position: 'right', + className: 'header-github-link', + 'aria-label': 'GitHub repository', + } + ], }, footer: { links: [ diff --git a/src/css/custom.css b/src/css/custom.css index 7c0eb36..d7cff02 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -32,4 +32,50 @@ .theme-doc-sidebar-item-category-level-1 .menu__list-item-collapsible a:first-of-type { color: #a3a3a3; font-size: 1.1em; +} + +.header-github-link::before { + content: ''; + width: 24px; + height: 24px; + display: flex; + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat; + padding-right: 5px +} + +[data-theme='dark'] .header-github-link::before { + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat; +} + +.pill { + background-color: rgb(56, 73, 223); + border: none; + color: rgb(255, 255, 255); + padding: 5px 10px; + text-align: center; + text-decoration: none; + display: inline-block; + margin: 4px 2px; + border-radius: 8px; +} + + +.pill-small { + background-color: rgb(56, 73, 223); + border: none; + font-size: 14px; + color: rgb(255, 255, 255); + padding: 3px 5px; + text-align: center; + text-decoration: none; + display: inline-block; + margin: 4px 2px; + cursor: pointer; + border-radius: 3px; +} + +@media only screen and (min-device-width: 320px) and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2) { + .pill-header { + display: none; + } } \ No newline at end of file diff --git a/src/pages/index.js b/src/pages/index.js index ebca5d4..638a73f 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -13,8 +13,7 @@ function HomepageHeader() { return (

-

{siteConfig.title}

-

{siteConfig.tagline}

+

{siteConfig.title} .NET 6+

@@ -24,14 +23,10 @@ function HomepageHeader() { Documentation
-
+
); } From 284506204ff6b86fddab1cdb5fa4832177650fc6 Mon Sep 17 00:00:00 2001 From: Kevin Carroll Date: Sun, 8 Jan 2023 14:50:17 -0700 Subject: [PATCH 3/5] WIP, clarifications and added security file --- LICENSE | 2 +- SECURITY.md | 25 ++++++++++ docs/advanced/custom-scalars.md | 22 ++++----- docs/advanced/graph-action-results.md | 27 +++++++---- docs/advanced/multiple-schema.md | 49 +++++++++++--------- docs/advanced/subscriptions.md | 16 +++++-- docs/assets/2023-01-subscription-server.pdf | Bin 0 -> 74892 bytes docs/development/unit-testing.md | 2 +- docs/logging/standard-events.md | 14 ++++-- docs/logging/structured-logging.md | 6 +-- docs/logging/subscription-events.md | 6 +-- docs/quick/code-examples.md | 2 +- docusaurus.config.js | 12 ----- 13 files changed, 112 insertions(+), 71 deletions(-) create mode 100644 SECURITY.md create mode 100644 docs/assets/2023-01-subscription-server.pdf diff --git a/LICENSE b/LICENSE index 1960bc6..0574cd6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 GraphQL ASP.NET +Copyright (c) 2023 GraphQL ASP.NET Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..814b1b0 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,25 @@ +Thanks for helping make GraphQL ASP.NET safe for everyone. + +We take the security of our library seriously, including all of the open source code repositories managed through our GitHub organization. + +## Reporting Security Issues + +If you believe you have found a security vulnerability in any of our repositories, please report it to us through coordinated disclosure. + +Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests. + +Instead, please send an email to security@graphql-aspnet.org + +Please include as much of the information listed below as you can to help us better understand and resolve the issue: + + The type of issue (e.g., buffer overflow, SQL injection, or cross-site scripting) + Full paths of source file(s) related to the manifestation of the issue if known + The location of the affected source code (tag/branch/commit or direct URL) + Any special configuration required to reproduce the issue + Step-by-step instructions to reproduce the issue + Proof-of-concept or exploit code (if possible) + Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +Thank you! \ No newline at end of file diff --git a/docs/advanced/custom-scalars.md b/docs/advanced/custom-scalars.md index 4d912a9..8ecc3a8 100644 --- a/docs/advanced/custom-scalars.md +++ b/docs/advanced/custom-scalars.md @@ -5,13 +5,13 @@ sidebar_label: Custom Scalars sidebar_position: 3 --- -Scalars are the most basic, fundamental unit of content in GraphQL. It is one of two leaf types (the other being [ENUMS](../types/enums)). When a query is resolved the returned data will be a set of nested key/value pairs where every key is a string and every value is either another set of key/value pairs, an enum or a scalar. +Scalars are the most basic, fundamental unit of content in GraphQL. It is one of two leaf types (the other being [enums](../types/enums)). Enums, being a type of their own, are very straight forward in .NET. Scalars, however; can be anything. For instance, the `Uri` scalar is represented in GraphQL by a string. On the server though, we convert it into a `System.Uri` object, with all the extra features that go along with it. -This can be done for any value that can be represented as a simple set of characters. When you create a scalar you declare its .NET type, provide a value resolver that accepts raw data from a query (a `ReadOnlySpan`) and returns the completed scalar value. +This can be done for any value that can be represented as a simple set of characters. When you create a scalar you declare its .NET type, provide a value resolver that accepts raw data from a query (a `ReadOnlySpan`) and returns the instantiated scalar value. -Lets say we wanted to build a scalar called `Money` that can handle both an amount and currency symbol. We might accept it in a query like this: +Lets say we wanted to build a scalar called `Money` that can handle both an amount and currency symbol (e.g. "$23.45"). We might accept it in a query like this: ```csharp title="Declaring a Money Scalar" public class InventoryController : GraphController @@ -84,8 +84,8 @@ public interface ILeafValueResolver ### IScalarGraphType Members -- `Name`: The name of this scalar in GraphQL. This is the name that will be displayed in introspection queries. -- `InternalName`: An alternative name representing the scalar in server side code. This name is commonly used in logging messages and exceptions to identify the scalar in terms of the server. Its common to use the fully qualified name, i.e. `"MyNameSpace.Money"`. +- `Name`: The unique name of this scalar. This name must be used when declaring a variable. +- `InternalName`: An alternate name representing the scalar in server side code. This name is commonly used in logging messages and exceptions to identify the scalar in terms of the server definitions. Its common to use the fully qualified name, i.e. `"MyNameSpace.Money"`. - `Description`: The phrase that will used to describe the scalar in introspection queries. - `Kind`: Scalars must always be declared as `TypeKind.SCALAR`. - `Publish`: Indicates if the scalar should be published for introspection queries. Unless there is a very strong reason not to, scalars should always be published. Set this value to `true`. @@ -95,16 +95,16 @@ public interface ILeafValueResolver - `OtherKnownTypes`: A collection of other potential types that could be used to represent the scalar in a controller class. For instance, integers can be expressed as `int` or `int?`. Most scalars will provide an empty list (e.g. `TypeCollection.Empty`). - `SourceResolver`: An object that implements `ILeafValueResolver` which can convert raw input data into the scalar's primary `ObjectType`. - `Serialize(object)`: A method that converts an instance of your scalar to a leaf value that is serializable in a query response - - This method must return a `number`, `string`, `bool` or `null`. - - When converting to a number this can be any C# number value type (int, float, decimal etc.). + - This method **must** return a `number`, `string`, `bool` or `null`. + - When converting to a number this method can return any C# number value type (int, float, decimal etc.). - `SerializeToQueryLanguage(object)`: A method that converts an instance of your scalar to a string representing it if it were declared as part of a schema language type definition. - This method is used when generated default values for field arguments and input object fields via introspection queries. - This method must return a value exactly as it would appear in a schema type definition For example, strings must be surrounded by quotes. -- `ValidateObject(object)`: A method used when validating data returned from a a field resolver. GraphQL will call this method and provide an object instance to determine if its acceptable and can be used in a query result. +- `ValidateObject(object)`: A method used when validating data received from a a field resolver. GraphQL will call this method and provide an object instance to determine if its acceptable and can be used in a query result. :::note - `ValidateObject(object)` should not attempt to enforce nullability rules. In general, all scalars "could be null" depending on their usage in a schema. All scalars should return `true` for a validation result if the provided object is `null`. + `ValidateObject(object)` should not attempt to enforce nullability rules. In general, all scalars "could be null" depending on their usage in a schema. All scalars should return `true` for a validation result if the provided object is `null`. A field's type expression, enforced by graphql, will decide if null is acceptable on an individual field. ::: ### ILeafValueResolver @@ -223,7 +223,7 @@ services.AddGraphQL(); ``` :::info -Since our scalar is represented by a .NET class, if we don't pre-register it GraphQL will attempt to parse the `Money` class as an input object graph type. Once registered as a scalar, any attempt to use `Money` as an object graph type will cause an exception. +Since our scalar is represented by a .NET class, if we don't pre-register it, GraphQL will attempt to parse the `Money` class as an input object graph type. Once registered as a scalar, any attempt to use `Money` as an object graph type will cause an exception. ::: ## @specifiedBy Directive @@ -278,7 +278,7 @@ A few points about designing your scalar: - Scalar types should be simple and work in isolation. - The `ReadOnlySpan` provided to `ILeafValueResolver.Resolve` should be all the data needed to generate a value, there should be no need to perform side effects or fetch additional data. - Scalar types should not track any state, depend on any stateful objects, or attempt to use any sort of dependency injection. -- `ILeafValueResolver.Resolve` must be **FAST**! Since your resolver is used to construct an initial query plan from the raw query text, it'll be called many orders of magnitude more often than any other method. +- `ILeafValueResolver.Resolve` must be **FAST**! Since your resolver is used to construct an initial query plan from the raw query text, it'll be called many orders of magnitude more often than any other method. Taking the time and performing various micro-optimizations are appropriate for this method. ### Aim for Fewer Scalars diff --git a/docs/advanced/graph-action-results.md b/docs/advanced/graph-action-results.md index 14e95af..95ff0db 100644 --- a/docs/advanced/graph-action-results.md +++ b/docs/advanced/graph-action-results.md @@ -18,8 +18,10 @@ public class BakeryController : Controller Donut donut = null; // ... + // highlight-start // return the donut and indicate success - return this.Ok(donut); + return this.Ok(donut); + // highlight-end } } ``` @@ -33,13 +35,15 @@ public class BakeryController : Controller Donut donut = null; // ... - // return the donut directly! + // highlight-start + // return the donut directly! return donut; + // highlight-end } } ``` -You can either return the data itself or some alternate `IActionResult` to tell ASP.NET how to render a response. +> You can either return the data itself or some alternate `IActionResult` to tell ASP.NET how to render a response. Some common ASP.NET action results: @@ -48,7 +52,7 @@ Some common ASP.NET action results: - `this.File()`: Return status 200 and stream the file to the client. - `this.View()`: Render a razor view and send the HTML to the client. -This works the same way in GraphQL ASP.NET. The available actions are slightly different (GraphQL won't stream files) but the usage is the same. You can even write your own action results. +This works the same way in GraphQL ASP.NET. The available actions are slightly different (e.g. GraphQL won't stream files) but the usage is the same. You can even write your own action results. ## Controller Action Results @@ -57,10 +61,10 @@ Instead of `IActionResult` we use `IGraphActionResult` from a controller action Built in Controller Action Methods: - `this.Ok(fieldValue)` : Return _fieldValue_ as the resolved value of the field and indicate to the runtime that everything completed successfully. -- `this.Error(message)`: Indicates a problem. Child fields are not processed and an error message with the given text and error code is added to the response payload. +- `this.Error(message)`: Indicates a problem. The field will resolve to a `null` value automatically. Child fields are not processed and an error message with the given text and error code is added to the response payload. - `this.StartBatch()` : Initiates the start a of a new batch. See [batch operations](../controllers/batch-operations.md) for details. -- `this.Unauthorized()`: Indicate the user is not authorized to request the field. A message telling them as such will be added to the result and no child fields will be processed. The field will be returned a `null` value automatically. This is sometimes necessary for data-level validation that can't be readily determined from an `[Authorize]` attribute or query level validation. -- `this.BadRequest()`: Commonly used in conjunction with `this.ModelState`. This result indicates the data supplied to the method is not valid for the operation. If given the model state collection an error for each validation error is rendered. +- `this.Unauthorized()`: Indicate the user is not authorized to request the field. A message telling them as such will be added to the result and no child fields will be processed. The field will resolve to a `null` value automatically. This is sometimes necessary for data-level validation that can't be readily determined from an `[Authorize]` attribute or query level validation. +- `this.BadRequest()`: Commonly used in conjunction with `this.ModelState`. This result indicates the data supplied to the method is not valid for the operation. If given a model state collection, an error for each validation error is rendered. - `this.InternalServerError()`: Indicates an unintended error, such as an exception occurred. The supplied message will be added to the response and no child fields will be resolved. ### Directive Action Results @@ -108,7 +112,7 @@ To create a custom result, implement `IGraphActionResult`, which defines a singl ```csharp title="IGraphActionResult.cs" public interface IGraphActionResult { - Task Complete(ResolutionContext context); + Task CompleteAsync(ResolutionContext context); } ``` @@ -134,17 +138,20 @@ Looking at the `UnauthorizedGraphActionResult` is a great example of how to impl _errorCode = errorCode ?? Constants.ErrorCodes.ACCESS_DENIED; } - public Task Complete(ResolutionContext context) + public Task CompleteAsync(ResolutionContext context) { + // add an error message to the response context.Messages.Critical( _errorMessage, _errorCode, context.Request.Origin); + // instruct graphql to stop processing this field + // and its children context.Cancel(); return Task.CompletedTask; } } ``` -The result takes in an optional error message and code, providing defaults if not supplied. Then on `Complete` it adds the message to the context and cancels its execution. +The result takes in an optional error message and code, providing defaults if not supplied. Then on `CompleteAsync` it adds the message to the context and cancels its execution. diff --git a/docs/advanced/multiple-schema.md b/docs/advanced/multiple-schema.md index 88bbd72..f49106d 100644 --- a/docs/advanced/multiple-schema.md +++ b/docs/advanced/multiple-schema.md @@ -12,6 +12,7 @@ GraphQL ASP.NET supports multiple schemas on the same server out of the box. Eac To register multiple schemas you'll need to create your own class that implements `ISchema`. While it is possible to implement `ISchema` directly, if you don't require any extra functionality in your schema its easier to just inherit from the default `GraphSchema`. Updating the `Name` and `Description` is highly encouraged as the information is referenced in several different messages and can be very helpful in debugging. ```csharp title="Declaring Custom Schemas" +// highlight-next-line public class EmployeeSchema : GraphSchema { // The schema name may be referenced in some error messages @@ -19,16 +20,17 @@ public class EmployeeSchema : GraphSchema public override string Name => "Employee Schema"; // The description is publically available via introspection queries. - public override string Description => "My Custom Schema"; + public override string Description => "Employee Related Data"; } +// highlight-next-line public class CustomerSchema : GraphSchema { public override string Name => "Customer Schema"; + public override string Description => "Customer Related Data"; } ``` - > Implementing `ISchema` and its dependencies from scratch is not a trivial task and is beyond the scope of this documentation. @@ -36,30 +38,35 @@ public class CustomerSchema : GraphSchema Each schema can be registered using an overload of `.AddGraphQL()` during startup. -```csharp title="Adding A Custom Schema at Startup" -services.AddGraphQL(); -``` +By default, the query handler will attempt to register a schema to `/graphql` as its URL. You'll want to ensure that each schema has its own endpoint by updating individual routes as necessary. + +```csharp title="Adding Multiple Schemas" +var builder = WebApplication.CreateBuilder(args); + +builder.Services.AddGraphQL((options) => +{ + // highlight-next-line + options.QueryHandler.Route = "/graphql_employees"; + // add assembly or graph type references here +}); -### Give Each Schema its Own HTTP Route +builder.Services.AddGraphQL((options) => +{ + // highlight-next-line + options.QueryHandler.Route = "/graphql_customers"; + // add assembly or graph type references here +}); -The query handler will attempt to register a schema to `/graphql` as its URL by default; you'll want to ensure that each schema has its own endpoint by updating the individual routes. +var app = builder.Build(); -```csharp title="Adding Multiple Schemas" -services.AddGraphQL((options) => - { - // highlight-next-line - options.QueryHandler.Route = "/graphql_employees"; - // add assembly or graph type references here - }); - -services.AddGraphQL((options) => - { - // highlight-next-line - options.QueryHandler.Route = "/graphql_customers"; - // add assembly or graph type references here - }); +// highlight-next-line +app.UseGraphQL(); +app.Run(); ``` +:::note +Each schema **must** be configured to use its own endpoint. +::: ## Disable Local Graph Entity Registration diff --git a/docs/advanced/subscriptions.md b/docs/advanced/subscriptions.md index c5f9156..9f099f9 100644 --- a/docs/advanced/subscriptions.md +++ b/docs/advanced/subscriptions.md @@ -184,7 +184,7 @@ Ok no problem, just scale horizontally, right? Spin up additional server instanc With the examples above, events published by any mutation using `PublishSubscriptionEvent()` are routed internally, directly to the local subscription server meaning only those clients connected to the server instance where the event was raised will receive it. Clients connected to other server instances will never know the event occured. This represents a big problem for large scale websites, so what do we do? -[This diagram](../assets/2022-10-subscription-server.pdf) shows a high level difference between the default, single server configuration and a custom scalable solution. +> [This diagram](../assets/2023-01-subscription-server.pdf) shows a high level difference between the default, single server configuration and a custom scalable solution. ### Custom Event Publishing @@ -383,14 +383,14 @@ services.AddGraphQL() ``` :::note -The max receiver count can easily be set in the 1000s. There is no magic bullet as to an appropriate value. It all depends on the number of events you are expecting, the number of subscribers and the workload of each event in your application. +The max receiver count can easily be set in the 1000s or higher. There is no magic bullet in choosing an appropriate value. It all depends on the number of events you are expecting, the number of subscribers, the workload of each event and the hardware available to your application. ::: ### Event Multiplication Think carefully about your production scenarios when you introduce subscriptions into your application. As mentioned above, for each event raised, each subscription monitoring that event must execute a standard graphql query, with the supplied event data, to generate a result and send it to its connected client. -If, for instance, you have `200 clients` connected to a single server, each with `3 subscriptions` against the same field, thats `600 individual queries` that must be executed to process a single event completely. Even if you call `SkipSubscriptionEvent` to drop the event and send no send data to a client, the query must still be executed to determine if the subscriber is not interested in the data. If you execute any database operations in your `[Subcription]` method, its going to be run 600 times. Suppose your server receives 5 mutations in rapid succession, all of which raise the event, thats a spike of `3,000 queries`, instantaneously, that the server must process. +If, for instance, you have `200 clients` connected to a single server, each with a subscription against the same field, thats `200 individual queries` that must be executed to process a _single event_ completely. Even if you call `SkipSubscriptionEvent` to drop the event and send no send data to a client, the query must still be executed to determine if the subscriber is not interested in the data. If you execute any database operations in your `[Subcription]` method, its going to be run 200 times. Suppose your server receives 5 mutations in rapid succession, all of which raise the event, thats a spike of `1,000 queries`, instantaneously, that the server must process. Balancing the load can be difficult. Luckily there are some [throttling levers](/docs/reference/global-configuration#subscriptions) you can adjust. @@ -446,4 +446,12 @@ services.AddGraphQL() :::tip Consider using the built in `SubscriptionClientDispatchQueueAlertSettings` object for a standard implementation of the required interface. -::: \ No newline at end of file +::: + +## General Tips + +✅ **DO** exit a subscription with `this.SkipSubscriptionEvent()` as soon as possible.
+ +✅ **DO** secure your business objects. Subscriptions will receive every event raised against the field they are subscribed to, regardless of the data.
+ +🧨 **DON'T** rely on database queries or other IO to determine if an event should be skipped. diff --git a/docs/assets/2023-01-subscription-server.pdf b/docs/assets/2023-01-subscription-server.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f8931ee24104573fb27cfe94cb71cab65edd30b4 GIT binary patch literal 74892 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
  • cK~GV}fBpgHqdfZX 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

    9KK4%VLx`LwJRcgIQ#CFnkQXTey4!<4Nli(>J5 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 l$fJ^j7n$=BIR6` can be found in the `graphql-aspnet-testframework` project of the primary repo and is dependent on `Moq`. As its part of the core library solution you'll want to remove the project reference to `graphql-aspnet` project and instead add a reference to the nuget package. diff --git a/docs/logging/standard-events.md b/docs/logging/standard-events.md index 37525b2..0deb8fe 100644 --- a/docs/logging/standard-events.md +++ b/docs/logging/standard-events.md @@ -7,19 +7,25 @@ sidebar_position: 1 GraphQL ASP.NET tracks many standard events. Most of these are recorded during the execution of a query. Some, such as those around field resolution, can be recorded many times in the course of a single request. -_**Common Event Properties**_ +## Common Event Properties -All events share a common set of properties inherited from `GraphLogEntry`. +All logging events share a common set of properties. | Property | Description | | ------------- | -------------------------------------------------------- | | _EventId_ | The numeric constant assigned to the event. | | _EventName_ | The human-friendly name of the event. | +| _LogEntryId_ | A guid unique to the given log entry. | +| _Message_ | A simple text message. | | _DateTimeUTC_ | A date and time, in UTC-0, when the event was _created_. | -_Constants for event names and ids can be found at_ `GraphQL.AspNet.Logging.LogEventIds` +> Constants for `EventIds` can be found at `GraphQL.AspNet.Logging.LogEventIds` -_Constants for all log entry properties can be found at_ `GraphQL.AspNet.Logging.LogPropertyNames` +> Constants for all built in log entry properties can be found at `GraphQL.AspNet.Logging.LogPropertyNames` + +:::tip Scope Id +Another common, but not universal, property is `ScopeId`. Any log entries related to the execution of a single query will have a common scope id. In general, this id is unique per HTTP request. +::: ## Schema Level Events diff --git a/docs/logging/structured-logging.md b/docs/logging/structured-logging.md index a3e198c..ce6f5cf 100644 --- a/docs/logging/structured-logging.md +++ b/docs/logging/structured-logging.md @@ -133,7 +133,7 @@ Here we've used a custom `ILogProvider` and written out a small sample of events [{ "eventId": 86000, "eventName": "GraphQL Request Received", - "dateTimeUTC": "2019-09-23T22:05:39.6023597+00:00", + "dateTimeUTC": "2022-09-23T22:05:39.6023597+00:00", "logEntryId": "6afdf3d1f9464679becfbd2b96aa594f", "operationRequestId": "a13f5f7232dc475783c4e4798cfb50d2", "userName": "john-doe", @@ -144,7 +144,7 @@ Here we've used a custom `ILogProvider` and written out a small sample of events { "eventId": 86400, "eventName": "GraphQL Query Plan Generated", - "dateTimeUTC": "2019-09-23T22:05:39.7214431+00:00", + "dateTimeUTC": "2022-09-23T22:05:39.7214431+00:00", "logEntryId": "d133e032e2fc42a98a639ee8c72d2497", "schemaType": "GraphQL.AspNet.Schemas.GraphSchema", "isValid": true, @@ -158,7 +158,7 @@ Here we've used a custom `ILogProvider` and written out a small sample of events "eventId": 86599, "eventName": "GraphQL Field Resolution Completed", "path": "[type]/Human/Id", - "dateTimeUTC": "2019-09-23T22:05:39.8528847+00:00", + "dateTimeUTC": "2022-09-23T22:05:39.8528847+00:00", "logEntryId": "750ee155bf7e4eea895e5eec01d3fb6d", "pipelineRequestId": "aa670d3e2d6a41e1b314711acf6bc51c", "typeExpression": "ID!", diff --git a/docs/logging/subscription-events.md b/docs/logging/subscription-events.md index 84d3184..4aa906a 100644 --- a/docs/logging/subscription-events.md +++ b/docs/logging/subscription-events.md @@ -5,11 +5,11 @@ sidebar_label: Subscription Events sidebar_position: 2 --- -GraphQL ASP.NET tracks some special events related to the management of subscriptions. They are outlined below. +GraphQL ASP.NET tracks some special events related to the management of [subscriptions](../advanced/subscriptions.md). They are outlined below. -_**Common Event Properties**_ +**Common Event Properties** -The [common event properties](./standard-events.md) outlined on the standard events page apply to all subscription events. +The common event properties outlined on the [standard events](./standard-events.md) page apply to all subscription events as well. ## Server Level Events diff --git a/docs/quick/code-examples.md b/docs/quick/code-examples.md index 85f7785..2cb0f8e 100644 --- a/docs/quick/code-examples.md +++ b/docs/quick/code-examples.md @@ -139,7 +139,7 @@ query { } ``` -## No Boilerplate Field Paths +## Field Paths We've used `[QueryRoot]` so far to force a controller action to be a root field on the `query` type. But we can use an approximation of Web API's url templates to create any combination of nested fields needed. When you have 50 controllers with 20-40 actions each, organizing your object hierarchy becomes trivial. diff --git a/docusaurus.config.js b/docusaurus.config.js index 40ef45a..e1a515e 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -123,18 +123,6 @@ const config = { ` }, - { - html: ` - - Learn ASP.NET - - ` - }, ], }, ], From 1de46b342d2368817e28326ce730cc4ab75fab11 Mon Sep 17 00:00:00 2001 From: Kevin Carroll Date: Sat, 14 Jan 2023 08:09:35 -0700 Subject: [PATCH 4/5] WIP, more updates and highlights --- docs/assets/ef-core-error.png | Bin 87202 -> 90214 bytes docs/controllers/batch-operations.md | 18 ++++++------ docs/controllers/model-state.md | 8 +++--- docs/controllers/type-extensions.md | 22 +++++++------- docs/development/entity-framework.md | 24 +++++++++++----- docs/introduction/what-is-graphql.md | 11 +++---- docs/quick/code-examples.md | 23 +++++++++------ docs/quick/overview.md | 4 +-- docs/reference/graph-controller.md | 33 +++++++++++++++++---- docs/reference/graph-directive.md | 26 ++++++++++++++++- docs/types/enums.md | 41 ++++++++++++++++++++++++--- docs/types/unions.md | 19 +++++++------ 12 files changed, 162 insertions(+), 67 deletions(-) diff --git a/docs/assets/ef-core-error.png b/docs/assets/ef-core-error.png index 0ba629ba87d489b600fb36d03211f1aa3649f8e1..bf27ed208f80eee9f443b1c79cdca711ecd7b049 100644 GIT binary patch literal 90214 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%0DoD;%O>bu_E$TU*@G!jTFnpo$L(A{Pxk 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

    sA+34RC&@2vlLEut+VvRQOuB@fw8ApUK+Ie( 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 a|4=G&Sadx{S~))geq<#TCCc6#`u%^|BBVF~ literal 87202 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 diff --git a/docs/controllers/batch-operations.md b/docs/controllers/batch-operations.md index f7a8e86..a39a13d 100644 --- a/docs/controllers/batch-operations.md +++ b/docs/controllers/batch-operations.md @@ -29,7 +29,7 @@ public class BakedGoodsCompanyController : GraphController public async Task> RetrieveBakeries(Regions region = Regions.All) {/*...*/} - // declare the type extension as a controller action. + // retrieve the cake orders for a single bakery [TypeExtension(typeof(Bakery), "orders")] public async Task> RetrieveCakeOrders(Bakery bakery, int limitTo = 15){ @@ -56,7 +56,7 @@ Well that was easy, right? Not so fast! This is the N+1 problem. `1 query` for the bakeries + `N queries` for the cake orders, where N is the number of bakeries first retrieved. -If only we could batch the cake orders request and fetch all the orders for all the bakeries at once, then assign the `Cake Orders` back to their respective bakeries, we'd be a lot better off. No matter the number of bakeries retrieved, we'd execute 2 queries; 1 for `bakeries` and 1 for `orders`.This is where batch extensions come in to play. +If only we could batch the request and fetch all the cake orders for all the bakeries at once, then assign the `Cake Orders` back to their respective bakeries, we'd be a lot better off. No matter the number of bakeries retrieved, we'd execute 2 queries; 1 for `bakeries` and 1 for `orders`.This is where batch extensions come in to play. ## \[BatchTypeExtension\] Attribute @@ -100,13 +100,13 @@ The contents of your extension method is going to vary widely from use case to u ## Data Loaders -You'll often hear the term `Data Loaders` when reading about GraphQL implementations. Methods that load the child data being requested as a single operation before assigning to each of the parents. There is no difference with GraphQL ASP.NET. You still have to write that method. But with the ability to capture action method parameters and clever use of an `IGraphActionResult` we can combine the data load phase with the assignment phase into a single batch operation, at least on the surface. The aim is to make it easy to read and easier to write. +You'll often hear the term `Data Loaders` when reading about GraphQL implementations. Methods that load the child data being requested as a single operation before assigning that data to each of the parents. There is no difference with GraphQL ASP.NET. You still have to write that method. But with the ability to capture action method parameters and clever use of an `IGraphActionResult` we can combine the data load phase with the assignment phase into a single batch operation, at least on the surface. The aim is to make it easy to read and easier to write. ## Returning Data `this.StartBatch()` returns a builder to define how you want GraphQL to construct your batch. We need to tell it how each of the child items we fetched maps to the parents that were supplied (if at all). -In the example we matched on a bakery's primary key selecting `Bakery.Id` from each of the source items and pairing it against `CakeOrder.BakeryId` from each of the results. This is enough information for the builder to generate a valid result. Depending on the contents of your data and the type expression of your extension there are few scenarios that emerge: +In the example, we matched on a bakery's primary key selecting `Bakery.Id` from each of the source items and pairing it against `CakeOrder.BakeryId` from each of the results. This is enough information for the builder to generate a valid result. Depending on the contents of your data and the type expression of your extension there are few scenarios that emerge: **1 Source -> 1 Result** @@ -114,7 +114,7 @@ If you've defined your extension field to be a single item (i.e. `CakeOrder` ins **1 Source -> N Results** -If you've defined your extension to return a collection of children, like in the example, then GraphQL will generate an array of 0 or more children for every parent included in the batch. +If you've defined your extension to return a collection of items, like in the example, then GraphQL will generate an array of 0 or more children for every parent included in the batch. **N Sources -> N Results** @@ -122,7 +122,7 @@ To GraphQL, many to many relationships are treated the same as one to many. Inte **1 Source -> No Results** -For sibling relationships there are only two options; either the data exists and a value is returned or it doesn't and `null` is returned. But with parent/child relationships, sometimes you want to indicate that no results were _included_ for a parent item and sometimes you want to indicate that no results _exist_. This could be represented as being an empty array vs `null`. When working with children, for every parent supplied to `this.StartBatch`, GraphQL will generate a field result of **at least** an empty array. To indicate a parent item should receive `null` instead of `[]` exclude it from the batch. +For 1:1 results there are only two options; either the data exists and a value is returned or it doesn't and `null` is returned. But with 1:N relationships, sometimes you want to indicate that no results were _included_ for a parent item and sometimes you want to indicate that no results _exist_. This could be represented as being an empty array vs. `null`. When working with children, for every parent supplied to `this.StartBatch`, GraphQL will generate a field result of **at least** an empty array. To indicate a parent item should receive `null` instead of `[]` exclude it from the batch. Note that it is your method's responsibility to be compliant with the type expression of the field. If a field is marked as `NON_NULL` and you exclude the parent item from the batch (resulting in a null result for the field for that item) the field will be marked invalid and register an error. @@ -134,11 +134,11 @@ Excluding a source item from `this.StartBatch()` will result in it receiving `n Using `this.StartBatch` is the preferred way of returning data from a batch extension but there is a small amount of overhead to it. It has to join two separate lists of data on a common key, which could take a few extra cycles for large data sets. -Another option would be to generate the same result yourself while you're generating your data set. Once its all said and done, `this.StartBatch()` creates an `IDictionary` where `TSource` is a parent object and `TValue` is either a single child or an `IEnumerable` depending on the type definition of your field. A batch extension is the only operation that will accept a return type of `IDictionary`. +Another option would be to generate the same result yourself while you're generating your data set. Once its all said and done, `this.StartBatch()` creates an `IDictionary` where `TSource` is a parent object and `TValue` is either a single child or an `IEnumerable` depending on the type expression of your field. A batch extension is the only operation that will accept a return type of `IDictionary`. -> When returning `IDictionary`, the key **MUST** be the original object reference supplied to the the extension method, not a copy. +> When returning `IDictionary`, the key **MUST BE** the original object reference supplied to the the extension method, not a copy. -This is the above batch operation reconfigured to a custom dictionary. Note that when we use an `IDictionary` return type, GraphQL is able to infer our field data type and an explicit declaration is no longer needed on the attribute. +This is the example above reconfigured to a custom dictionary. Note that when we use an `IDictionary` return type, GraphQL is able to infer our field data type and an explicit declaration is no longer needed on the attribute. ```csharp title="Using a Custom Dictionary" public class BakedGoodsCompanyController : GraphController diff --git a/docs/controllers/model-state.md b/docs/controllers/model-state.md index 7d02074..df62376 100644 --- a/docs/controllers/model-state.md +++ b/docs/controllers/model-state.md @@ -9,15 +9,15 @@ GraphQL, as a language, can easily enforce query level requirements like : ✅ The data must a collection.
    ✅ The data value cannot be null.
    -✅ The argument 'zipCode' must be supplied. +✅ The argument 'zipCode' must be supplied as a string.
    But it fails to enforce the individual business requirements of application: -🧨 Is the employee's last name less than 70 characters?
    -🧨 Is the customer's phone number 7 or 10 digits?
    -🧨 Is the number of donuts ordered at least 1? +🧨 The employee's last name must be less than 70 characters.
    +🧨 A customer's phone number should be 7 or 10 digits.
    +🧨 A customer must order at least 1 donut. ## Using Model Validation diff --git a/docs/controllers/type-extensions.md b/docs/controllers/type-extensions.md index 2bca595..41a9ec5 100644 --- a/docs/controllers/type-extensions.md +++ b/docs/controllers/type-extensions.md @@ -6,6 +6,7 @@ sidebar_position: 4 --- ## Working with Child Data +_The Motiviation for using Type Extensions_ Before we dive into type extensions we have to talk about parent-child relationships. So far, the examples we've seen have used well defined fields in an object graph. Be that an action method on a controller or a property on an object. But when we think about real world data, there are scenarios where that poses a problem. Lets suppose for a moment we have a chain of bakery stores that let customers place orders for cakes at an individual store and customize the writing on the cake. @@ -39,7 +40,7 @@ Our application is going to slow to a crawl very quickly doing all this extra da One solution could be to use lazy loading on our model. -```csharp title="Lazy Loading Child Data" +```csharp title="Lazy Loading Child Data (Terrible!)" public class Bakery { @@ -67,9 +68,9 @@ Well that's just plain awful. We've over complicated our bakery model and made i ## The [TypeExtension] Attribute -We've talked before about GraphQL maintaining a 1:1 mapping between a field in the graph and a method to retrieve data for it (i.e. its assigned resolver). What prevents us from creating a method to fetch a list of Cake Orders and saying, "Hey, GraphQL! When someone asks for a set of bakery orders call a custom method instead of a property getter on the `Bakery` class. As it turns out, that is exactly what a `Type Extension` does. +We've talked before about GraphQL maintaining a 1:1 mapping between a field in the graph and a method to retrieve data for it (i.e. its assigned resolver). What prevents us from creating a method to fetch a list of Cake Orders and saying, "Hey, GraphQL! When someone asks for a set of bakery orders call a custom method instead of a property getter on the `Bakery` class." As it turns out, that is exactly what a `Type Extension` does. -```csharp title="Bakery Type Extension" +```csharp title="Using a Type Extension" public class Bakery { public int Id { get; set; } @@ -96,7 +97,7 @@ Much Cleaner!! There is a lot to unpack here, so lets step through it: - We've declared the `RetrieveBakery` method as a root field named `bakery` that allows us to fetch a single bakery. -- We've added a method named `RetrieveCakeOrders`, declared it as an _extension_ to the `Bakery` graph type and gave it a field name of `orders`. +- We've added a method named `RetrieveCakeOrders`, declared it as an _extension_ to the `Bakery` object and gave it a field name of `orders`. - The extension returns `List` as the type of data it generates. - The method takes in a `Bakery` instance (more on that in a second) as well as an integer, with a default value of `15`, to limit the number of orders to retrieve. @@ -122,13 +123,13 @@ Type Extensions allow you to attach new fields to a graph type without altering When we return a value from a property, an instance of an object must exist in order to supply that value. That is to say if you want the `Name` property of a bakery, you need a bakery instance to retrieve it from. The same is true for a `type extension` except that instead of calling a property getter on the instance, graphql hands the entire object to your method and lets you figure out what needs to happen to resolve the field. -GraphQL inspects the type being extended and finds a parameter on the method to match it. It captures that parameter, hides it from the object graph, and fills it with the result of the parent field, in this case the resolution of field `bakery(id: 5)`. Other parameters are not effected. +GraphQL inspects the type being extended and finds a parameter on the method to match it. It captures that parameter, hides it from the object graph, and fills it with the result of the parent field, in this case the resolution of field `bakery(id: 5)`. This is immensely scalable: ✅ There are no wasted cycles fetching `CakeOrders` unless the requestor specifically asks for them.
    ✅ We have full access to [type expression validation](../advanced/type-expressions) and [model validation](./model-state) for our other method parameters.
    -✅Since its a controller action we have full access to graph action results and can return `this.Ok()`, `this.Error()` etc. to give a rich developer experience.
    +✅Since its a controller action we have full access to graph action results and can return `this.Ok()`, `this.Error()` etc. to give a rich experience.
    ✅[Field Security](./authorization) and use of the `[Authorize]` attribute is also wired up for us.
    ✅The bakery model is greatly simplified. @@ -136,10 +137,9 @@ This is immensely scalable: Theoretically, yes. But take a moment and think about performance. For basic objects with few dozen properties which is faster: -- One database query to retrieve 24 columns of a single record then only use six in a data result. -- Six separate database queries, one for each column requested. +- _Option 1:_ One database query to retrieve 24 columns of a single record then only use six in a data result +- _Option 2:_ Six separate database queries, one for each column requested. -Type extensions shine in parent-child relationships when preloading data is a concern but be careful not to go isolating every graph field just to avoid retrieving data. Fetching a few extra bytes from a database is negligible compared to querying a database 20 individual times. Your REST APIs were already querying extra data and they were likely transmitting that data to the client. - -It comes down to your use case. There are times when it makes sense to seperate things using type extensions and times when preloading whole objects is better. For many applications, once you've deployed to production, the queries being executed are finite. Design your model objects and extensions to be performant in the ways your data is being requested, not in the ways it _could be_ requested. +Type extensions shine in parent-child relationships when preloading lots of data is a concern. But be careful not to isolate every graph field just to avoid retrieving extra data at all. Fetching a few extra bytes from a database is negligible compared to querying a database 20 individual times. Your REST APIs were already querying extra data and they were likely transmitting that data to the client. +It comes down to your use case. There are times when it makes sense to seperate things using type extensions and times when preloading whole objects is better. For many applications, once you've deployed to production, the queries being executed are finite. Design your model objects and extensions to be performant in the ways your data is being requested, not in the ways it _could be_ requested. \ No newline at end of file diff --git a/docs/development/entity-framework.md b/docs/development/entity-framework.md index 87332fa..d1bba4f 100644 --- a/docs/development/entity-framework.md +++ b/docs/development/entity-framework.md @@ -9,6 +9,7 @@ sidebar_position: 2 In a standard REST application we would register our `DbContext` like so: ```csharp title="Adding Entity Framework at Startup" +// highlight-next-line services.AddDbContext(o => { o.UseSqlServer(""); @@ -25,25 +26,29 @@ public class FoodController : GraphController public FoodController(AppDbContext context){/**/} [QueryRoot] + // highlight-next-line public IFood SearchMeat(string name){/**/} [QueryRoot] + // highlight-next-line public IFood SearchVeggies(string name){/**/} } ``` ```graphql title="Sample Query" query { + # highlight-next-line searchMeat(name: "steak*") { name } + # highlight-next-line searchVeggies(name: "green*") { name } } ``` -The `FoodController` contains two action methods both of which are requested. Since this is a query and not a mutation, both top-level action methods are executed in parallel. This can result in an exception being thrown : +The `FoodController` contains two action methods both of which are requested. Since this is a query and not a mutation, both top-level action methods are executed in parallel. This can result in an exception being thrown: ![Ef Core Error](../assets/ef-core-error.png) @@ -54,14 +59,17 @@ This is caused by graphql attempting to execute both controller actions simultan One way to correct this problem is to register your DbContext as a transient object. ```csharp title="Option 1: Register DbContext as Transient" -services.AddDbContext(o => +services.AddDbContext( + options => { - o.UseSqlServer(""); - }, ServiceLifetime.Transient); + options.UseSqlServer(""); + }, + // highlight-next-line + ServiceLifetime.Transient); ``` Now each invocation will get its own DbContext and the queries can execute in parallel without issue. -The tradeoff here is that you lose the singular scoped unit-of-work for the whole request granted by the shared context. +The tradeoff here is that you lose the singular scoped unit-of-work for the whole request granted by a shared context. If you have services registered to the DI container that make use of the DbContext you would want to register them as `Transient` as well lest one scoped service be created for the request trapping a single DbContext instance. Sometimes, however; this is unavoidable, especially with legacy code... @@ -71,11 +79,13 @@ Another option is to instruct graphql to execute its controller actions in seque ```csharp title="Option 2: Isolate GraphQL Controller Actions" services.AddGraphQL(o => { + // highlight-next-line o.ExecutionOptions.ResolverIsolation = ResolverIsolationOptions.ControllerActions; -} +}); ``` + This will instruct graphql to execute each encountered controller action one after the other. Your scoped `DbContext` would then be able to process the queries without issue. -The tradeoff with this method is an increase in processing time since the methods are called in sequence. All other field resolutions would be executed in parallel. +The tradeoff with this method is a slight increase in processing time since the methods are called in sequence. All other field resolutions would be executed in parallel. If your application has other resources or services that may have similar restrictions, it can be beneficial to isolate the other resolver types as well. You can add them to the ResolverIsolation configuration option as needed. diff --git a/docs/introduction/what-is-graphql.md b/docs/introduction/what-is-graphql.md index d64f58d..37d27b8 100644 --- a/docs/introduction/what-is-graphql.md +++ b/docs/introduction/what-is-graphql.md @@ -5,9 +5,9 @@ sidebar_label: What is GraphQL? sidebar_position: 0 --- -[GraphQL](https://graphql.org) is a query language originally created by [Facebook](https://facebook.com) in 2012 for their own internal use. It was eventually open-sourced and moved to its own foundation, the [GraphQL Foundation](https://foundation.graphql.org/), and hosted by the [Linux Foundation](https://www.linuxfoundation.org/). The query language provides an alternative to traditional REST queries that we all know and love in giving the requestor more control over what data to return. +[GraphQL](https://graphql.org) is a query language specification originally created by [Meta](https://facebook.com) for their own internal use. It was eventually open-sourced and moved to its own foundation, the [GraphQL Foundation](https://foundation.graphql.org/), and hosted by the [Linux Foundation](https://www.linuxfoundation.org/). The specification provides an alternative to traditional REST queries that we all know and love in giving the requestor more control over what data to return. -With REST someone may requst data by querying against a URL with the `GET` HTTP verb. It's up to the server to decide what fields to return. +With REST someone may requst data by querying against a URL with the `GET` HTTP verb. It's up to the server to decide what data to return. ```javascript title="Sample REST Query" //REST Request: @@ -25,6 +25,7 @@ GET https://www.the-rebel-alliance.site/directory/persons/1 But with GraphQL a user _describes_ the data they want in their request to the GraphQL server. ```graphql title="Sample GraphQL Query" +# GraphQL Request query { person(id: 1){ name @@ -33,7 +34,7 @@ query { } } -// Response +# Response { "data": { "person": { @@ -47,7 +48,7 @@ query { ## Is it Better than REST? -Nope! As with any choice in technology there are pros and cons. It comes down to what trade offs you're willing to accept. Using `GraphQL` or `REST` or `gRPC` or `Carrier Pigeon` for communicating between clients is never a cut and dry decision. Your team's needs are going to be different than others. To claim that GraphQL should replace REST would be short sighted. +Nope! As with any choice in technology there are pros and cons. It comes down to what trade offs you're willing to accept. Using `GraphQL` or `REST` or `gRPC` or `Carrier Pigeon` for communicating between systens is never a cut and dry decision. Your team's needs are going to be different than others. To claim that GraphQL should replace REST would be short sighted. One of the primary benefits of GraphQL is the requestor only gets the data they need. In the REST example above no choice was given for the JSON object that was generated All 4 fields were (and always will be) returned. In the second example notice that we specified only to return `name`, `department` and `favoriteSong`. We already know the `id` in this instance and returning isn't necessary. For two characters of data that's not a big deal, but if the the REST response included a detailed biography of the person, returning that amount of data when its not needed (such as on a search page) could hamper performance. The issue compounds itself when we start dealing with parent-child relationships and hundreds of rows of data. Being able to ignore a field could mean the difference between a 50KB result and a 50MB result. @@ -67,7 +68,7 @@ GraphQL is a query [language specification](https://spec.graphql.org/); a contra ## Why Choose GraphQL? -_`"Can we add one more thing?"`_ +> "Can we add one more thing?" - Product Managers Have you ever heard that in a stand-up meeting? Lets say your team is building a website to show a list of all the members of the rebel alliance. The original specs of a REST end point calls for the return of an object in the above example. Then, for the 2nd time this week, the product owner decided to make a change. "Hey, lets add everybody's direct manager's name to their employee card!", Karen said. The project manager sighs audibly, Dave rolls his eyes and now you have to make a code change to return the new field from the endpoint. diff --git a/docs/quick/code-examples.md b/docs/quick/code-examples.md index 2cb0f8e..bd102cf 100644 --- a/docs/quick/code-examples.md +++ b/docs/quick/code-examples.md @@ -5,11 +5,11 @@ sidebar_label: Code Examples sidebar_position: 2 --- -This page shows a quick introduction to some common scenarios and the C# code to support. +Below is a quick introduction to some common scenarios and the C# code to support them. ## Configuring Services -The library uses a standard "Add & Use" pattern for configuring services with your application. A route is added to the ASP.NET request pipeline when you call `.UseGraphQL()`. Place it as appropriate amongst any other configurations, routes, authorization etc. when you build your pipeline. +The library uses a standard "Add & Use" pattern for configuring services with your application. A route is added to the ASP.NET request pipeline to handle GET and POST requests when you call `.UseGraphQL()`. Place it as appropriate amongst any other configurations, routes, authorization etc. when you build your pipeline. ```csharp title="Program.cs" var builder = WebApplication.CreateBuilder(args); @@ -30,9 +30,12 @@ app.Run(); ## A Basic Controller -A simple controller to return data based on a string value. +A simple controller to return data based on a string value. + +>Notice we inherit from `GraphController` not the standard web api Controller. ```csharp title="HeroController.cs" +// highlight-next-line public class HeroController : GraphController { [QueryRoot] @@ -60,7 +63,7 @@ public class HeroController : GraphController } ``` -```graphql title="GraphQL Query" +```graphql title="Sample Query" query { hero(episode: "Empire") { name @@ -88,9 +91,9 @@ You can also implement your own `GraphNameFormatter` and alter the name formats ## Using an Interface -If your models share a common interface just return it from a controller action and the library will take care of the rest. +If your models share a common interface just return it from a controller action and the library will create the appropriate graph types for you. -> Don't forget to declare the object types that implement your interface or graphql won't know what resolvers to invoke at runtime. In this example, we've declared them inline but you can easily add them at startup to reduce the noise. +> Don't forget to declare the object types that implement your interface (e.g. Droid and Human) or the library won't know what resolvers to invoke at runtime. In this example, we've declared them inline but you can easily add them at startup to reduce the noise. ```csharp title="HeroController.cs" public class HeroController : GraphController @@ -180,12 +183,13 @@ query { ## Dependency Injection -At runtime, GraphQL invokes your graph controllers and injected services with the same dependency scope as the original HTTP Request. Add a service to a controller's constructor and it will be automatically resolved with its configured scope. +At runtime, GraphQL invokes your graph controllers and injected services with the same dependency scope as the original HTTP Request. Add a known service to a controller's constructor and it will be automatically resolved with its configured scope. ```cs title="PersonsController.cs" public class PersonsController : GraphController { private IPersonService _personService; + // highlight-next-line public PersonsController(IPersonService service) { _personService = service; @@ -251,7 +255,8 @@ query { #### ✅ Notes on Authorization - Your controller actions have full access to the same `ClaimsPrincipal` that you get with `this.User` on an web api controller. In fact, its the same object reference. -- Out of the box, the library performs authorization on a "per field" basis. This includes POCO object properties! If you have a piece of sensitive data attached to a property, say Birthday, on your Person model, then implement your own `IAuthorizeData` attribute and apply it to the property. Unauthorized user's won't be able to query for that field, even if they can access the controller that produced the object its attached or every other field on the object. +- Out of the box, the library performs authorization on a "per field" basis. This includes POCO object properties! If you have a piece of sensitive data attached to a property, say Birthday, on your Person model, you can apply a policy or role to it. Unauthorized user's won't be able to query for that field, even if they can access the controller that produced the object its attached or every other field on the object. + - _Note: You'll have to implement .NET's_ `IAuthorizeData` _interface on your own custom attribute, the_ `[Authorize]` _attribute provided by .NET does not allow targeting of properties._ - GraphQL obeys layered authorization requirements as well. Place an authorization attribute at the controller level and it'll be checked before any method level requirements. ## Mutations & Model State @@ -308,7 +313,7 @@ mutation { ``` :::info Did You Notice? -We used `Human` as an input argument **and** as the returned data object. The library will automatically generate the appropriate graph types for `OBJECT` and `INPUT_OBJECT` and add them to your schema when needed. +We used `Human` as an input argument **and** as the returned data object. The library will automatically generate the appropriate graph types for `INPUT_OBJECT` and `OBJECT`, respectively, add them to your schema when needed. ::: diff --git a/docs/quick/overview.md b/docs/quick/overview.md index 031d0bf..3dd8106 100644 --- a/docs/quick/overview.md +++ b/docs/quick/overview.md @@ -24,7 +24,7 @@ The library is available on [nuget](https://www.nuget.org/packages/GraphQL.AspNe ``` -👉 [Quick Start Guide](./create-app.md): Step by step instructions for configuring app services and writing your first controller. +👉 [Your First App](./create-app.md): Step by step instructions for configuring app services and writing your first controller. 👉 [Code Examples](./code-examples.md): A few code snippets if you just want the gist of things. @@ -37,7 +37,7 @@ These pages may be helpful in getting started with the library: -💡 [Controllers](../controllers/actions.md) : Everything you need to know about creating a `GraphController` and defining action methods. +💡 [Controllers & Actions](../controllers/actions.md) : Everything you need to know about creating a `GraphController` and defining action methods. 📜 [Attributes](../reference/attributes.md) : A reference list of the various `[Attributes]` used to configure your controllers and models. diff --git a/docs/reference/graph-controller.md b/docs/reference/graph-controller.md index 40d87f5..89287dd 100644 --- a/docs/reference/graph-controller.md +++ b/docs/reference/graph-controller.md @@ -5,7 +5,9 @@ sidebar_label: GraphController sidebar_position: 4 --- -The `GraphController`, from which all your controllers inherit, has some useful properties you can take advantage of. +✅ See the section on [Controllers & Actions](../controllers/actions.md) for a detailed explination on how action methods work and how to declare them. + +The `GraphController`, from which all of your controllers inherit, is a core object used throughout graphql. This page details some lesser known and lesser used object referenced made available to each controller. ## ModelState @@ -27,7 +29,7 @@ public class CharacterController : GraphController ``` ## Request -The field request that initiated the action method call +The field request generated via the execution pipeline. It contains all the necessary information used by graphql to resolve the current field. ```csharp public class CharacterController : GraphController @@ -43,20 +45,20 @@ public class CharacterController : GraphController } } ``` - -- `Request.Field`: Useful metadata related to the field being resolved. +### Notable Items on the Request +- `Request.Field`: A reference to the graph field definition, on the target schema, for the field currently being resolved. - `.TypeExpression`: The type expression describing the return value of this field - `.IsLeaf`: Indicates whether this field returns a leaf value (enum or scalar) or an object. - `.Mode`: Indicates the processing mode of this field (Batch or "per item") - - `.FieldSource`: Indicates what member type generated this field; property, method, action etc. + - `.FieldSource`: Indicates what member type generated the field; property, method, action etc. - `.DataSource`: The source data item being supplied to the field to be resolved. - `Request.Items`: A collection of key/value pairs accessible to all fields and directives in this individual request pipeline. ## User -The `ClaimsPrincipal` created by ASP.NET when this request was authorized. +The User property contains the `ClaimsPrincipal` created by ASP.NET when this request was authorized. ```csharp public class CharacterController : GraphController @@ -72,3 +74,22 @@ public class CharacterController : GraphController } } ``` + +> See the section on [authorization](../controllers/authorization.md) for more details on how users are authenticated and authorized to action methods. + +## Schema + +The `Schema` property contains a reference to the singleton instance of the schema the current controller is resolving a field for. This object is considered read-only and should not be modified. + +```csharp +public class CharacterController : GraphController +{ + [Query] + public IGraphActionResult Hero(Episode episode = Episode.EMPIRE) + { + // highlight-next-line + IObjectGraphType droidType = this.Schema.KnownTypes.FindGraphType(typeof(Droid), TypeKind.OBJECT); + // ... + } +} +``` diff --git a/docs/reference/graph-directive.md b/docs/reference/graph-directive.md index e26b28a..5dba280 100644 --- a/docs/reference/graph-directive.md +++ b/docs/reference/graph-directive.md @@ -4,8 +4,10 @@ title: Graph Directive sidebar_label: GraphDirective sidebar_position: 5 --- +✅ See the section on [Directives](../advanced/directives.md) for a detailed explination on how directive action methods work and how to declare them. + +The `GraphDirective`, from which all of your directives inherit, is a core object used throughout graphql. This page details some lesser known and lesser used object referenced made available to each directive. -These are some useful properties of a `GraphDirective` available to all life cycle methods at runtime. ## ModelState @@ -41,6 +43,8 @@ public class AllowDirective : GraphDirective } ``` +### Notable Items on the Request + - `Request.Directive`: Useful metadata related to the directive type being resolved. - `Request.LifeCycle`: The enumeration value indicating which life cycle point is being executed. - `Request.DirectiveLocation`: Indicates location in the query text this directive instance is currently being executed. @@ -63,3 +67,23 @@ public class MyCustomDirective : GraphDirective } } ``` + + +## Schema + +The `Schema` property contains a reference to the singleton instance of the schema the current controller is resolving a field for. This object is considered read-only and should not be modified. + +```csharp +public class AllowDirective : GraphDirective +{ + public IGraphActionResult BeforeResolution(FilterModel model) + { + // highlight-next-line + IObjectGraphType droidType = this.Schema.KnownTypes.FindGraphType(typeof(Droid), TypeKind.OBJECT); + // ... + } +} +``` +:::caution + For type system directives, executed as part of schema construction, the schema object available may be incomplete or null. Avoid using and do not rely on the data in `this.Schema` for type system directives. +::: \ No newline at end of file diff --git a/docs/types/enums.md b/docs/types/enums.md index 878b113..328e8d2 100644 --- a/docs/types/enums.md +++ b/docs/types/enums.md @@ -61,6 +61,35 @@ enum DonutType { } ``` +## Including an Enum in Your Schema + +An enum graph type is automatically created from a .NET enum if it is: + +* Used as a parameter to an action method +* Used as a return value of an action method +* Used as a parameter or return type of any property or method of any included class or struct. + +```csharp title="DonutController.cs" +public class DonutController : GraphController +{ + [QueryRoot] + // highlight-next-line + public int RetrieveDonutCount(DonutType donutType) + { + /* ... */ + } +} +``` + +You can also explicitly add an enum at start up: + +```csharp title="Startup code" +services.AddGraphQL(options => +{ + options.AddGraphType(); +}); +``` + ## Excluding an Enum Value Use the `[GraphSkip]` attribute to omit a value from the schema. A query will be rejected if it attempts to submit an omitted enum value. @@ -91,12 +120,12 @@ enum DonutType { ``` :::caution -An excluded enum value is not just hidden, its NOT part of the schema. Any attempt to use it as a value in a query will result in a validation error. +An excluded enum value is not just hidden, its NOT part of the schema. Any attempt to use it as a value in a query, a variable or as a result from a field resolution will cause a validation error. ::: ## Custom Type Name -Like with other graph types use the `[GraphType]` attribute to indicate a custom name for the enumeration in the graph. +Like with other graph types, use the `[GraphType]` attribute to indicate a custom name for the enum in the schema. ```csharp title="DonutType.cs" @@ -157,8 +186,10 @@ By default, enum values are rendered in all CAPITAL LETTERS. This is the standar ```csharp title="Startup Code" services.AddGraphQL(o => { - var customFormatter = = new GraphNameFormatter(enumValueStrategy: GraphNameFormatStrategy.ProperCase); + // highlight-start + var customFormatter = new GraphNameFormatter(enumValueStrategy: GraphNameFormatStrategy.ProperCase); o.DeclarationOptions.GraphNamingFormatter = customFormatter; + // highlight-end }) ``` @@ -170,4 +201,6 @@ enum DonutType { Jelly } ``` -> If you need something even more exotic, inherit from `GraphNameFormatter` and override the various methods as you see fit. +:::tip +If you need something even more exotic, inherit from `GraphNameFormatter` and override the various methods as you see fit. +::: \ No newline at end of file diff --git a/docs/types/unions.md b/docs/types/unions.md index d0f2a4d..75e8718 100644 --- a/docs/types/unions.md +++ b/docs/types/unions.md @@ -13,7 +13,7 @@ Unlike other graph types there is no concrete representation of unions. Where a You can declare a union in your action method using one of the many overloads to the query and mutation attributes: -```csharp title="Declaring a Union on an Action Method" +```csharp title="Declaring an 'inline' Union on an Action Method" public class DataController : GraphController { // highlight-next-line @@ -105,11 +105,13 @@ public class DataController : GraphController } } ``` -> Here we've added a custom type expression to tell GraphQL that this field returns a list of objects. GraphQL will then process each item on the enumeration according to the rules of the union. +> Here we've added a custom type expression to tell GraphQL that this field returns a list of objects. GraphQL will then process each item on the list according to the rules of the union. ## Union Proxies -In the example above, we declare the union inline on the query attribute. But what if we wanted to reuse the `SaladOrHouse` union in multiple places. You could declare the union exactly the same on each method or use a union proxy. Create a class that implements `IGraphUnionProxy` or inherits from `GraphUnionProxy` to encapsulate the details, then add that as a reference in your controller methods instead of the individual types. This can also be handy for uncluttering your code if you have a lot of possible types for the union. The return type of your method will still need to be `IGraphActionResult`. You cannot return a `IGraphUnionProxy` as a value. +In the example above, we declare the union inline on the query attribute. But what if we wanted to reuse the `SaladOrHouse` union in multiple places. You could declare the union exactly the same on each method or use a union proxy. + +Create a class that implements `IGraphUnionProxy` or inherits from `GraphUnionProxy` to encapsulate the details, then add that as a reference in your controller methods instead of the individual types. This can also be handy for uncluttering your code if you have a lot of possible types for the union. The return type of your method will still need to be `IGraphActionResult`. You cannot return a proxy as a value. ```csharp title="Example Using IGraphUnionProxy" public class KitchenController : GraphController @@ -124,7 +126,6 @@ public class KitchenController : GraphController public class SaladOrHouse : GraphUnionProxy { public SaladOrHouse() - : base() { this.Name = "SaladOrHouse"; this.AddType(typeof(Salad)); @@ -226,8 +227,10 @@ Luckily there is a way to allow you to take control of your unions and make the public class RollOrBread : GraphUnionProxy { public RollOrBread() - : base(typeof(Roll), typeof(Bread)) - {} + { + this.AddType(typeof(Roll)); + this.AddType(typeof(Bread)); + } // highlight-start public override Type MapType(Type runtimeObjectType) @@ -248,7 +251,5 @@ If, via your logic you are unable to determine which of your Union's types to us Most of the time GraphQL ASP.NET will never call `MapType` on your union proxy. If your union types do not share an inheritance chain, for instance, the method will never be called. :::caution - `MapType` is not based on a resolved value, but only on the `System.Type` that was encountered. This is by design to guarantee consistency in query execution. - - If your returned type causes the query to remain indeterminate a validation error (rule [6.4.3](https://spec.graphql.org/October2021/#sec-Value-Completion)) will be applied to the query. + The `MapType()` function is not based on a resolved value, but only on the `System.Type` that was encountered. This is by design to guarantee consistency in query execution. ::: From d72fb26b8dfb7414d47a7405d123cb33ed5a1a46 Mon Sep 17 00:00:00 2001 From: Kevin Carroll Date: Sun, 15 Jan 2023 09:54:17 -0700 Subject: [PATCH 5/5] WIP, more doc clarifications --- docs/controllers/actions.md | 6 +++--- docs/controllers/field-paths.md | 8 +++++--- docs/controllers/model-state.md | 18 ++++++++++++------ docs/quick/overview.md | 1 - 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/docs/controllers/actions.md b/docs/controllers/actions.md index 7215495..345400f 100644 --- a/docs/controllers/actions.md +++ b/docs/controllers/actions.md @@ -420,11 +420,11 @@ Action results for graph fields are not the same as REST action results. For Ex ## Method Parameters -GraphQL will inspect your method parameters and add the appropriate [`SCALAR`](../types/scalars), [`ENUM`](../types/enums) and [`INPUT_OBJECT`](../types/input-objects) graph types to your schema automatically. +Parameters on your action methods are interpreted as field arguments in your graph. GraphQL will inspect your method parameters and add the appropriate [`SCALAR`](../types/scalars), [`ENUM`](../types/enums) and [`INPUT_OBJECT`](../types/input-objects) graph types to your schema automatically. ### Naming your Input Arguments -By default, GraphQL will name a field' arguments the same as the parameter names in your method. Sometimes you'll want to override this, like when needing to use a C# keyword as an argument name. Use the `[FromGraphQL]` attribute on the parameter to accomplish this. +By default, GraphQL will name a field's arguments the same as the parameter names in your method. Sometimes you'll want to override this, like when needing to use a C# keyword as an argument name. Use the `[FromGraphQL]` attribute on the parameter to accomplish this. ```csharp title="Overriding a Default Argument Name" public class BakeryController : GraphController @@ -544,7 +544,7 @@ query { ### Working With Lists -When constructing a set of items as an argument to an action method, GraphQL will instantiate a `List` internally and fill it with the appropriate data; be that another list, another input object, a scalar etc. While you can declare an array (e.g. `Donut[]`, `int[]` etc.) as your list structure for an input argument, graphql has to rebuild its internal representation as an array (or nested arrays) to meet the requirements of your method. In some cases, especially with nested lists, this results in an `O(N)` increase in processing time. +When constructing a set of items as an argument to an action method, GraphQL will instantiate a `List` internally and fill it with the appropriate data; be that another list, another input object, a scalar etc. While you can declare an array (e.g. `Donut[]`, `int[]` etc.) as your list structure for an input argument, graphql has to rebuild its internal representation to meet the requirements of your method. In some cases, especially with nested lists, or combinations of lists and arrays, this results in an `O(N)` increase in processing time. :::tip Use `IEnumerable` or `IList` as your argument types to avoid a performance bottleneck when sending lots of items as input data. diff --git a/docs/controllers/field-paths.md b/docs/controllers/field-paths.md index 24f0c82..0349b1e 100644 --- a/docs/controllers/field-paths.md +++ b/docs/controllers/field-paths.md @@ -7,7 +7,9 @@ hide_title: true --- ## What is a Field Path? - GraphQL is statically typed. Each field in a query must always resolve to a single graph type known to the schema. In .NET terms that means each field must be represented by a method or property on some class or struct. Traditionally speaking, this can introduce a lot of overhead in defining intermediate types that do nothing but organize our data. + GraphQL is statically typed. All possible fields on all possible objects must be pre-defined and well-known in advance. This is what defines the schema of your graph. Along with this, each field must be "resolvable" in a known and consistant manner. If a user requests the `name` field of a donut, graphql must know what steps to take in order to generate a data value for that field. + + In .NET terms that means each field must be represented by a method or property on some class or struct. Traditionally speaking, this can introduce a lot of overhead in defining intermediate types that do nothing but organize our data. Let's think about this query: @@ -34,9 +36,9 @@ query { } ``` -Knowing what we know, you may think we need to create types for the grocery store, the bakery, pastries, a donut, the deli counter, meats, beef etc. in order to create properties and methods for all those fields. Its a lot of setup for what basically boils down to two methods to retrieve a donut and a cut of beef by their respective ids. +Knowing what we know, you may think we need to create classes for the grocery store, the bakery, pastries, a donut, the deli counter, meats, beef etc. in order to create properties and methods for all those fields. Its a lot of setup for what basically boils down to two methods to retrieve a donut and a cut of beef by their respective ids. Some other GraphQL libraries take this approach and it provides an extreme amount of customization at the cost of being rather verbose. -However, with GraphQL ASP.NET, using a templating pattern similar to what we do with REST controllers we can create rich graphs with very little boiler plate. Adding a new arm to your graph is as simple as defining a path to it in a controller. +GraphQL ASP.NET takes a different appraoch and uses a templating pattern similar to what we do with REST controllers we can create rich graphs with very little boiler plate. Adding a new branch to your graph is as simple as defining a path to it in a controller. ```csharp title="Sample Controller" // highlight-next-line diff --git a/docs/controllers/model-state.md b/docs/controllers/model-state.md index df62376..ff8d5a9 100644 --- a/docs/controllers/model-state.md +++ b/docs/controllers/model-state.md @@ -5,6 +5,8 @@ sidebar_label: Model State sidebar_position: 1 --- +## What is Model State? + GraphQL, as a language, can easily enforce query level requirements like : ✅ The data must a collection.
    @@ -13,15 +15,17 @@ GraphQL, as a language, can easily enforce query level requirements like :
    -But it fails to enforce the individual business requirements of application: +But it fails to enforce the individual business level requirements: 🧨 The employee's last name must be less than 70 characters.
    🧨 A customer's phone number should be 7 or 10 digits.
    🧨 A customer must order at least 1 donut. +This is where model state can come in handy. Its completely optional, but if you choose to make use of it, it provides a handy way to inforce business level requirements in your action methods. + ## Using Model Validation -When your controller action is invoked the runtime will analyze the input parameters and will execute the validation attributes attached to each object to determine its validations tate. This works just the same was as with a Web API controller. +When your controller action is invoked the runtime will analyze the input parameters and execute the validation attributes attached to each object to determine its validation state. This works in the same way as it does with a Web API controller. In this example we use the `[Range]` attribute to limit the quantity of donuts that can be ordered to three dozen. @@ -66,18 +70,20 @@ mutation { } ``` -Just like with ASP.NET, `this.ModelState` contains an entry for each "validatiable" object passed to the method and its current validation state (valid, invalid, skipped etc.) along with all the rules that did not pass. Also, just like with ASP.NET you can define custom attributes that inherit from `ValidationAttriubte` and GraphQL will execute them as well. +Just like with ASP.NET, `this.ModelState` contains an entry for each "validatiable" object passed to the method and its current validation state (valid, invalid, skipped etc.) along with all the rules that did not pass. Also, just like with ASP.NET you can define custom attributes that inherit from `ValidationAttribute` and GraphQL will execute them as well. In the example, we returned a IGraphActionResult to make use of `this.BadRequest()` which will add the friendly error messages to the outgoing response automatically. But we could have easily just returned null, thrown an exception or generated a generic custom error message. However you choose to deal with `ModelState` is up to you. :::tip -GraphQL will validate the data but it doesn't take action when model validation fails. That's up to you. If a valid query is provided your action method will be invoked. +GraphQL will validate the data but it doesn't take action when model validation fails. That's up to you. If a valid query is provided your action method will be invoked and executed. :::
    ⚠️ **Implementation Note** -GraphQL makes use of the same `System.ComponentModel.DataAnnotations.Validator` that ASP.NET does to validate its input objects. [All the applicable rules](https://learn.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-7.0) that apply to Web API model validation also apply to GraphQL. +The library makes use of the same `System.ComponentModel.DataAnnotations.Validator` that ASP.NET does to validate its input objects. [All the applicable rules](https://learn.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-7.0) that apply to Web API model validation also apply to your controllers and models. + +However, where Web API will validate model binding rules and represent binding errors it its ModelState object (such as invalid or missing property names) the GraphQL implementation will not. GraphQL binding issues such as invalid type expressions, nullability and missing arguments are taken care of at the query level, long before a query plan is finalized and the action method is invoked. In fact, your action methods won't even be invoked unless all the correct data was supplied and the query was properly structured. -However, where Web API will validate model binding rules and represent binding errors it its ModelState object (such as invalid or missing property names) GraphQL will not. GraphQL binding issues such as type expressions and nullability are taken care of at the query level, long before a query plan is finalized and the action method is invoked. The model state of GraphQL ASP.NET is a close approximation of Web API's model state object, but it is not an exact match. \ No newline at end of file +The model state of GraphQL ASP.NET is a close approximation of Web API's model state object, but it is not an exact match. \ No newline at end of file diff --git a/docs/quick/overview.md b/docs/quick/overview.md index 3dd8106..c6d29f1 100644 --- a/docs/quick/overview.md +++ b/docs/quick/overview.md @@ -6,7 +6,6 @@ sidebar_position: 0 description: A quick overview of how to use the library --- - Use the menus on the left to navigate through the documentation. You do not need to read the various sections in order, feel free to use this as a reference guide as you dig deeper. ## Nuget & Installation