当前位置: 首页 > 知识库问答 >
问题:

如何使用模式。graphql而不是schema。appsync和amplify项目中的json?

壤驷兴朝
2023-03-14

我的项目是用vue构建的。js和severless框架,当我尝试将其与Aws AppSync和Amplify(通过使用Amplify cli)集成时,它会自动生成一个模式。/src/graphql下的json几乎不可读。因此,每次我想更改模式时,我都会转到appsync控制台,在那里更改它,然后执行以下操作之一:

>

  • 执行放大终端中的api更新,以便它更新云中发生的任何变化,并相应地更新我的本地模式。

    下载模式。更改后appsync控制台中的json文件。来回走动是非常耗费精力的。

    所以我的问题是:

    >

  • 我可以在项目中使用schema.graphql而不是不可读的schema.json

    我还注意到,如果我注释掉schema.json中的每一行,甚至在 /src/graphql中完全删除schema.json,当我运行它时,它不会给我任何错误,为什么会发生这种情况?

    提前谢谢。


  • 共有3个答案

    井唯
    2023-03-14
    1. 在amplify/backend/API/schema中更改模式。graphql文件如下面的示例所示

    例如(一对多关系)单个用户将有更多的帖子

    type User @model {
      id: ID!
      name: String
      posts: [Post] @connection(keyName: "postsByUser", fields: ["id"])
      createdAt: AWSDateTime!
      updatedAt: AWSDateTime!
    }
    
    type Post @model 
    @key(name: "postsByUser", fields: ["userID"]) {
      id: ID!
      description: String!  
      userID: ID!
      user: User @connection(fields: ["userID"])
      createdAt: AWSDateTime!
      updatedAt: AWSDateTime!
    }
    

    然后保存

    amplify api gql-compile
    

    检查后给放大推送,它会改变模式、数据源、查询

    更新/生成架构。json,查询

    amplify add codegen bbp3andl**********  (->appsync id)
    

    请参阅此链接以编写模式模型https://blog.grandstack.io/graphql-api-configuration-with-neo4j-graphql-js-bf7a1331c793

    金皓君
    2023-03-14

    我在Amplify方面没有太多经验,但我在Serverless上使用过AppSync。我在repo中的版本控制下维护模式(使用cleaner SDL格式),一个CI脚本上载到S3,然后通过Cloudformation(嵌入到serverless.yml中)更新AppSync。

    AWS::AppSync::GraphQLSchema资源允许内联模式(不太干净)或从S3下拉。拥有一个单独的文件还使您能够在本地进行测试,并更好地跟踪更改/漂移。

    松俊美
    2023-03-14

    这个问题有点老了,但它可能会帮助某些人:

    模式。json文件是自省模式[1]。它的设计是机器可读的,因此您最喜欢的库可以帮助您在客户端验证您的请求,它当然不是为人类可读或可编辑而设计的。

    相反,您应该编辑amplify/backend/api/

    1. 根据[2]中的指令和转换器处理该模式文件(如果要添加操作模式、云信息或其他资源的自定义指令,还可以添加自己的转换器)。这个过程的输出在build/graphql中。API文件夹中的架构
    2. 构建cloudformation来部署它,类似于@peter-n自己所做的
    3. 部署它,然后
    4. 为您获取内省模式(schema.json),并将其保存到中的schemaPath中给定的位置。graphqlconfig。yml,默认情况下,它是您的src/graphql目录

    [1]https://graphql.org/learn/introspection/

    [2]https://docs.amplify.aws/cli/graphql-transformer/directives

     类似资料:
    • 我使用aws cdk设置了我的AppSync api,但没有使用他们的amplify框架。我正在试图弄清楚如何/是否可以从我的AppSync文件,但不使用amplify,即无法访问命令。我确实尝试过安装和运行它,但我假设amplify希望文件位于某些目录中,因此失败了。 我调查https://graphql-code-generator.com但由于AppSync使用的特殊类型(如)无法工作,解决

    • 我为appsync迁移了一个Flatter本地插件来放大。现在我想知道在appsync控制台中更新GraphQL之后,如何在我的Flatter项目的android部分生成代码。 最初我使用:

    • 我对GraphQL,Appsync和放大器非常陌生。我使用AWS AppSync与放大器通过GraphQL查询从DynamoDB表获取记录。前端在ReactJS中。看看aws文档上的一些例子,我似乎可以用JSON格式获取记录,就像它存储在表中一样。我想找到一些留档或示例,说明如何迭代返回的记录集,并在返回的数据发送回客户端之前对其执行一些计算。但是我无法将在线留档与我想要实现的目标联系起来。 例如

    • Amplify是否支持此处概述的脱机功能:https://docs.aws.amazon.com/appsync/latest/devguide/building-a-client-app-react.html#offline-背景 我应该这样设置吗?https://aws.github.io/aws-amplify/media/api_guide#configuration-for-graphq

    • 我的DynamoDB表数据架构: 我的主要用例是,我有一个“PK”和“SK”的范围,这是目标时间范围,并查询DDB以获得“摘要”列表。这种数据设计适用于DDB API。 现在,我想使用AppSync为这个DynamoDB for Amplify应用程序创建一个GraphQL API。所以我创建了一个像这样的GraphQL模式: GraphQL自动为我创建了2个查询API:和。支持我的是,当我列出A

    • 我使用@aws cdk/aws appsync中的代码优先方法来生成我的graphql模式。为了生成Typescript代码,我需要一种检索模式的方法。部署前的graphql(可能以某种方式从命令中提取它?)。