Apollo Federation Transform
The federation
transform allows the resolvers and directives to conform to the federation
specification. Much of the federation source code could be reused, ensuring it is compliant with the
specification. This transform uses
graphql-transform-federation
(opens in a new tab) package.
Terminal
yarn add @graphql-mesh/transform-federation
How to use?
Add the following configuration to your Mesh config file:
.meshrc.yaml
transforms:
- federation:
types:
# Ensure the root queries of this schema show up the combined schema
- name: Query
config:
extends: true
- name: Product
config:
# extend Product {
extend: true
# Product @key(fields: "id") {
key:
fields:
- id
fields:
# id: Int! @external
- name: id
config:
external: true
resolveReference:
queryFieldName: user
Add Reference Resolver as a Code File
To add more complex business logic, you can point to a code file that exports a resolver function.
.meshrc.yaml
resolveReference: ./userResolveReference.ts
userResolveReference.ts
// So we can point to an existing query field to resolve that entity
export default function (root, context, info) {
return context.accounts.Query.user({ root, args: { id: root.id }, context, info })
}
💡
You can check out our example that uses Federation as a merging strategy.
types
(type:Array of Object
, required):name
(type:String
, required)config
(type:Object
):key
(type:Array of Object
):fields
(type:String
)
shareable
(type:Boolean
)extends
(type:Boolean
)fields
(type:Array of Object
, required):name
(type:String
, required)config
(type:Object
, required):external
(type:Boolean
)provides
(type:Object
):fields
(type:String
)
requires
(type:Object
):fields
(type:String
)
tag
(type:Object
):name
(type:String
)
inaccessible
(type:Boolean
)override
(type:Object
):from
(type:String
)
resolveReference
- One of:String
object
:queryFieldName
(type:String
, required) - Name of root field name that resolves the referenceargs
(type:JSON
) - You need configure the arguments for that field;
args:
someArg: "{root.someKeyValue}"
version
(type:String
) - Version of the federation spec Default: v2.0