Releases: apollographql/federation-hotchocolate
v1.3.0
Minor Changes
- Enable Source link for debugging enhancements (#60) @damienpontifex
Patch Changes
- chore(deps): update all non-major dependencies (#41) @renovate
- chore(deps): update dependency microsoft.sourcelink.github to v8 (#57) @renovate
Other Changes
- Add Codeowners (#56) @svc-secops
v1.2.1
Patch Changes
- fix: new NonResolvableKey attribute (#54) @dariuszkuc
Other Changes
- add compatibility warning (#50) @dariuszkuc
v1.2.0
Minor Changes
- feat: expose IRequestExecutorBuilder extensions to apply schema directives (#47) @dariuszkuc
Patch Changes
- fix: use implicit binding for federated POCO (#39) @dariuszkuc
Other Changes
- chore(deps): update hotchocolate to v13.6.1 (#42 #43) @renovate
- chore(renovate): group HotChocolate updates together (#40) @dariuszkuc
v1.1.0
Minor Changes
Adds support for HotChocolate
v13.6.0.
v1.0.0
Apollo Federation for HotChocolate
Apollo Federation is a powerful, open architecture that helps you create a unified supergraph that combines multiple GraphQL APIs. ApolloGraphQL.HotChocolate.Federation
provides Apollo Federation support for building subgraphs in the HotChocolate
ecosystem. Individual subgraphs can be run independently of each other but can also specify relationships to the other subgraphs by using Federated directives. See Apollo Federation documentation for details.
Generating Federated Schemas
ApolloGraphQL.HotChocolate.Federation
package is published to Nuget. Update your .csproj
file with following package references
<ItemGroup>
<!-- make sure to also include HotChocolate package -->
<PackageReference Include="HotChocolate.AspNetCore" Version="13.5.1" />
<!-- federation package -->
<PackageReference Include="ApolloGraphQL.HotChocolate.Federation" Version="$LatestVersion" />
</ItemGroup>
After installing the necessary packages, you need to register Apollo Federation with your GraphQL service. You need to opt-in to Federation v1 or v2 schema by invoking corresponding builder extension
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddGraphQLServer()
// .AddApolloFederation() // use this instead if you want to opt-in to fed v1
.AddApolloFederationV2()
// register your types and services
;
var app = builder.Build();
app.MapGraphQL();
app.Run();
Apollo Federation requires subgraphs to provide some additional metadata to make them supergraph aware. Entities are GraphQL objects that can be uniquely identified across the supergraph by the specified @key
s. Since entities can be extended by various subgraphs, we need an extra entry point to access the entities, i.e. subgraphs need to implement reference resolvers for entities that they support.
All federated directives are provided as attributes that can be applied directly on classes/fields/methods. Alternatively, if you need more granular control, you can use code first approach and manually populate federation information on the underlying GraphQL type descriptor. All federated directives expose corresponding methods on the applicable descriptor. Example attribute usage
[Key("id")]
public class Product
{
public Product(string id, string name, string? description)
{
Id = id;
Name = name;
Description = description;
}
[ID]
public string Id { get; }
public string Name { get; }
public string? Description { get; }
// assumes ProductRepository with GetById method exists
// reference resolver method must be public static
[ReferenceResolver]
public static Product GetByIdAsync(
string id,
ProductRepository productRepository)
=> productRepository.GetById(id);
}
Federation v1 directives
Extends
applicable on objects, see@extends
documentationExternal
applicable on fields, see@external
documentationKey
applicable on objects, see@key
documentationProvides
applicable on fields, see@provides
documentationRequires
applicable on fields, see@requires
documentation
Federation v2 directives (includes all of the v1 directives)
ApolloTag
applicable on schema, see@tag
documentationApolloAuthenticated
(since v2.5) applicable on enum, field, interface and object,@authenticated
documentationComposeDirective
(since v2.1) applicable on schema, see@composeDirective
documentationContact
applicable on schema, see@contact
usageInaccessible
applicable on all type definitions, see@inaccessible
documentationInterfaceObject
(since v2.3) applicable on objects, see@interfaceObject
documentationKeyInterface
applicable on interfaces, see entity interface@key
documentationLink
applicable on schema, see@link
documentationRequiresScopes
(since v2.5) applicable on enum, field, interface and object,@requiresScopes
documentationShareable
applicable on schema, see@shareable
documentation
Entity resolution
Map
applicable on entity resolver method paramaters, allows you to map complex argument to a simpler representation value, e.g.[Map("foo.bar")] string bar
ReferenceResolver
applicable on public static methods within an entity class to indicate entity resolver
v0.3.0
Minor Changes
- feat: support
@authenticated
and@requiresScopes
(#33) @dariuszkuc - feat: new AddApolloFederationV2 that accepts target version (#32) @dariuszkuc
- feat: allow users specifying supported federation version (#23) @dariuszkuc
Other Changes
- chore(deps): update dependency coverlet.msbuild to v6 (#31) @renovate
- chore(deps): update dependency snapshooter.xunit to v0.13.0 (#29) @renovate
- chore(deps): update actions/checkout action to v4 (#12) @renovate
- chore(deps): update xunit-dotnet monorepo to v2.5.3 (#30) @renovate
- chore(deps): update dependency moq to v4.20.69 (#28) @renovate
- chore(deps): update dependency microsoft.net.test.sdk to v17.7.2 (#27) @renovate
- chore(deps): update dependency coverlet.msbuild to v3.2.0 (#26) @renovate
- chore: simplify project structure (#25) @dariuszkuc
v0.2.0
Minor Changes
- feat: add support for
@contact
directive (#21) @dariuszkuc
Patch Changes
- fix: handle non-null in arg parser (#18) @dariuszkuc
- fix federation directive attribute targets
Other Changes
v0.1.1
Patch Changes
- fix: simplify branching logic when applying fed directives (#8) @dariuszkuc
- fix: ability to configure interface entities (#7) @dariuszkuc
v0.1.0
Apollo Federation V2 Support
ApolloGraphQL.Federation.HotChocolate
module now supports Apollo Federation v1 and Apollo Federation v2 subgraphs.
Federation v2 is an evolution of the Federation spec to make it more powerful, flexible and easier to adapt. While v1 and v2 schemas are similar in many ways, Federation v2 relaxes some of the constraints and adds additional capabilities. See Apollo documentation for details.
Generating Federated Schemas
You need to opt-in to Federation v1 or v2 schema by invoking corresponding builder extension
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddGraphQLServer()
// .AddApolloFederation() // use this instead if you want to opt-in to fed v1
.AddApolloFederationV2()
// register your types and services
;
var app = builder.Build();
app.MapGraphQL();
app.Run();
Federation v1 Directive Attributes
Extends
applicable on objects, see@extends
documentationExternal
applicable on fields, see@external
documentationKey
applicable on objects, see@key
documentationProvides
applicable on fields, see@provides
documentationRequires
applicable on fields, see@requires
documentation
Federation v2 Directive Attributes
Includes all of the v1 directive attributes.
ApolloTag
applicable on schema, see@tag
documentationComposeDirective
applicable on schema, see@composeDirective
documentationInaccessible
applicable on all type definitions, see@inaccessible
documentationInterfaceObject
applicable on objects, see@interfaceObject
documentationLink
applicable on schema, see@link
documentationShareable
applicable on schema, see@shareable
documentation
v0.0.2
Major/Breaking Changes
- We changed namespace from
ApolloGraphQL.HotChocolate.Federation
toApolloGraphQL.Federation.HotChocolate
to better align the structure of the library for future Federation v2 support