![]() * chore: Fixing SwiftLint warnings in Amplify project * chore: Fixing SwiftLint warnings in APICategoryPlugin project * chore: Fixing SwiftLint warnings in AnalyticsCategoryPlugin project * chore: Fixing SwiftLint warnings in AWSCognitoAuthPlugin project * chore: Fixing SwiftLint warnings in DataStoreCategoryPlugin project * chore: Fixing SwiftLint warnings in PredictionsCategoryPlugin project * chore: Fixing SwiftLint warnings in StoragePlugin project |
||
---|---|---|
.. | ||
GraphQLConnectionScenario1Tests.swift | ||
GraphQLConnectionScenario2Tests.swift | ||
GraphQLConnectionScenario3Tests+Helpers.swift | ||
GraphQLConnectionScenario3Tests+List.swift | ||
GraphQLConnectionScenario3Tests+Subscribe.swift | ||
GraphQLConnectionScenario3Tests.swift | ||
GraphQLConnectionScenario4Tests.swift | ||
GraphQLConnectionScenario5Tests.swift | ||
GraphQLConnectionScenario6Tests.swift | ||
GraphQLModelBasedTests+Concurrency.swift | ||
GraphQLModelBasedTests+List.swift | ||
GraphQLModelBasedTests.swift | ||
GraphQLScalarTests.swift | ||
GraphQLTestBase.swift | ||
README.md |
README.md
Model Based GraphQL
The following steps demonstrate how to set up a GraphQL endpoint with AppSync. The auth configured will be API key. The set up is used to run the tests in GraphQLModelBasedTests.swift
Set-up
-
amplify init
-
amplify add api
? Please select from one of the below mentioned services: `GraphQL`
? Provide API name: `<APIName>`
? Choose the default authorization type for the API `API key`
? Enter a description for the API key:
? After how many days from now the API key should expire (1-365): `365`
? Do you want to configure advanced settings for the GraphQL API `No, I am done`
? Do you have an annotated GraphQL schema? `Yes`
? Provide your schema file path: `schema.graphql`
When asked to provide the schema, create the schema.graphql
file
enum PostStatus {
PRIVATE
DRAFT
PUBLISHED
}
type Post @model {
id: ID!
title: String!
content: String!
createdAt: AWSDateTime!
updatedAt: AWSDateTime
draft: Boolean
rating: Float
status: PostStatus
comments: [Comment] @connection(name: "PostComment")
}
type Comment @model {
id: ID!
content: String!
createdAt: AWSDateTime!
post: Post @connection(name: "PostComment")
}
## These are examples from https://docs.amplify.aws/cli/graphql-transformer/connection
# 1 - Project has a single optional Team
type Project1 @model {
id: ID!
name: String
team: Team1 @connection
}
type Team1 @model {
id: ID!
name: String!
}
# 2 - Project with explicit field for team’s id
type Project2 @model {
id: ID!
name: String
teamID: ID!
team: Team2 @connection(fields: ["teamID"])
}
type Team2 @model {
id: ID!
name: String!
}
# 3 - Post Comment - keyName reference key directive
type Post3 @model {
id: ID!
title: String!
comments: [Comment3] @connection(keyName: "byPost3", fields: ["id"])
}
type Comment3 @model
@key(name: "byPost3", fields: ["postID", "content"]) {
id: ID!
postID: ID!
content: String!
}
# 4 - Post Comment bi-directional belongs to
type Post4 @model {
id: ID!
title: String!
comments: [Comment4] @connection(keyName: "byPost4", fields: ["id"])
}
type Comment4 @model
@key(name: "byPost4", fields: ["postID", "content"]) {
id: ID!
postID: ID!
content: String!
post: Post4 @connection(fields: ["postID"])
}
# 5 Many to Many
type Post5 @model {
id: ID!
title: String!
editors: [PostEditor5] @connection(keyName: "byPost5", fields: ["id"])
}
# Create a join model
type PostEditor5
@model
@key(name: "byPost5", fields: ["postID", "editorID"])
@key(name: "byEditor5", fields: ["editorID", "postID"]) {
id: ID!
postID: ID!
editorID: ID!
post: Post5! @connection(fields: ["postID"])
editor: User5! @connection(fields: ["editorID"])
}
type User5 @model {
id: ID!
username: String!
posts: [PostEditor5] @connection(keyName: "byEditor5", fields: ["id"])
}
# This is one of the default schemas provided when you run `amplify add api`
# > Do you have an annotated GraphQL schema? `No`
# > Choose a schema template: `One-to-many relationship (e.g., “Blogs” with “Posts” and “Comments”)`
# 6 - Blog Post Comment
type Blog6 @model {
id: ID!
name: String!
posts: [Post6] @connection(keyName: "byBlog", fields: ["id"])
}
type Post6 @model @key(name: "byBlog", fields: ["blogID"]) {
id: ID!
title: String!
blogID: ID!
blog: Blog6 @connection(fields: ["blogID"])
comments: [Comment6] @connection(keyName: "byPost", fields: ["id"])
}
type Comment6 @model @key(name: "byPost", fields: ["postID", "content"]) {
id: ID!
postID: ID!
post: Post6 @connection(fields: ["postID"])
content: String!
}
# Scalars, Lists, Enums
type ScalarContainer @model {
id: ID!
myString: String
myInt: Int
myDouble: Float
myBool: Boolean
myDate: AWSDate
myTime: AWSTime
myDateTime: AWSDateTime
myTimeStamp: AWSTimestamp
myEmail: AWSEmail
myJSON: AWSJSON
myPhone: AWSPhone
myURL: AWSURL
myIPAddress: AWSIPAddress
}
type ListIntContainer @model {
id: ID!
test: Int!
nullableInt: Int
intList: [Int!]!
intNullableList: [Int!]
nullableIntList: [Int]!
nullableIntNullableList: [Int]
}
type ListStringContainer @model {
id: ID!
test: String!
nullableString: String
stringList: [String!]!
stringNullableList: [String!]
nullableStringList: [String]!
nullableStringNullableList: [String]
}
type EnumTestModel @model {
id: ID!
enumVal: TestEnum!
nullableEnumVal: TestEnum
enumList: [TestEnum!]!
enumNullableList: [TestEnum!]
nullableEnumList: [TestEnum]!
nullableEnumNullableList: [TestEnum]
}
enum TestEnum {
VALUE_ONE
VALUE_TWO
}
type NestedTypeTestModel @model {
id: ID!
nestedVal: Nested!
nullableNestedVal: Nested
nestedList: [Nested!]!
nestedNullableList: [Nested!]
nullableNestedList: [Nested]!
nullableNestedNullableList: [Nested]
}
type Nested {
valueOne: Int
valueTwo: String
}
-
amplify push
-
Copy
amplifyconfiguration.json
over asGraphQLModelBasedTests-amplifyconfiguration.json
to~/.aws-amplify/amplify-ios/testconfiguration/