尝试使用AppSync来了解GraphQL

简而言之

我根据AppSync的快速入门创建了一个样例模式,以下是我的笔记:
https://docs.aws.amazon.com/zh_cn/appsync/latest/devguide/quickstart-launch-a-sample-schema.html

GraphQL是一种查询语言。

日本語でトップにある公式の翻訳

GraphQL是一种API查询语言,也是一个用于运行这些查询的运行时。GraphQL能够提供API内数据的清晰易懂的描述,并使客户端能够精确地请求所需的内容,从而使API能够随着时间的推移进行演进,并启用强大的开发者工具。

    • 公式:https://graphql.org/

参考:https://eh-career.com/engineerhub/entry/2018/12/26/103000

AppSync 是什么?

    • awsが提供する完全マネージメント型のGraphQL サービスのこと

 

    公式ドキュメント:https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/welcome.html

我试试做快速入门。

    https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/quickstart-launch-a-sample-schema.html

按照上述的步骤,创建事件应用程序的示例架构后,会创建新的模式定义以及作为数据源的DynamoDB表。以下是模式定义的部分摘录。

type Event {
    id: ID!
    name: String
    where: String
    when: String
    description: String
    # Paginate through all comments belonging to an individual post.
    comments(limit: Int = 10, nextToken: String): CommentConnection
}

type Mutation {
    # Create a single event.
    createEvent(
        name: String!,
        when: String!,
        where: String!,
        description: String!
    ): Event
    # Delete a single event by id.
    deleteEvent(id: ID!): Event
    # Comment on an event.
    commentOnEvent(eventId: ID!, content: String!, createdAt: String!): Comment
}

type Query {
    # Get a single event by id.
    getEvent(id: ID!): Event
    # Paginate through events.
    listEvents(filter: TableEventFilterInput, limit: Int = 10, nextToken: String): EventConnection
}

type Subscription {
    subscribeToEventComments(eventId: String!): Comment
        @aws_subscribe(mutations: ["commentOnEvent"])
}

schema {
    query: Query
    mutation: Mutation
    subscription: Subscription
}

模式

    ルート型と呼ばれるもの
schema {
    query: Query
    mutation: Mutation
    subscription: Subscription
}

查询

    GraphQLにおける、データ取得を行う仕組み。
type Query {
    # Get a single event by id.
    getEvent(id: ID!): Event
    # Paginate through events.
    listEvents(filter: TableEventFilterInput, limit: Int = 10, nextToken: String): EventConnection
}

突变 (tū

    GraphQLにおける、データを更新する仕組み。登録、更新、削除処理等を行う
type Mutation {
    # Create a single event.
    createEvent(
        name: String!,
        when: String!,
        where: String!,
        description: String!
    ): Event
    # Delete a single event by id.
    deleteEvent(id: ID!): Event
    # Comment on an event.
    commentOnEvent(eventId: ID!, content: String!, createdAt: String!): Comment
}

订阅

请参考以下链接查看相关内容:
https://qiita.com/yoshii0110/items/fbee34d5c235a2a064f9
https://qiita.com/yoshii0110/items/3d9ec03215537646b65c

可以通过Mutation来触发基于事件的处理。
Mutation指的是GraphQL中的事务处理(Put/Post/Delete)。
因此,当客户端在GraphQL服务器上执行Put/Post/Delete时,如果有订阅该操作的客户端,可以向该客户端推送已执行操作的数据。

type Subscription {
    subscribeToEventComments(eventId: String!): Comment
        @aws_subscribe(mutations: ["commentOnEvent"])
}

数据源

数据源是用户账户中 AWS 资源上可由 AWS AppSync 代为访问的部分。

    DynamoDB、RDS(Aurora Serverless)、Elasticsearch、Lambda、HTTPエンドポイント等を指定することが可能

解决者

解析器是将GraphQL请求转换为数据源可以理解的格式的函数。解析器具有访问上下文对象的能力,并定义了请求和响应模板的转换和执行逻辑。

    • データソース同様に、DynamoDB、RDS(Aurora Serverless)、Elasticsearch、Lambda、HTTPエンドポイント等を指定することが可能

 

    • ドキュメント:https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/resolver-mapping-template-reference.html

 

    Queryおよび、Mutationにはリゾルバーと呼ばれるものがアタッチされており、リゾルバーを介してデーターソース(今回はDynamodb)からデータの取得や、登録、削除を行うことが可能。AWSコンソール上のResolversから確認ができ、リゾルバーの中身は以下のようになっている。

突变:对于CreateEvent的解析器

数据源名称:AppSyncEventTable

{
    "version": "2017-02-28",
    "operation": "PutItem",
    "key": {
        "id": { "S": "$util.autoId()"}
    },
    "attributeValues": {
        "name": { "S": "$context.arguments.name" },
        "where": { "S": "$context.arguments.where" },
        "when": { "S": "$context.arguments.when" },
        "description": { "S": "$context.arguments.description" }
    }
}
$util.toJson($context.result)

查询:对于getEvents的解析器

数据源名称:AppSyncEventTable

{
    "version": "2017-02-28",
    "operation": "GetItem",
    "key": {
        "id": { "S": "$context.arguments.id" }
    }
}
$util.toJson($context.result)

执行Mutation和Query

    • https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/quickstart-write-queries.html

 

    • AWSコンソールの「クエリ」から、クエリを実行することが可能。クエリのリクエストおよびレスポンスのフォールドを選択することが可能。

Mutationの実行

実行すると、DynamoDBへデータが登録される

mutation add {
    createEvent(
        name:"My First Event"
        where:"Today"
        when:"My House"
        description:"Very first event"
    ){
        id
        name
        where
        when
        description
    }
}
    queryの実行
query get {
    getEvent(id:"XXXXXX-XXXX-XXXXXXX-XXXX-XXXXXXXXX"){
        name
        where
        when
        description
    }
}
{
  "data": {
    "getEvent": {
      "id": "db9ac484-1424-4c07-b470-d7238efad04b",
      "name": "My First Event",
      "when": "Today",
      "where": "My House",
      "description": "Very first event"
    }
  }
}
    curl でのquery実行も可能
$ curl -X POST -H "Content-Type:application/graphql" -H "x-api-key:[APIキー]" -d '{ "query": "query { getEvent(id: \"[EventTableのID]\") { name } }" }' [APIURL]

附言

暫時觸碰一下,但還無法完全掌握整體情況,所以會繼續研究關於REST的詳細比較和優缺點等。

我还想阅读其他的东西。

    • https://note.com/konpyu/n/nc4fd122644a1

 

    • https://circleci.com/ja/blog/introduction-to-graphql/

 

    • https://qiita.com/NagaokaKenichi/items/a4991eee26e2f988c6ec

 

    • https://www.webprofessional.jp/rest-2-0-graphql/

 

    • https://wawoon.dev/posts/tips-of-graphql-schema-design

 

    • https://qiita.com/hitochan777/items/04c16ca770f7b3a84af5

 

    • https://qiita.com/hitochan777/items/450ae5a1ff821a217179

 

    • https://eh-career.com/engineerhub/entry/2018/12/26/103000

 

    https://bitjourney.kibe.la/shared/entries/1f26acbe-315f-42b8-9ecd-11bcaac5b697
广告
将在 10 秒后关闭
bannerAds