* Upgrade gqlgen to v0.17.2 This enables builds on Go 1.18. github.com/vektah/gqlparser is upgraded to the newest version too. Getting this to work is a bit of a hazzle. I had to first remove vendoring from the repository, perform the upgrade and then re-introduce the vendor directory. I think gqlgens analysis went wrong for some reason on the upgrade. It would seem a clean-room installation fixed it. * Bump project to 1.18 * Update all packages, address gqlgenc breaking changes * Let `go mod tidy` handle the go.mod file * Upgrade linter to 1.45.2 * Introduce v1.45.2 of the linter The linter now correctly warns on `strings.Title` because it isn't unicode-aware. Fix this by using the suggested fix from x/text/cases to produce unicode-aware strings. The mapping isn't entirely 1-1 as this new approach has a larger iface: it spans all of unicode rather than just ASCII. It coincides for ASCII however, so things should be largely the same. * Ready ourselves for errchkjson and contextcheck. * Revert dockerfile golang version changes for now Co-authored-by: Kermie <kermie@isinthe.house> Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| fieldset | ||
| federation.go | ||
| federation.gotpl | ||
| readme.md | ||
Federation plugin
Add support for graphql federation in your graphql Go server!
TODO(miguel): add details.
Tests
There are several different tests. Some will process the configuration file directly. You can see those in the federation_test.go. There are also tests for entity resolvers, which will simulate requests from a federation server like Apollo Federation.
Running entity resolver tests.
- Go to
plugin/federation - Run the command
go generate - Run the tests with
go test ./....
Architecture
TODO(miguel): add details.
Entity resolvers - GetMany entities
The federation plugin implements GetMany semantics in which entity resolvers get the entire list of representations that need to be resolved. This functionality is currently optin tho, and to enable it you need to specify the directive @entityResolver in the federated entity you want this feature for. E.g.
directive @entityResolver(multi: Boolean) on OBJECT
type MultiHello @key(fields: "name") @entityResolver(multi: true) {
name: String!
}
That allows the federation plugin to generate GetMany resolver function that can take a list of representations to be resolved.
From that entity type, the resolver function would be
func (r *entityResolver) FindManyMultiHellosByName(ctx context.Context, reps []*generated.ManyMultiHellosByNameInput) ([]*generated.MultiHello, error) {
/// <Your code to resolve the list of items>
}