PRISMA基礎:入門二
3604 ワード
本文はPrismaを用いてGraphQLサービスシリーズを構築する.
PRISMAベース:はじめにPRISMAのベースについて理解しました.次に、Prismaサービスの導入方法、クエリーと突然変異(mutations)を使用してGraphQL APIにアクセスする方法を見てみましょう.
ここでは主に、データモデル(Data Model)の修正によるAPIの更新について説明します.データモデル(Data Model)を修正する. は、サービスのAPIを更新するために変更を配置する.
データモデルの修正(Data Model)
は、 新しい は、
(1)まず必要なフィールドを
一方、
注:現在、
この場合、変更はローカルのみで、GraphQL Playgroundで開くと、まだ配置されていないため、新しい追加フィールドにアクセスできません.
APIを更新するための変更の配置
PRISMAベース:はじめにPRISMAのベースについて理解しました.次に、Prismaサービスの導入方法、クエリーと突然変異(mutations)を使用してGraphQL APIにアクセスする方法を見てみましょう.
ここでは主に、データモデル(Data Model)の修正によるAPIの更新について説明します.
データモデルの修正(Data Model)
この2編(PRISMA入門1と本稿)の最後にしなければならないことは、データモデル(Data Model)を修正してAPIを更新する方法です.
データモデル(Data Model)を次のように変更します.
User
タイプにage
フィールドを追加します.User
が最初に作成または最後に更新された正確な時間を追跡する.Post
タイプとそのフィールドを追加します.User
とPost
のタイプの間に、User
が複数のPost
ノードを作成できることを示す一対の多関係を作成する.(1)まず必要なフィールドを
User
型に追加する.type User {
id: ID! @unique
createdAt: DateTime!
updatedAt: DateTime!
name: String!
age: Int
}
age
フィールドのタイプはIntであり、User
タイプでは必須ではない.これは、年齢が空のUser
ノードを格納できることを意味する(実際には、以前に作成されたSarahというUser
がこの場合である).一方、
createdAt
およびupdatedAt
は、実際にはPrismaによって管理される特殊なフィールドである.Prisma内部では、これらのフィールドは常に維持されます.ただし、データ・モデルのタイプ定義に追加した場合にのみ、APIに露出します(id
フィールドも同様です).注:現在、
createdAt
、updatedAt
、id
のフィールドの値は読み取り専用です.これらのフィールドの値は、通常の突然変異(mutations)によって後で設定できます.この機能とスケジュールの詳細については、GitHub issueを参照してください.この場合、変更はローカルのみで、GraphQL Playgroundで開くと、まだ配置されていないため、新しい追加フィールドにアクセスできません.
APIを更新するための変更の配置
(2)変更を有効にするには、サービスを再導入する必要があります.hello-world
ディレクトリ(PRISMA入門1参照)で、次のコマンドを実行します.prisma deploy
新しいGraphQL Playgroundまたはreload
が開いているschema
(reload schema
用のボタンはGraphQL APIのURLの横にあるリフレッシュボタン)を開くことができます.以上のようにして、User
タイプに新しく追加されたフィールドにアクセスできます.
(3)次の突然変異(mutation)を試して、新しいUser
ノードを作成し、age
フィールドを設定してみましょう.mutation {
createUser(data: {
name: "John"
age: 42
}) {
id
createdAt
updatedAt
}
}
最後に、このチュートリアルでは、Post
タイプをデータモデルに追加し、既存のUserタイプとの関係を作成します.
タイプ間の関係の作成は非常に自然です(natural):関係の一端を表す新しいフィールドを追加するだけです.関係は双方向に行うことができますが、必要ありません.
次に、リレーションシップ付きの新しいPost
タイプの定義を開始します.
(4)datamodel.graphql
を開き、次の種類の定義を追加します.type Post {
id: ID! @unique
title: String!
author: User!
}
(5)これらの変更を適用するには、hello-world
ディレクトリでprisma deploy
を再度実行する必要があります.
各Post
は、connectパラメータを用いてネスト変異(mutations)を行うUser
ノードをその著者として必要とするようになった.
(6)例えば、新しいPost
ノードを既存のUser
ノードに接続するために、次の突然変異(mutations)を送信することができます(もちろん、__USER_ID__
プレースホルダをユーザーの実際のIDに置き換える必要があります):mutation {
createPost(data: {
title: "GraphQL is awesome"
author: {
connect: {
id: "__USER_ID__"
}
}
}) {
id
}
}
また、User
とPost
のタイプの間に適切な一対の多関係があるように、関係の他端を追加します.
(7)datamodel.graphql
を開き、User
のタイプにposts
という新しいフィールドを追加します.コードは以下のようになります.type User {
id: ID! @unique
createdAt: DateTime!
updatedAt: DateTime!
name: String!
age: Int
posts: [Post!]!
}
こんなに簡単です!新しいposts
フィールドは、User
によって作成されたパブリケーションノードのリストを表す.
(8)もちろん、これでネストされたクエリー(queries)を送信できます.User
ノードとUser
ノードのすべてのPost
ノードが必要です.{
users {
name
posts {
title
}
}
}
prisma deploy
mutation {
createUser(data: {
name: "John"
age: 42
}) {
id
createdAt
updatedAt
}
}
type Post {
id: ID! @unique
title: String!
author: User!
}
mutation {
createPost(data: {
title: "GraphQL is awesome"
author: {
connect: {
id: "__USER_ID__"
}
}
}) {
id
}
}
type User {
id: ID! @unique
createdAt: DateTime!
updatedAt: DateTime!
name: String!
age: Int
posts: [Post!]!
}
{
users {
name
posts {
title
}
}
}