标签: aws-appsync

无服务器GraphQL订阅

我最近开始使用GraphQL,并且能够在AWS Lambda上成功设置它,为我提供了"无服务器"架构.但是,我想利用GraphQL订阅来获得更多实时功能.

我了解AWS Lambda不允许使用WebSockets,因为只要函数运行或达到超时限制,连接就会持续.

但是有没有办法设置GraphQL后端,以便它可以利用订阅并将其保留在AWS服务中,并使其像"无服务器"应用程序一样扩展.

类似于使用AWS Lambda进行GraphQL查询和变异,然后使用不同的AWS服务进行GraphQL订阅.

aws-lambda graphql serverless-framework graphql-subscriptions aws-appsync

8
推荐指数
2
解决办法
1690
查看次数

AWS AppSync授权

我计划使用AWS Appsync在lambda函数中迁移graphQL端点,该函数由POST网关通过API网关触发.我正在研究AppSync主要是因为订阅,我无法使用Lambda函数创建.

我的身份验证机制基于Auth0,使用无密码,我的授权机制基于DynamoDB中几个表的数据,并且嵌入在graphQL解析器中,如Facebook和Apollo所推荐的那样.

更重要的是,它基于请求的每个部分,包括检查调用查询/变异的权限,之后,查询中包含的不同实体,因为正在触发相应的解析器.

据我所知,这远远不能在AWS AppSync中实现,因为它强制使用Cognito.也许某种自定义授权器,如API网关可以完成工作,但它仍然不确定,因为它需要在graphQL请求解析期间执行多次(请记住,除了初始操作检查之外,每个嵌套对象一个).

也许我可以使用通知和刷新查询来解决订阅问题,但我也要研究它.

还有其他人有这个问题吗?你打算怎么做,或者已经解决了?

任何帮助都感激不尽

卡洛斯

lambda amazon-web-services graphql graphql-subscriptions aws-appsync

8
推荐指数
1
解决办法
2680
查看次数

用于GraphQL的AWS Amplify和Apollo Client之间的区别?

我同意Apollo Client很难设置,因为它有很多样板(尽管在阅读文档之后变得很简单)和诸如AWS Amplify,URQL,Apollo Boost和Micro GraphQL React之类的东西使得在客户端上使用GraphQL变得容易.

我目前正在使用AWS AppSync并希望在AWS Amplify和Apollo Client之间做出选择,而我正考虑进入所有AWS.

那么AWS Amplify和Apollo Client有什么区别?

reactjs graphql apollo-client aws-appsync aws-amplify

8
推荐指数
1
解决办法
1972
查看次数

AWS GraphQL:变量'input'强制为NonNull类型'Input!'强制Null值.

我正在使用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(使用调试器)

是什么导致错误?

reactjs graphql aws-appsync aws-amplify

8
推荐指数
1
解决办法
3612
查看次数

如何直接从请求映射器返回?

考虑以下 GraphQL 模板:

type Foo {
  id: ID!
  bars: Bars
}

type Bar {
  id: ID!
  name: String!
}

type Bars {
  items: [Bar]!
  nextToken: String
}
Run Code Online (Sandbox Code Playgroud)

barsFoo 类型字段的映射模板如下所示:

#set($ids = [])
#foreach($id in $context.source.bars)
    #set($map = {})
    $util.qr($map.put("id", $util.dynamodb.toString($id)))
    $util.qr($ids.add($map))
#end
{
    "version" : "2018-05-29",
    "operation" : "BatchGetItem",
    "tables" : {
        "barsTable" : {
             "keys": $util.toJson($ids),
             "consistentRead": true
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

这很好用。但是如果bars字段包含和空数组[],模板显然会崩溃并出现以下错误:

"errors": [
    {
      "path": [
        "getFoo",
        "bars"
      ],
      "data": null,
      "errorType": "MappingTemplate", …
Run Code Online (Sandbox Code Playgroud)

vtl amazon-web-services graphql aws-appsync

8
推荐指数
1
解决办法
1109
查看次数

使用AWS AppSync vs Firestore进行可扩展聊天应用程序的优缺点是什么?

我打算开发一个可扩展的聊天应用程序作为项目的一部分,该项目是移动应用程序,希望扩展到Web。我来考虑以下选项

目前,我在移动应用程序中将Firebase用于其他用途(身份验证等)。

我的发现:

  • Firebase文档非常友好,并且可以用更少的时间轻松上手。

  • 根据我的计算,使用Firestore似乎比AppSync便宜(AppSync + DynamoDB的成本与Firestore的成本)

  • 根据docs,Firestore中存在某些限制。

  • AppSync使用GraphQL,因此可以更精细地访问数据。

我搜索了AppSync和Cloud Firestore之间的比较,但没有发现任何很好的深入比较。

使用AWS AppSync vs Firestore进行可扩展聊天应用程序的优缺点是什么?

scalability chat google-cloud-firestore aws-appsync

8
推荐指数
0
解决办法
1320
查看次数

Appsync 和 GraphQL:如何按嵌套值过滤列表

我有一个由 Amplify 从基本架构生成的 Appsync API。在Article模型上,一个category字段嵌套在一个metadata字段中。我想构建一个查询,提供按类别过滤的文章列表。我不清楚如何过滤嵌套值......我见过类似的问题,但类似的答案没有奏效。

AWS GraphQL 转换架构

type Article @model {
  id: ID!
  title: String!
  description: String!
  text: String!
  metadata: ArticleMetadata!
}

type ArticleMetadata {
  category: Category!
  lastModified: String!
  creationDate: String!
}

enum Category {
  javascript
  java
  ruby
  python
  haskell
}
Run Code Online (Sandbox Code Playgroud)

生成列表查询

export const listArticles = `query ListArticles(
  $filter: ModelArticleFilterInput
  $limit: Int
  $nextToken: String
) {
  listArticles(filter: $filter, limit: $limit, nextToken: $nextToken) {
    items {
      id
      title
      description
      text
      metadata { …
Run Code Online (Sandbox Code Playgroud)

graphql aws-appsync aws-amplify

8
推荐指数
1
解决办法
6535
查看次数

使用 nextToken 的 AppSync GraphQL 查询

我的schema.graphql文件graphql/queries.js通过运行amplify push命令在文件中自动生成以下查询。

这是自动生成查询的架构文件。

模式.graphql

type User @model {
  id: String!
  uuid: String!
  following: [String]
  follower: [String]
  posts: [Post] @connection(name: "Userposts", sortField: "createdAt")
}

type Post 
  @model
  @auth(
    rules: [
      { allow: owner },
      { allow: groups, groups: ["Admin"] }
    ]
  ) {
  id: ID!
  author: User! @connection(name: "Userposts")
  status: Status!
  draft: Boolean
  content: AWSJSON!
  loved: [String]
  comments: [Comment] @connection(name: "PostComments", sortField: "createdAt")
  createdAt: AWSDateTime
    updatedAt: AWSDateTime
}

enum Status {
  PRIVATE
  PUBLIC
}
Run Code Online (Sandbox Code Playgroud)

这是模式 …

graphql aws-appsync aws-amplify

8
推荐指数
1
解决办法
5120
查看次数

如何为速度模板编写单元测试?

这甚至可能吗?

你好朋友。我正在使用 AWS AppSync + DynamoDB 构建应用程序,并且我开始拥有大量解析器映射模板,所有这些模板都是使用 Apache Velocity 模板语言 (VTL) 编写的。

我开始担心的是,这些 vtl 文件对应用程序非常重要(因为它们定义了如何检索数据)并且其中一个错误可能会造成严重破坏。所以就像系统的任何关键部分一样......我想为他们编写一些自动化的单元测试。但我还没有发现其他人这样做。

  1. 如果您使用 VTL(通过 AppSync 或 API Gateway),您如何测试它们?
  2. 甚至可以为速度模板编写自动化测试吗?
  3. 还是我走上了完全错误的道路,我应该只使用 Lambdas 作为我的解析器?

提前致谢!

unit-testing vtl amazon-dynamodb aws-appsync velocity-template-language

8
推荐指数
2
解决办法
2378
查看次数

AWS AppSync + React-Apollo Query/useQuery 引发异常 this.currentObservable.query.getCurrentResult 不是函数

我是 GraphQL/Apollo 的新手,我很难用 React 应用程序设置它。

我有一个 React 组件,它从使用 Amplify/AppSync 构建的 GraphQL API 加载列表。

如果我手动调用以获取项目,即:

    const videosData = await client.query({
      query: gql(queries.listVideos)
    });
    const videosItems = videosData.data.listVideos.items;
    setVideosData(videosItems);

Run Code Online (Sandbox Code Playgroud)

奇迹般有效。但是,如果我尝试使用 Apollo Query 组件或 useQuery 挂钩,则会引发以下错误:

类型错误:this.currentObservable.query.getCurrentResult 不是函数

如果我只是添加行来使用钩子获取查询,它已经给了我这个错误

钩子调用:

const {loading, error, data, refetch} = useQuery(gql(queries.listVideos));
Run Code Online (Sandbox Code Playgroud)

引发问题的被调用函数:

QueryData.getQueryResult
node_modules/@apollo/react-hooks/lib/react-hooks.esm.js:325
  322 |     called: true
  323 |   });
  324 | } else {
> 325 |   var currentResult = this.currentObservable.query.getCurrentResult();
      | ^  326 |   var loading = currentResult.loading,
  327 |       partial = currentResult.partial,
  328 …
Run Code Online (Sandbox Code Playgroud)

reactjs graphql react-apollo aws-appsync aws-amplify

8
推荐指数
2
解决办法
3580
查看次数