Quick AWS AppSync
Posted on October 2, 2021
Tags: aws
1 Summary
- GraphQL schema similar to interface or type-signature
- pipelineResolver similar to concrete implementation of interface
2 Schema
type Picture {
id: ID!
owner: ID!
src: String
}
type Query {
myCustomQuery(id: ID!): [Picture]
@aws_auth(cognito_groups: ["Admins","Viewers"])
}
schema {
query: Query
}
3 Attach dynamoDB
- Click “Create Resources”
- Use existing type >> “Picture”
input CreatePictureInput {
owner: ID!
src: String
}
input DeletePictureInput {
id: ID!
}
type Mutation {
createPicture(input: CreatePictureInput!): Picture
updatePicture(input: UpdatePictureInput!): Picture
deletePicture(input: DeletePictureInput!): Picture
}
type Picture {
id: ID!
owner: ID!
src: String
}
type PictureConnection {
items: [Picture]
nextToken: String
}
type Query {
myCustomQuery(id: ID!): [Picture]
@aws_auth(cognito_groups: ["Admins","Viewers"])
getPicture(id: ID!): Picture
listPictures(filter: TablePictureFilterInput, limit: Int, nextToken: String): PictureConnection
}
type Subscription {
onCreatePicture(id: ID, owner: ID, src: String): Picture
@aws_subscribe(mutations: ["createPicture"])
onUpdatePicture(id: ID, owner: ID, src: String): Picture
@aws_subscribe(mutations: ["updatePicture"])
onDeletePicture(id: ID, owner: ID, src: String): Picture
@aws_subscribe(mutations: ["deletePicture"])
}
input TableBooleanFilterInput {
ne: Boolean
eq: Boolean
}
input TableFloatFilterInput {
ne: Float
eq: Float
le: Float
lt: Float
ge: Float
gt: Float
contains: Float
notContains: Float
between: [Float]
}
input TableIDFilterInput {
ne: ID
eq: ID
le: ID
lt: ID
ge: ID
gt: ID
contains: ID
notContains: ID
between: [ID]
beginsWith: ID
}
input TableIntFilterInput {
ne: Int
eq: Int
le: Int
lt: Int
ge: Int
gt: Int
contains: Int
notContains: Int
between: [Int]
}
input TablePictureFilterInput {
id: TableIDFilterInput
owner: TableIDFilterInput
src: TableStringFilterInput
}
input TableStringFilterInput {
ne: String
eq: String
le: String
lt: String
ge: String
gt: String
contains: String
notContains: String
between: [String]
beginsWith: String
}
input UpdatePictureInput {
id: ID!
owner: ID
src: String
}
schema {
query: Query
mutation: Mutation
subscription: Subscription
}
- Analysis AppSync autogeneration:
- Basically builds CRUD with
- CUD with Mutation/Subscription type
- R with Query type
- type Mutations contains CREATE, UPDATE, DELETE and and their respective input types
createPicture(input: CreatePictureInput!): Picture
type CreatePictureInput {..}
- type Query contains READ in the forms of read 1 element or read list of elements
getPicture(id: ID!): Picture
listPictures(filter: TablePictureFilterInput, limit: Int, nextToken: String): PictureConnection
type PictureConnection
containsnextToken
and[Picture]
- nextToken is alot like redis SCAN’s Last Searched Index,
- listPictures will only return a partial list, and the nextToken is the index of the next partial list until nextToken is null
type TablePictureFilterInput
containsTable____FilterInput
- Basically builds CRUD with
4 AppSync Query builder UI
- Input is boxed in green
- Output is boxed in orange
- Query builder is boxed in brown
- Query result is the far right sidebar
NOTICE: Even though owner*: hi
is used for Input, the Query result does not show any owner results. That is because we did not include owner
in the output boxed in orange.