架构:
type User {
id: ID!
createdCurricula: [Curriculum]
}
type Curriculum {
id: ID!
title: String!
creator: User!
}
Run Code Online (Sandbox Code Playgroud)
查询给定用户的所有课程的解析器:
{
"version" : "2017-02-28",
"operation" : "Query",
"query" : {
## Provide a query expression. **
"expression": "userId = :userId",
"expressionValues" : {
":userId" : {
"S" : "${context.source.id}"
}
}
},
"index": "userIdIndex",
"limit": #if(${context.arguments.limit}) ${context.arguments.limit} #else 20 #end,
"nextToken": #if(${context.arguments.nextToken}) "${context.arguments.nextToken}" #else null #end
}
Run Code Online (Sandbox Code Playgroud)
响应图:
{
"items": $util.toJson($context.result.items),
"nextToken": #if(${context.result.nextToken}) "${context.result.nextToken}" #else null #end
}
Run Code Online (Sandbox Code Playgroud)
查询:
query …Run Code Online (Sandbox Code Playgroud) 我们如何使用 boto 通过 AWS AppSync 发布 GraphQL 请求?
最终,我试图模仿一个移动应用程序访问我们在 AWS 上的无堆栈/云形成堆栈,但使用 python。不是 javascript 或放大。
主要痛点是身份验证;我已经尝试了十几种不同的方法。这是当前的一个,它生成一个带有“UnauthorizedException”和“Permission denied”的“401”响应,考虑到我收到的一些其他消息,这实际上非常好。我现在使用 'aws_requests_auth' 库来完成签名部分。我假设它使用/.aws/credentials我本地环境中存储的来验证我的身份,还是这样?
我对认知身份和池将在何处以及如何进入其中感到有些困惑。例如:说我想模仿注册顺序?
无论如何,代码看起来很简单;我只是不理解身份验证。
from aws_requests_auth.boto_utils import BotoAWSRequestsAuth
APPSYNC_API_KEY = 'inAppsyncSettings'
APPSYNC_API_ENDPOINT_URL = 'https://aaaaaaaaaaaavzbke.appsync-api.ap-southeast-2.amazonaws.com/graphql'
headers = {
'Content-Type': "application/graphql",
'x-api-key': APPSYNC_API_KEY,
'cache-control': "no-cache",
}
query = """{
GetUserSettingsByEmail(email: "john@washere"){
items {name, identity_id, invite_code}
}
}"""
def test_stuff():
# Use the library to generate auth headers.
auth = BotoAWSRequestsAuth(
aws_host='aaaaaaaaaaaavzbke.appsync-api.ap-southeast-2.amazonaws.com',
aws_region='ap-southeast-2',
aws_service='appsync')
# Create an http graphql request.
response = requests.post(
APPSYNC_API_ENDPOINT_URL,
json={'query': …Run Code Online (Sandbox Code Playgroud) 我正在上传一个base64字符串,但GraphQL被挂起了.如果我将字符串切片少于50,000个字符就可以了.在50,000个字符之后,graphQL永远不会使其成为解析函数,但不会产生错误.在较小的字符串上,它工作得很好.
const file = e.target.files[0];
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onloadend = () => {
const imageArray = reader.result;
this.context.fetch('/graphql', {
body: JSON.stringify({
query: `mutation s3Upload($img: String!) {
s3Upload(file: $img) {
logo,
}
}`,
variables: {
img: imageArray,
},
}),
}).then(response => response.json())
.then(({ data }) => {
console.log(data);
});
}
const s3Upload = {
type: S3Type,
args: {
file: { type: new NonNull(StringType) },
},
resolve: (root, args, { user }) => upload(root, args, user),
};
const S3Type …Run Code Online (Sandbox Code Playgroud) 我想将AWS AppSync用于移动开发(Android/iOS),但我不确定其离线功能.
根据文档,数据将在脱机时访问,并在客户端再次联机时自动同步.但在使用AppSync创建和修改脱机数据之前,我无法找到有关应用客户端是否需要首先连接到AWS的任何信息.
我不熟悉AppSync的底层技术(例如GraphQL),我无法访问公共预览版本来自行测试.
我希望隐私敏感用户能够在不连接到AWS的情况下使用应用程序,同时仍然可以将AppSync用作脱机数据库.只有当用户以后决定在设备上使用备份/同步数据时,他或她才可以选择加入AWS.
AWS AppSync是否可以使用此用例?
不使用任何其他本地存储(如SharedPreferences,SQLite,Realm等)
文档说我们可以通过3种方式授权应用程序与API进行交互,但看起来并不存在拥有公共端点的方法.
例如,如果我希望任何人查询待办事项列表,但只有经过身份验证的用户可以向该列表添加待办事项,我该如何实现?
或者,如果我想允许任何人进行模式内省,但是将所有其他查询限制为经过身份验证的用户,是否可能?
我正在使用cognito进行身份验证.我注意到有一个AppId client regex字段说(Optional) Type a regular expression to allow or block requests to this API.但不幸的是我找不到任何例子.也许这就是我要找的东西?
谢谢
朱利安
我正在使用AWS Appsync,我希望从成功执行的变异中获得响应.当我在Appsync Graphql控制台中尝试我的设置时,我得到一个填充的"data": { "mutateMeeting" }响应:
当我在我的反应应用程序中尝试相同时,我可以在dynamodb数据库中看到突变发生,但react-apollo不会返回突变响应.正如您在apollo开发工具中看到的那样,"data": { "mutateMeeting" }为null:
我错过了什么?
相应的graphql架构读取:
input MeetingInput {
id: String,
start: String!,
end: String!,
agreements: [AgreementInput]!
}
type Meeting {
id: String!
start: String!
end: String!
agreements: [Agreement]
}
type Mutation {
mutateMeeting (
companyId: String!,
meeting: MeetingInput!
): Meeting!
}
Run Code Online (Sandbox Code Playgroud)
在graphql标签突变写着:
import gql from 'graphql-tag'
export default gql`
mutation mutateMeeting($companyId: String!, $meeting: MeetingInput!) {
mutateMeeting(companyId: $companyId, meeting: $meeting) {
id, …Run Code Online (Sandbox Code Playgroud) 我将 AWS amplify 与 graphql 和 appsync 结合使用。当我执行标准列表查询时,appsync 在它返回的项目列表中包含已删除的项目。
我该怎么做才能让它只返回未删除的项目?
我尝试了这个查询,但它抛出一个错误:
query MyQuery($filter: ModelFrameFilterInput = {_deleted: {ne: true}}) {
listFrames(filter: $filter) {
items {
_deleted
name
id
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
"message": "Validation error of type BadValueForDefaultArg: Bad default value ObjectValue{objectFields=[ObjectField{name='_deleted', value=ObjectValue{objectFields=[ObjectField{name='ne', value=BooleanValue{value=true}}]}}]} for type ModelFrameFilterInput"
Run Code Online (Sandbox Code Playgroud) 我正在使用 AWS Amplify 数据存储。此服务内部使用的应用程序同步令牌。目前,应用程序同步令牌已过期,因此我从Appsync / Settings / API 密钥更改了过期日期。但这允许编辑下一年的最长过期日期。
他们有什么理由将令牌有效期设置为永久或超过 1 年吗?因为我的客户不希望一年后我们需要再次更改到期日期。
我同意Apollo Client很难设置,因为它有很多样板(尽管在阅读文档之后变得很简单)和诸如AWS Amplify,URQL,Apollo Boost和Micro GraphQL React之类的东西使得在客户端上使用GraphQL变得容易.
我目前正在使用AWS AppSync并希望在AWS Amplify和Apollo Client之间做出选择,而我正考虑进入所有AWS.
那么AWS Amplify和Apollo Client有什么区别?
我打算开发一个可扩展的聊天应用程序作为项目的一部分,该项目是移动应用程序,希望扩展到Web。我来考虑以下选项
目前,我在移动应用程序中将Firebase用于其他用途(身份验证等)。
我的发现:
Firebase文档非常友好,并且可以用更少的时间轻松上手。
根据我的计算,使用Firestore似乎比AppSync便宜(AppSync + DynamoDB的成本与Firestore的成本)
根据docs,Firestore中存在某些限制。
AppSync使用GraphQL,因此可以更精细地访问数据。
我搜索了AppSync和Cloud Firestore之间的比较,但没有发现任何很好的深入比较。
使用AWS AppSync vs Firestore进行可扩展聊天应用程序的优缺点是什么?
aws-appsync ×10
graphql ×4
aws-amplify ×3
reactjs ×3
amazon-s3 ×1
android ×1
apollo ×1
boto3 ×1
chat ×1
datastore ×1
ios ×1
javascript ×1
python-3.x ×1
react-apollo ×1
scalability ×1