在Amplify上如何轻松地使用AppSync以外的项目的方法
* 本文分享了通过非官方的方式进行扩展的黑客方法。
在AWS Amplify中,由于框架的思想,只能在同一个项目中创建一个AppSync(GraphQL)API。此外,使用Amplify包时,应用程序只能设置一个GraphQL端点。
长期以来,由于这个限制,很难自由地设计微服务,但是我们发现了一种解析AWS SDK内部结构并轻松地将外部AppSync混入项目的方法,现在分享给大家。
方式 (yà
使用这种方法,可以轻松地将任意数量的AppSync集成到项目中,而不会使其变得复杂。
import {GraphQLAPIClass} from '@aws-amplify/api-graphql';
import {listPrices} from './graphql/queries.js';
import mainConfig from '@/aws-exports.js';
// インスタンス化する必要があります。
const GraphQLAPI = new GraphQLAPIClass();
// 環境設定 - configre()はAmplify.configre()と共通の関数です。
// 1. Cognito認証等が共通の場合は一旦メインのaws-exports.jsを取り込みます。
GraphQLAPI.configure(mainConfig);
// 2. 内部的にはObject.assign()するだけなので、第二のAppSync情報で上書きします。
GraphQLAPI.configure({
aws_appsync_graphqlEndpoint: process.env.OTHER_APPSYNC_ENDPOINTT,
aws_appsync_region: 'ap-northeast-1',
aws_appsync_authenticationType: 'AMAZON_COGNITO_USER_POOLS',
});
// 通常と同じ方法で接続できます。
const response = await GraphQLAPI.graphql({
query: listPrices,
variables: {crawlId, limit, nextToken},
});
有几个要注意的事项
GraphQLAPI类
import {GraphQLAPIClass} from '@aws-amplify/api-graphql';
为什么要使用更低层级的GraphQLAPIClass而不是APIClass,这是因为APIClass在大小上被标记为@deprecated。如果使用静态分析的编辑器,将显示APIClass为”非推荐”。
无论如何,将创建一个与主要的Amplify不同的实例。
配置()
const GraphQLAPI = new GraphQLAPIClass();
这个部分,即使在构造函数中传递了config,也无法进行完全的设置。
需要先空实例化,然后通过configure()函数进行设置。
数据存储
以下是我們尚未確認的情況,但從結構上看,如果在IndexedDB中混合多個AppSync項目,可能會出現故障。因此,最好不要在這個設定中使用多個AppSync的DataStore。
你为什么要如此坚持要分开呢?
微服务
由于应用程序通常是将多个微服务组合在一起制作,因此仅仅依赖单一的AppsSync功能会带来相当大的障碍。虽然可以在GraphQL模式中定义HTTP或Lambda代理,但这将导致重复定义并增加管理工作量,而且很难以做到完美,所以我们花了几年时间进行试验和探索。
推送速度变得非常慢
如果你不定义20个模式,部署可能会变得非常耗时。如果没有这些模式定义,并且还可以将模式定义文件在结构上进行分割,那么我可能会毫不犹豫地尝试并且不会犯错误。