标签: aws-appsync

AWS AppSync - 速率限制?

有没有办法使用AWS AppSync轻松限制客户端?API Gateway有这个,它们是非常相似的服务.我希望能够限制个别客户端 - 所以一个用户不能坐在那里并且太难敲打API.

可能不在我的愿望清单的顶部,但肯定会很高兴.

amazon-web-services aws-appsync

7
推荐指数
1
解决办法
659
查看次数

传递给解析器的不是有效的 GraphQL DocumentNode。您可能需要使用“graphql-tag”或其他方法将操作转换为文档

我是 react-native、graphql 和 Aws AppSync 的新手。我们尝试使用 aws appsync 构建一个react-native应用程序。当我运行react-native run-android时,它抛出一个错误说

传递给解析器的不是有效的 GraphQL DocumentNode。您可能需要使用“graphql-tag”或其他方法将操作转换为文档

请看一下

https://i.stack.imgur.com/hr5fA.jpg

用于获取参考的图像 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)

reactjs aws-sdk graphql react-native aws-appsync

7
推荐指数
1
解决办法
2万
查看次数

有没有办法在本地和/或CI/CD中测试AppSync代码?

我希望使用AppSync深入研究项目.到目前为止,我已经能够找到大量的文章,并且在线提供了关于点击哪些按钮以便运行示例项目的所有步骤,但是它们似乎都没有涉及如何从本地开发处理它或在CI/CD环境中.它可能是我的"老派"关于dev通常如何工作的想法,但我期待在某种程度上模拟本地环境以进行开发和运行单元测试,但我似乎无法找到任何方法来做到这一点.当我到达UI部分时,我不知道如何让后端的本地开发实例运行.

人们不再以这种方式发展,而是选择站起来"开发堆栈"吗?我只是想确保我不会在将来把自己画成一个角落.

continuous-integration automated-tests unit-testing continuous-deployment aws-appsync

7
推荐指数
1
解决办法
957
查看次数

如何使用 $util.error 在 AppSync 中发送自定义错误

我对 AppSync 错误处理有疑问。我想发送errorInfo对象以及错误响应,我尝试了$util.error. 根据文件:

\n\n

https://docs.aws.amazon.com/appsync/latest/devguide/resolver-util-reference.html

\n\n
\n

$util.error(String, String, Object, Object)

\n\n

抛出自定义错误。如果模板检测到请求或调用结果有错误,则可以在请求或响应映射模板中使用该模板。此外,还可以指定 errorType 字段、data 字段和 errorInfo 字段。数据值将添加到 GraphQL 响应中错误内的相应错误块中。注意:数据将根据查询选择集进行过滤。errorInfo 值将添加到 GraphQL 响应中错误内相应的 error\n 块中。注意:errorInfo 将不会根据查询选择集进行过滤。

\n
\n\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\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我在解析器上所做的:

\n\n
var 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)

error-handling vtl graphql graphql-js aws-appsync

7
推荐指数
1
解决办法
1万
查看次数

AWS Appsync Javascript 查询示例和输入语法

我正在使用 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 aws-appsync aws-amplify

7
推荐指数
1
解决办法
2813
查看次数

创建突变 + GraphQL 时出现“未授权访问”错误

我正在运行下面的 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)

node.js graphql graphql-js aws-appsync aws-amplify-cli

7
推荐指数
1
解决办法
6691
查看次数

使用 AppSync 和 DynamoDB 运行 Lambda 函数以进行服务器端验证

我最近很喜欢与AWS Amplify合作,它基于定义的架构为 GraphQL 查询生成代码非常出色。

我遇到了一个定义自定义逻辑/验证服务器端的复杂问题。在袋子外面的AppSync(部分负责扩增出GraphQL API)生成您的架构解析器和DynamoDB表。解析器是使用Apache Velocity模板语言创建的,如果您不熟悉它,我认为它有点学习曲线。

此外,这些解析器是由 Amplify cli 自动生成的。我不确定在 AppSync 控制台或本地编辑它们是否有意义,因为每次我们推送 api 更改时,它们都会再次自动生成?

除此之外,这些自动生成的解析器实际上在将类型模型链接在一起、启用搜索和身份验证检查方面实现了很多,我真的不想接触它们,因为自动生成支持的开发速度是疯狂的。

因此,引入我的自定义逻辑的其他解决方案似乎是 Lambda 函数,用于侦听关联 DynamoDB 表的创建/更新事件。

我想我可以按照下面演示的方式进行设置,基本上允许用户正常使用 GraphQL api,并且当需要服务器验证的操作在 lambda 中对其做出反应时?

例如玩家将物品添加到他们的库存中,我们触发 lambda 函数来检查玩家之前是否拥有该物品,如果没有购买,我们验证物品数据并从玩家表中减去其成本的金币。我认为这很好用,但我的担忧是

  1. 我们允许先将未经验证的数据写入数据库(尽管它已通过 graphql 类型系统和身份验证检查进行验证。)
  2. 涉及 Lambda 的额外成本(在我看来,为了节省时间和使用 NodeJS 而不是 Apache Velocity 来定义语言的能力,这是值得的)

我还缺少其他东西吗?

在此处输入图片说明

因此 lambda 将在幕后进行验证,我们假设这里的大多数用户都是优秀的参与者,并且他们传递给 GraphQL api 的数据是正确的,因为他们使用我们的客户端。

如果数据是意外的(坏演员),lambda 会做出反应并禁止用户。

这个解决方案是否可行/通用,还有其他选择吗?

amazon-web-services amazon-dynamodb aws-lambda aws-appsync aws-amplify

6
推荐指数
0
解决办法
543
查看次数

如何设置 AWS Appsync 请求超时限制 || AWSAppSync 客户端不提供回调

我正在将 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)

amazon-web-services ios swift aws-appsync aws-appsync-ios

6
推荐指数
1
解决办法
3137
查看次数

如何在aws-amplify中对列表查询中的字段进行排序?

如何对放大graphql api中的字段进行排序?我正在尝试在获取模型列表的同时对字段进行排序。

例如:在 listOrder 查询中对 createdDate 进行排序。

请问有什么帮助吗?

aws-appsync aws-amplify

6
推荐指数
1
解决办法
4057
查看次数

如何缩小由graphQL codegen自动生成的Typescript类型?

我得到了一个从 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)

typescript graphql aws-appsync aws-amplify

6
推荐指数
1
解决办法
431
查看次数