Understand GraphQL Schema Requirements

The Salesforce Connect adapter for GraphQL requires that the GraphQL schema adhere to a specific format. This representative schema is designed for you to understand how to construct a schema that works with Salesforce Connect.

//Represents the pattern to follow for each object; ObjName denotes the name of a GraphQL object

type Query {
    objName(
        limit: Int,
        offset: Int,
        orderBy: [ObjName_OrderByInput],
        where: ObjName_FilterInput,
        first: Int,
        after: String
    ): ObjName_Connection
        <additional object queries...>
        node(id: ID!): Node
}

type Mutation {
    create_ObjName(input: ObjName_CreateInput!): ObjName
    <additional create mutations>
    ...
    delete_ObjName(id: ID!): ObjName
    <additional delete mutations>
    ...
    update_ObjName(input: ObjName_UpdateInput!): ObjName
    <additional update mutations>
    ...
}

type ObjName implements Node {
    id: ID!
    <fieldName: fieldType>
    ...
}

type ObjName_Connection {
    edges: [ObjName_Edge]
    pageInfo: PageInfo!
}

input ObjName_CreateInput {
        <fieldName: fieldType>
        ...
}

input ObjName_UpdateInput {
    id: ID!
    <fieldName: fieldType>
    ...
}

type ObjName_Edge {
    cursor: String!
    node: ObjName
}

input ObjName_FilterInput {
    and: [ObjName_FilterInput]
    not: ObjName_FilterInput
    or: [ObjName_FilterInput]
    id: IDOperator
    <fieldName: fieldTypeOperator>
    ...
}

input ObjName_OrderByInput {
    id: OrderByClause
    <fieldName >: OrderByClause
    ...
}

//Represents common code, not specific to the objects

interface Node {
    id: ID!
}

enum NullsOrder {
    NULLS_FIRST
    NULLS_LAST
}

input OrderByClause {
    direction: Direction
    nulls: NullsOrder
}

type PageInfo {
    endCursor: String
    hasNextPage: Boolean!
    hasPreviousPage: Boolean!
    startCursor: String
}

input StringOperator {
    eq: String
    gt: String
    ge: String
    in: [String]
    like: String
    lt: String
    le: String
    ne: String
    nin: [String]
}

input AWSDateOperator {
    eq: AWSDate
    gt: AWSDate
    ge: AWSDate
    in: [AWSDate]
    like: AWSDate
    lt: AWSDate
    le: AWSDate
    ne: AWSDate
    nin: [AWSDate]
}

input AWSDateTimeOperator {
    eq: AWSDateTime
    gt: AWSDateTime
    ge: AWSDateTime
    in: [AWSDateTime]
    like: AWSDateTime
    lt: AWSDateTime
    le: AWSDateTime
    ne: AWSDateTime
    nin: [AWSDateTime]
}

input AWSJSONOperator {
    eq: AWSJSON
    gt: AWSJSON
    ge: AWSJSON
    in: [AWSJSON]
    like: AWSJSON
    lt: AWSJSON
    le: AWSJSON
    ne: AWSJSON
    nin: [AWSJSON]
}

input AWSTimeOperator {
    eq: AWSTime
    gt: AWSTime
    ge: AWSTime
    in: [AWSTime]
    like: AWSTime
    lt: AWSTime
    le: AWSTime
    ne: AWSTime
    nin: [AWSTime]
}

input BooleanOperator {
    eq: Boolean
    gt: Boolean
    gebolded: Boolean
    in: [Boolean]
    like: Boolean
    lt: Boolean
    le: Boolean
    ne: Boolean
    nin: [Boolean]
}

enum Direction {
    ASC
    DESC
}

input FloatOperator {
    eq: Float
    gt: Float
    ge: Float
    in: [Float]
    like: Float
    lt: Float
    le: Float
    ne: Float
    nin: [Float]
}

input IDOperator {
    eq: ID
    gt: ID
    ge: ID
    in: [ID]
    like: ID
    lt: ID
    le: ID
    ne: ID
    nin: [ID]
}

input IntOperator {
    eq: Int
    gt: Int
    ge: Int
    in: [Int]
    like: Int
    lt: Int
    le: Int
    ne: Int
    nin: [Int]
}