通过批处理相同的类型从远程服务器加入模式

Posted

技术标签:

【中文标题】通过批处理相同的类型从远程服务器加入模式【英文标题】:joining schemas from remote server by batching same types 【发布时间】:2021-09-27 17:46:54 【问题描述】:

我是 apollo 服务器的新手,我正在努力理解如何将远程模式变成一个庞大的方案,我能够加入模式并且现在可以查询数据,但是,我似乎无法链接/resolve 类型,我的两个微服务对那些在所有地方都相同的类型使用相同的类型名称,pk 在所有这些类型中都很常见,只是一个只有pk,另一个有一些额外的字段, 我的商店架构是这样的

type UserType implements Node 
  id: ID!
  shops: [ShopType]
  pk: Int

在这种情况下,真正重要的是pk,因为它应该加入我的身份验证模式,看起来像这样

type UserType implements Node 
      id: ID!
      username: String
      email: String
      pk: Int
    

有这么多其他字段,我希望能够在 appolo 服务器中加入这两个字段的数据字段,因为这是我合并两个模式的地方,以便我查询时


  shops 
    shopOwner 
      username
      email
    
  

那么即使 usernameemail 不在第一个模式中,它也可以通过身份验证模式中的pk 解析这些字段

我用过类似的东西

const createNewSchema = async () => 
    const schemas = await createRemoteExecutableSchemas();
    return mergeSchemas(
        schemas,
    );
;

加入我的模式,那么我什至如何让两者按照我的意愿一起工作?提前非常感谢

【问题讨论】:

【参考方案1】:

我能够让它工作,我使用了stitchschemas,它看起来像这样

const createNewSchema = async () => 
    const schemas = await createRemoteExecutableSchemas();
    return stitchSchemas(
        subschemas: [
            
                schema: schemas['shop'],
                merge: 
                    UserType: 
                        entryPoints: [
                            
                                fieldName: 'shopOwnerById',
                                selectionSet: ' pk ',
                                args: originalObject => ( pk: originalObject.pk ),
                            ,
                            
                                fieldName: 'shopById',
                                selectionSet: ' pk ',
                                args: originalObject => ( pk: originalObject.pk ),
                            
                        ]

                    ,
                ,
            , 
                schema: schemas['auth'],
                merge: 
                    UserType: 
                        entryPoints: [
                            
                                fieldName: 'userById',
                                selectionSet: ' pk ',
                                args: originalObject => ( pk: originalObject.pk ),
                            ,
                        ]

                    
                
            
        ],
        mergeTypes: true,
    );
;

就我而言,只是为了不让任何人感到困惑,我将 schemas 设为字典,其中每个都是它所链接的 API 的名称。还必须确保我在各自的端点中查询了所有fieldName。感谢您查看这里的指导 https://www.graphql-tools.com/docs/stitch-type-merging 帮了很多忙

【讨论】:

以上是关于通过批处理相同的类型从远程服务器加入模式的主要内容,如果未能解决你的问题,请参考以下文章

远程管理

远程服务器使用Tensorboard

Unity:从远程源解析 JSON 时出错

Redis服务器开启远程访问

通过“远程桌面连接”工具,共享本机磁盘到远程服务器

无法使用桥接网络模式从 docker 容器连接到远程 SQL 服务器