PRISMA基礎:入門二

3604 ワード

本文はPrismaを用いてGraphQLサービスシリーズを構築する.
PRISMAベース:はじめにPRISMAのベースについて理解しました.次に、Prismaサービスの導入方法、クエリーと突然変異(mutations)を使用してGraphQL APIにアクセスする方法を見てみましょう.
ここでは主に、データモデル(Data Model)の修正によるAPIの更新について説明します.
  • データモデル(Data Model)を修正する.
  • は、サービスのAPIを更新するために変更を配置する.

  • データモデルの修正(Data Model)


    この2編(PRISMA入門1と本稿)の最後にしなければならないことは、データモデル(Data Model)を修正してAPIを更新する方法です.
    データモデル(Data Model)を次のように変更します.
  • Userタイプにageフィールドを追加します.
  • は、Userが最初に作成または最後に更新された正確な時間を追跡する.
  • 新しいPostタイプとそのフィールドを追加します.
  • は、UserPostのタイプの間に、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フィールドも同様です).
    注:現在、createdAtupdatedAtidのフィールドの値は読み取り専用です.これらのフィールドの値は、通常の突然変異(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
      }
    }
    

    また、UserPostのタイプの間に適切な一対の多関係があるように、関係の他端を追加します.
    (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
        }
      }
    }