有没有办法使用AWS AppSync轻松限制客户端?API Gateway有这个,它们是非常相似的服务.我希望能够限制个别客户端 - 所以一个用户不能坐在那里并且太难敲打API.
可能不在我的愿望清单的顶部,但肯定会很高兴.
我是 react-native、graphql 和 Aws AppSync 的新手。我们尝试使用 aws appsync 构建一个react-native应用程序。当我运行react-native run-android时,它抛出一个错误说
传递给解析器的不是有效的 GraphQL DocumentNode。您可能需要使用“graphql-tag”或其他方法将操作转换为文档
请看一下
用于获取参考的图像 url。
import { graphql, compose } from 'react-apollo';
import gql from 'graphql-tag';
const listMessages = graphql(gql`
query listMessages {
listMessages {
id
text
createdAt
sentBy {
id
name
}
}
}`)
const createMessage = graphql(gql`
mutation createMessage($text: String!, $sentById: ID!) {
createMessage(input : {
id : $sentById
text : $text
createdAt : "1/06/2018"
updateAt:"1/06/2018"
}){
sentBy {
id
name
}
}
}`) …Run Code Online (Sandbox Code Playgroud) 我希望使用AppSync深入研究项目.到目前为止,我已经能够找到大量的文章,并且在线提供了关于点击哪些按钮以便运行示例项目的所有步骤,但是它们似乎都没有涉及如何从本地开发处理它或在CI/CD环境中.它可能是我的"老派"关于dev通常如何工作的想法,但我期待在某种程度上模拟本地环境以进行开发和运行单元测试,但我似乎无法找到任何方法来做到这一点.当我到达UI部分时,我不知道如何让后端的本地开发实例运行.
人们不再以这种方式发展,而是选择站起来"开发堆栈"吗?我只是想确保我不会在将来把自己画成一个角落.
continuous-integration automated-tests unit-testing continuous-deployment aws-appsync
我对 AppSync 错误处理有疑问。我想发送errorInfo对象以及错误响应,我尝试了$util.error. 根据文件:
https://docs.aws.amazon.com/appsync/latest/devguide/resolver-util-reference.html
\n\n\n\n\n\n\n
$util.error(String, String, Object, Object)抛出自定义错误。如果模板检测到请求或调用结果有错误,则可以在请求或响应映射模板中使用该模板。此外,还可以指定 errorType 字段、data 字段和 errorInfo 字段。数据值将添加到 GraphQL 响应中错误内的相应错误块中。注意:数据将根据查询选择集进行过滤。errorInfo 值将添加到 GraphQL 响应中错误内相应的 error\n 块中。注意:errorInfo 将不会根据查询选择集进行过滤。
\n
这是我的 ResponseMappingTemplate 的样子:
\n\n#if( $context.result && $context.result.errorMessage )\n $utils.error($context.result.errorMessage, $context.result.errorType, $context.result.data), $context.result.errorInfo)\n#else\n $utils.toJson($context.result.data)\n#end\nRun Code Online (Sandbox Code Playgroud)\n\n这是我在解析器上所做的:
\n\nvar result = {\n data: null,\n errorMessage: \'I made this error\',\n errorType: \'ALWAYS_ERROR\',\n errorInfo: {\n errorCode: 500,\n validations: [\n {\n fieldName: \'_\',\n result: false,\n reasons: [\n \'Failed! Yay!\'\n ]\n }\n …Run Code Online (Sandbox Code Playgroud) 我正在使用 Amplify 和 Appsync 来构建我正在构建的 React 应用程序。现在我正在尝试查询用户并使用 appsync 客户端:
const client = new AWSAppSyncClient({
url: awsconfig.aws_appsync_graphqlEndpoint,
region: awsconfig.aws_appsync_region,
auth: {
type: awsconfig.aws_appsync_authenticationType,
jwtToken: async () => (await Auth.currentSession()).getIdToken().getJwtToken()
},
complexObjectsCredentials: () => Auth.currentCredentials()
});
Run Code Online (Sandbox Code Playgroud)
我已经能够使用 amplify 网站上提供的示例成功运行突变
const result = await client.mutate({
mutation: gql(createTodo),
variables: {
input: {
name: 'Use AppSync',
description: 'Realtime and Offline',
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是当涉及到使用客户端运行查询时,他们提供的唯一示例是列表操作
const result = await client.query({
query: gql(listTodos)
});
Run Code Online (Sandbox Code Playgroud)
他们没有提供如何通过特定 ID 进行查询的示例,所以我想知道是否有人可以阐明此语法,提供一个示例,或者为我指出一个很好的参考方向?先感谢您。
我正在运行下面的 GraphQL 查询来在 dynamodb 表上创建数据,但得到的响应是“未授权访问 Client 类型上的 createClient”
为什么会发生这种情况。
GraphQL 查询:
`mutation addClient{
createClient(input:{
fullName: "Jhon Smith"
title: "Software Engineer"
organization: "AWS"
contactNo: "+341289655524"
email: "smithj@amazon.com"
country: "Canada"
address: "AN/458, Norton place, Down Town"
}){
fullName
}
}`
Run Code Online (Sandbox Code Playgroud)
回复 :
{
"data": {
"createClient": null
},
"errors": [
{
"path": [
"createClient"
],
"data": null,
"errorType": "Unauthorized",
"errorInfo": null,
"locations": [
{
"line": 2,
"column": 3,
"sourceName": null
}
],
"message": "Not Authorized to access createClient on type Client"
} …Run Code Online (Sandbox Code Playgroud) 我最近很喜欢与AWS Amplify合作,它基于定义的架构为 GraphQL 查询生成代码非常出色。
我遇到了一个定义自定义逻辑/验证服务器端的复杂问题。在袋子外面的AppSync(部分负责扩增出GraphQL API)生成您的架构解析器和DynamoDB表。解析器是使用Apache Velocity模板语言创建的,如果您不熟悉它,我认为它有点学习曲线。
此外,这些解析器是由 Amplify cli 自动生成的。我不确定在 AppSync 控制台或本地编辑它们是否有意义,因为每次我们推送 api 更改时,它们都会再次自动生成?
除此之外,这些自动生成的解析器实际上在将类型模型链接在一起、启用搜索和身份验证检查方面实现了很多,我真的不想接触它们,因为自动生成支持的开发速度是疯狂的。
因此,引入我的自定义逻辑的其他解决方案似乎是 Lambda 函数,用于侦听关联 DynamoDB 表的创建/更新事件。
我想我可以按照下面演示的方式进行设置,基本上允许用户正常使用 GraphQL api,并且当需要服务器验证的操作在 lambda 中对其做出反应时?
例如玩家将物品添加到他们的库存中,我们触发 lambda 函数来检查玩家之前是否拥有该物品,如果没有购买,我们验证物品数据并从玩家表中减去其成本的金币。我认为这很好用,但我的担忧是
我还缺少其他东西吗?
因此 lambda 将在幕后进行验证,我们假设这里的大多数用户都是优秀的参与者,并且他们传递给 GraphQL api 的数据是正确的,因为他们使用我们的客户端。
如果数据是意外的(坏演员),lambda 会做出反应并禁止用户。
这个解决方案是否可行/通用,还有其他选择吗?
amazon-web-services amazon-dynamodb aws-lambda aws-appsync aws-amplify
我正在将 AWS Appsync 用于我正在开发的当前应用程序并面临一个严重问题,即每当我在 Appsync 客户端中触发查询时,当互联网连接速度较慢时,请求永远不会以回调结束。我通过互联网检查了有关此主题的信息来源有限,并且还发现此问题仍然存在。
这是我用来获得响应的代码
func getAllApi(completion:@escaping DataCallback){
guard isInternetAvailabele() else {
completion(nil)
return
}
// AppSyncManager.Client() is AWSAppSyncClient Object
AppSyncManager.Client().fetch(query: GetlAllPostQuery(input: allInputs), cachePolicy:.fetchIgnoringCacheData) {
(result, error) in
var haveError:Bool = error != nil
if let _ = result?.data?.getAllPostings?.responseCode {haveError = false} else {haveError = true}
if haveError {
print(error?.localizedDescription ?? "")
completion(nil)
return
}
if result != nil{
completion(result)
}else{
completion(nil)
}
}
}
Run Code Online (Sandbox Code Playgroud)
该代码在互联网连接下工作正常,如果没有互联网,我已经在顶部进行了检查,但是当互联网连接速度较慢或 wifi 连接到我在禁用互联网数据的情况下使用手机创建的热点时,请求不会返回任何回调,它应该给出失败的警报,就像我们在请求超时时进入其他 api 一样。是否支持请求超时或我错过了什么?
注意:我在终端中收到了这些日志
Task <06E9BBF4-5731-471B-9B7D-19E5E504E57F>.<45> HTTP load failed …Run Code Online (Sandbox Code Playgroud) 如何对放大graphql api中的字段进行排序?我正在尝试在获取模型列表的同时对字段进行排序。
例如:在 listOrder 查询中对 createdDate 进行排序。
请问有什么帮助吗?
我得到了一个从 AWS-Amplify GraphQL(我相信它使用 apollo-codegen)自动生成的 TypeScript 类型,如下所示:
export type GetNoteQuery = {
getNote: {
__typename: "Note",
id: string,
createdAt: string | null,
updatedAt: string | null,
title: boolean | null,
content: string | null,
} | null,
Run Code Online (Sandbox Code Playgroud)
我想生成一个“Note”的基本类型,用作“基本”类型,以便在使用返回的数据时在我的代码中使用。即将笔记映射到 React 组件等。
有没有办法缩小这种自动生成的类型,或者以某种方式扩展它,让它看起来像:
export type GetNoteQuery = {
getNote: {
__typename: "Note",
id: string,
createdAt: string | null,
updatedAt: string | null,
title: boolean | null,
content: string | null,
} | null,
Run Code Online (Sandbox Code Playgroud) aws-appsync ×10
graphql ×5
aws-amplify ×4
graphql-js ×2
aws-lambda ×1
aws-sdk ×1
ios ×1
node.js ×1
react-native ×1
reactjs ×1
swift ×1
typescript ×1
unit-testing ×1
vtl ×1