在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):0xR/graphql-transform-federation开源软件地址(OpenSource Url):https://github.com/0xR/graphql-transform-federation开源编程语言(OpenSource Language):TypeScript 98.8%开源软件介绍(OpenSource Introduction):graphql-transform-federationIf you want to use GraphQL federation, but you can't rebuild your current GraphQL schema, you can use this transform to add GraphQL federation functionality to an existing schema. You need this when you are using a managed GraphQL service or a generated schema which doesn't support federation (yet). If you are using apollo-server or another schema builder that supports federation you don't need this transform you should add the federation directives directly. This transform will add the resolvers and directives to conform to the federation specification. Much of the federation sourcecode could be reused ensuring it is compliant to the specification. Check out the blogpost introducing graphql-tranform-federation for more background information. UsageYou can use this transform on a local or a remote GraphQL schema. When using a remote schema your service acts a middleware layer as shown in the diagram above. Check the remote schema documentation for how to get an executable schema that you can use with this transform. The example below shows a configuration where the transformed schema extends an
existing schema. It already had a resolver import { transformSchemaFederation } from 'graphql-transform-federation';
import { delegateToSchema } from 'graphql-tools';
const schemaWithoutFederation = // your existing executable schema
const federationSchema = transformSchemaFederation(schemaWithoutFederation, {
Query: {
// Ensure the root queries of this schema show up the combined schema
extend: true,
},
Product: {
// extend Product {
extend: true,
// Product @key(fields: "id") {
keyFields: ['id'],
fields: {
// id: Int! @external
id: {
external: true
}
},
resolveReference({ id }, context, info) {
return delegateToSchema({
schema: info.schema,
operation: 'query',
fieldName: 'productById',
args: {
id,
},
context,
info,
});
},
},
}); To allow objects of an existing schema to be extended by other schemas it only
needs to get const federationSchema = transformSchemaFederation(schemaWithoutFederation, {
Product: {
// Product @key(fields: "id") {
keyFields: ['id'],
},
}); API referenceimport { GraphQLSchema } from 'graphql';
import { GraphQLReferenceResolver } from '@apollo/federation/dist/types';
interface FederationFieldConfig {
external?: boolean;
provides?: string;
requires?: string;
}
interface FederationFieldsConfig {
[fieldName: string]: FederationFieldConfig;
}
interface FederationObjectConfig<TContext> {
// An array so you can add multiple @key(...) directives
keyFields?: string[];
extend?: boolean;
resolveReference?: GraphQLReferenceResolver<TContext>;
fields?: FederationFieldsConfig;
}
interface FederationConfig<TContext> {
[objectName: string]: FederationObjectConfig<TContext>;
}
function transformSchemaFederation<TContext>(
schema: GraphQLSchema,
federationConfig: FederationConfig<TContext>,
): GraphQLSchema;
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论