我同意Apollo Client很难设置,因为它有很多样板(尽管在阅读文档之后变得很简单)和诸如AWS Amplify,URQL,Apollo Boost和Micro GraphQL React之类的东西使得在客户端上使用GraphQL变得容易.
我目前正在使用AWS AppSync并希望在AWS Amplify和Apollo Client之间做出选择,而我正考虑进入所有AWS.
那么AWS Amplify和Apollo Client有什么区别?
我正在使用ReactJS并aws-amplify执行graphql操作.
码:
import {
API,
graphqlOperation
} from 'aws-amplify';
import { UpdateInput } from './mutations.js';
// Call mutation
const input = { /* some values */ };
API.graphql(graphqlOperation(UpdateInput, input)).then(...);
Run Code Online (Sandbox Code Playgroud)
GraphQL变异定义:
export const UpdateInput = `mutation UpdateInput($input: Input!) {
updateInput(input: $input) {
id,
name
}
}`
Run Code Online (Sandbox Code Playgroud)
GraphQL架构:
input Input {
id: ID!
name: String
}
type Mutation {
updateInput(input: Input!): String
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误:
[Log]变量'input'强制NonNull类型'Input!'的Null值
使用AWS控制台我的突变工作并且input是NonNull(使用调试器)
是什么导致错误?
我打算开发一个可扩展的聊天应用程序作为项目的一部分,该项目是移动应用程序,希望扩展到Web。我来考虑以下选项
目前,我在移动应用程序中将Firebase用于其他用途(身份验证等)。
我的发现:
Firebase文档非常友好,并且可以用更少的时间轻松上手。
根据我的计算,使用Firestore似乎比AppSync便宜(AppSync + DynamoDB的成本与Firestore的成本)
根据docs,Firestore中存在某些限制。
AppSync使用GraphQL,因此可以更精细地访问数据。
我搜索了AppSync和Cloud Firestore之间的比较,但没有发现任何很好的深入比较。
使用AWS AppSync vs Firestore进行可扩展聊天应用程序的优缺点是什么?
我对亚马逊的app-sync的离线和同步功能感兴趣,但我想知道它是否可以在没有dynamoDB作为后端的情况下使用.用VTL编写的适用于dynamoDB的graphQL解析器看起来很糟糕.看起来使用mongo后端会好得多.那可能吗?
我正在使用AWS Amplify库为AppSync项目注册并执行Auth.这使用Cognito.但是,当新用户通过Amplify/Cognito注册时,新用户不会分配到cognito池中的任何特定组.我使用Amplify高阶组件进行登录/注册.
import { withAuthenticator } from 'aws-amplify-react';
Run Code Online (Sandbox Code Playgroud)
我将一个组件包裹起来
class Authenticator extends React.Component {
//... basically empty component, only exists so I can wrap it w/ the HOC
}
export default withAuthenticator(Authenticator)
Run Code Online (Sandbox Code Playgroud)
Amplify在index.js中设置
import config from './aws-exports';
import Amplify from 'aws-amplify';
Amplify.configure(config);
Run Code Online (Sandbox Code Playgroud)
aws-exports.js由AWS Mobile Hub CLI自动生成.好像...
const awsmobile = {
'aws_app_analytics': 'enable',
'aws_cognito_identity_pool_id': 'us-west-2:XXX',
'aws_cognito_region': 'us-west-2',
'aws_content_delivery': 'enable',
'aws_content_delivery_bucket': 'flashcards-hosting-mobilehub-XXX',
'aws_content_delivery_bucket_region': 'us-west-2',
'aws_content_delivery_cloudfront': 'enable',
'aws_content_delivery_cloudfront_domain': 'XXX.cloudfront.net',
'aws_mandatory_sign_in': 'enable',
'aws_mobile_analytics_app_id': 'XXX',
'aws_mobile_analytics_app_region': 'us-east-1',
'aws_project_id': 'XXX',
'aws_project_name': 'flash-cards',
'aws_project_region': 'us-west-2',
'aws_resource_name_prefix': 'flashcards-mobilehub-XXX', …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-mobilehub aws-cognito aws-appsync aws-amplify
我们认为这AppSync将是我们React Native应用程序开发的绝佳工具。但是,问题在于开发中的可伸缩性。整日浏览Google,找到一种AppSync离线进行开发的方法,以便任何人都可以自由创建API并将其合并,我意识到没有这样的解决方案。
那么大型团队如何使用来开发本机应用程序AppSync?您是否AppSync为拥有的每个开发人员创建应用程序,以便每个人都可以自由更改自己的API,然后将其合并到生产AppSync应用程序中?
我真的希望有一种本地开发API并使用git合并它们并将代码直接上传到的方法AppSync。据我所知这是不可能的,但是如果您知道某种方法或其他方法,请告诉我。
我在寻找如何正确地将服务器端验证添加到我的AppSync GraphQL突变方面遇到问题.
本质上,我使用AWS仪表板来定义我的AppSync架构,因此为我创建了DynamoDB表,以及为数据设置的一些基本解析器.
不,我需要实现以下目标:
inventory和的球员goldpurchaseItem变异item_iditem_id存在关联DynamoDB的int'Items'表,检查玩家是否有足够的黄金,再次在关联DynamoDB的'Players'表中,如果是,写入PlayersDynamoDB表通过将项目添加到他们的库存和新的减去黄金金额.我认为实现这一目标的最有效方法是降低成本和延迟,是为AppSync使用"Apache Velocity"模板语言?
很高兴看到这个示例显示如何查询/写入DynamoDB,处理错误并正确解决突变.
vtl amazon-web-services amazon-dynamodb apache-velocity aws-appsync
我不确定如何将签名的 http 请求发送到 AppSync GraphQL 端点。AWS 中没有用于执行此操作的库。
aws-amplify 不起作用,因为仅适用于浏览器,而不适用于 Lambda 函数。aws-sdk AppSync 仅供管理员使用,它没有调用用户端 api 的方法是否可以从 AWS Lambda 发出 IAM 签名的 HTTP 请求?(以某种简单的方式)
javascript amazon-web-services aws-lambda graphql aws-appsync
我的项目使用 cognito 用户池作为默认身份验证方法,并且还将 iam 用于我的自定义 graphql lambda 解析器。
我一直在使用 AppSync 控制台对我的查询/突变运行测试。
我在这个 schema.graphql 文件中实现了 User 和 Group 类型之间的多对多关系。
type User
@model
@auth(
rules: [
{ allow: owner, ownerField: "id", operations: [create, update, delete] }
{ allow: private, provider: iam, operations: [read, update, delete] }
{ allow: private, provider: userPools, operations: [read] }
]
) {
id: ID!
displayName: String!
groups: [GroupMemberLink] @connection(keyName: "byMember", fields: ["id"])
}
type Group
@model
@auth(
rules: [
{ allow: owner, ownerField: "members", operations: [create, update, …Run Code Online (Sandbox Code Playgroud) 我一直在研究 AWS AppSync 以创建一个使用 DynamoDB 作为数据存储的托管 GraphQL API。我知道 AppSync 可以使用 Apache Velocity 模板语言作为解析器从 dynamoDB 获取数据。但是,这意味着我必须在编程堆栈中引入一种额外的语言,因此我更愿意在 Javascript/Node.js 中编写解析器
使用 lambda 函数从 DynamoDB 获取数据有什么缺点吗?解析器使用 VTL 而不是 lambda 的原因是什么?
aws-appsync ×10
graphql ×5
aws-amplify ×4
aws-lambda ×2
reactjs ×2
aws-cognito ×1
chat ×1
javascript ×1
mongodb ×1
scalability ×1
vtl ×1