

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從沒有指令的 GraphQL 結構描述開始
<a name="tools-graphql-start-from-schema"></a>

您可以從空白的 Neptune 資料庫開始，並使用沒有指令的 GraphQL 結構描述來建立資料並進行查詢。以下命令會自動建立 AWS 資源來執行此操作：

```
neptune-for-graphql \
  --input-schema-file {{(your GraphQL schema file)}}
  --create-update-aws-pipeline \
  --create-update-aws-pipeline-name {{(name for your new GraphQL API)}} \
  --create-update-aws-pipeline-neptune-endpoint {{(your Neptune database endpoint)}}:{{(port number)}} \
  --output-resolver-query-https
```

GraphQL 結構描述檔案必須包含 GraphQL 結構描述類型，如以下 TODO 範例所示。公用程式會分析您的結構描述，並根據您的類型建立延伸版本。它會針對圖形資料庫中儲存的節點新增查詢和變動，而且如果你的結構描述具有巢狀類型，它會新增類型 (儲存為資料庫中的邊緣) 之間的關係。

公用程式會建立 AppSync GraphQL API，以及所有必要 AWS 的資源。其中包括一對 IAM 角色，以及一個包含 GraphQL 解析程式碼的 Lambda 函數。命令完成時，您可以找到新的 GraphQL API，具有您在 AppSync 主控台中指定的名稱。若要對其進行測試，請使用 AppSync 功能表中的**查詢**。

以下範例說明其運作方式。

## Todo 範例，從沒有指令的 GraphQL 結構描述開始
<a name="tools-graphql-todo-example"></a>

在這個範例中，我們從一個沒有指令的 Todo GraphQL 結構描述開始，你可以在 {{???samples???}} 目錄中找到該結構描述。它包括以下兩種類型：

```
type Todo {
  name: String
  description: String
  priority: Int
  status: String
  comments: [Comment]
}

type Comment {
  content: String
}
```

此命令會處理 Todo 結構描述和空 Neptune 資料庫的端點，以建立 GraphQL API in AWS AppSync：

```
neptune-for-graphql /
  --input-schema-file ./samples/todo.schema.graphql \
  --create-update-aws-pipeline \
  --create-update-aws-pipeline-name TodoExample \
  --create-update-aws-pipeline-neptune-endpoint {{(empty Neptune database endpoint)}}:{{(port number)}} \
  --output-resolver-query-https
```

公用程式會在稱為 `TodoExample.source.graphql` 的輸出資料夾中建立新的檔案，並在 AppSync 中建立 GraphQL API。公用程式會推斷以下事項：
+ 在 Todo 類型中，它已針對新的 CommentEdge 類型新增 `@relationship`。這會指示解析程式使用稱為 CommentEdge 的圖形資料庫邊緣，將 Todo 連線至 Comment。
+ 它已新增稱為 TodoInput 的新輸入來協助查詢和變動。
+ 它已針對每個類型新增兩個查詢 (Todo、Comment)：一個用於使用 `id` 或輸入中列出的任何類型欄位來擷取單一類型，而另一個用於擷取多個值，同時使用該類型的輸入進行篩選。
+ 它已針對每種類型新增三個變動：create、update 和 delete。要刪除的類型是使用 `id` 或該類型的輸入來指定。這些變動會影響 Neptune 資料庫中儲存的資料。
+ 它已針對連線新增兩個變動：connect 和 delete。它們會採取 Neptune 所使用的來源和目標頂點的節點 ID 作為輸入，而且連線是資料庫中的邊緣。

解析程式透過名稱辨識查詢和變動，但您可以自訂它們，如[下面](tools.md)所示。

以下是 `TodoExample.source.graphql` 檔案的內容：

```
type Todo {
  _id: ID! @id
  name: String
  description: String
  priority: Int
  status: String
  comments(filter: CommentInput, options: Options): [Comment] @relationship(type: "CommentEdge", direction: OUT)
  bestComment: Comment @relationship(type: "CommentEdge", direction: OUT)
  commentEdge: CommentEdge
}

type Comment {
  _id: ID! @id
  content: String
}

input Options {
  limit: Int
}

input TodoInput {
  _id: ID @id
  name: String
  description: String
  priority: Int
  status: String
}

type CommentEdge {
  _id: ID! @id
}

input CommentInput {
  _id: ID @id
  content: String
}

input Options {
  limit: Int
}

type Query {
  getNodeTodo(filter: TodoInput, options: Options): Todo
  getNodeTodos(filter: TodoInput): [Todo]
  getNodeComment(filter: CommentInput, options: Options): Comment
  getNodeComments(filter: CommentInput): [Comment]
}

type Mutation {
  createNodeTodo(input: TodoInput!): Todo
  updateNodeTodo(input: TodoInput!): Todo
  deleteNodeTodo(_id: ID!): Boolean
  connectNodeTodoToNodeCommentEdgeCommentEdge(from_id: ID!, to_id: ID!): CommentEdge
  deleteEdgeCommentEdgeFromTodoToComment(from_id: ID!, to_id: ID!): Boolean
  createNodeComment(input: CommentInput!): Comment
  updateNodeComment(input: CommentInput!): Comment
  deleteNodeComment(_id: ID!): Boolean
}

schema {
  query: Query
  mutation: Mutation
}
```

現在，您可以建立和查詢資料。以下是用來測試新 GraphQL API (在此情況下，命名為 `TodoExampleAPI`) 的 AppSync **查詢**主控台的快照。在中間視窗中，Explorer 會為您顯示查詢和變動的清單，您可以從中挑選查詢、輸入參數和傳回欄位。此螢幕擷取畫面顯示如何使用 `createNodeTodo` 變動建立 Todo 節點類型：

![顯示 AppSync 查詢主控台建立 Todo 節點的螢幕擷取畫面](http://docs.aws.amazon.com/zh_tw/neptune/latest/userguide/images/todoCreate.png)


此螢幕擷取畫面顯示如何使用 `getNodeTodos` 查詢來查詢所有 Todo 節點：

![顯示 AppSync 查詢主控台查詢 Todo 節點的螢幕擷取畫面](http://docs.aws.amazon.com/zh_tw/neptune/latest/userguide/images/todoGetTodos.png)


在使用 `createNodeComment` 建立了註解之後，您可以使用 `connectNodeTodoToNodeCommentEdgeCommentEdge` 變動，透過指定其 ID 來連線它們。以下是要擷取 Todos 及其附加註解的巢狀查詢：

![此螢幕擷取畫面顯示巢狀查詢在 AppSync 查詢主控台中擷取 Todos 及其附加的註解](http://docs.aws.amazon.com/zh_tw/neptune/latest/userguide/images/todoNestedQuery.png)


如果您想要依照[使用指令](tools-graphql-schema-with-directives.md)中所述對 `TodoExample.source.graphql` 檔案進行變更，則可以使用已編輯的結構描述作為輸入，然後再次執行公用程式。公用程式接著會相應地修改 GraphQL API。