GraphQL 기초: 파트 1 - Prisma(이유)
시작하자
내가 GraphQL로 작업하는 이유에 대한 마지막 게시물 이후에 저는 GraphQL 백엔드 설정으로 작은 튜토리얼 프로젝트를 설정했습니다. 이전에 튜토리얼에서 백엔드를 설정한 적이 있지만 처음부터 모든 것을 수행한 것은 이번이 처음이었고 나 자신을 위해 한 최고의 일이라고 말해야 합니다. 나는 지난 포스트에서 이것을 말했지만, 나는 당신이 무언가를 이해하고 있는지(또는 적어도 당신이 그것을 이해하고 있다고 생각하는지)를 아는 가장 좋은 방법은 그것을 다른 사람에게 가르치려고 노력하는 것임을 발견했습니다. 이 게시물에서는 Prisma를 시작하기 위한 기초 작업을 제공하고자 합니다.
왜/(무엇이) 프리즈마인가?
좋습니다. 따라서 GraphQL과 함께 Prisma를 사용할 필요는 없지만 Prisma가 무엇을 할 수 있는지 처음 보았을 때 시간이 크게 절약되었습니다. 본질적으로 Prisma는 데이터베이스에 대해 가능한 모든 CRUD 작업을 생성합니다. 이는 모든 논리를 생성한다는 의미가 아니라 데이터베이스와 상호 작용하는 실제 메서드만 생성한다는 의미입니다.
이 마법은 어떻게 작동합니까?!
글쎄, 그것은 완전한 마법이 아닙니다. 기본적으로 Prisma에게 데이터 모델이 무엇인지 알려주면 모든 기본 CRUD 작업이 생성됩니다. Prisma에 대한 또 다른 사고 방식은 데이터베이스에 유지하려는 데이터 모델 또는 개체 구조를 제공하고 있으며 Prisma는 데이터베이스와 상호 작용할 수 있도록 API를 만든다는 것입니다.
예를 들어:
데이터베이스에서 읽는다고 상상해보세요. 데이터베이스에 "게시물"을 저장한다고 가정해 보겠습니다. 다음과 같은 구조를 가질 수 있습니다.
type Post {
id: ID! @unique
title: String!
published: Boolean!
author: User
}
Prisma를 설정할 때 이를 파일(datamodel.prisma)에 작성하고 Prisma에 배포합니다. 그런 다음 해당 개체에 대한 모든 종류의 쿼리(읽기) 및 변형(생성, 편집, 삭제)을 제공하는 생성된 파일을 다운로드할 수 있습니다. 따라서 제공하는 데이터 모델에 대해 다음과 같은 결과를 얻을 수 있습니다.
type Query {
post(where: PostWhereUniqueInput!): Post
posts(where: PostWhereInput, orderBy: PostOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Post]!
postsConnection(where: PostWhereInput, orderBy: PostOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): PostConnection!
node(id: ID!): Node
}
type Mutation {
createPost(data: PostCreateInput!): Post!
updatePost(data: PostUpdateInput!, where: PostWhereUniqueInput!): Post
updateManyPosts(data: PostUpdateManyMutationInput!, where: PostWhereInput): BatchPayload!
upsertPost(where: PostWhereUniqueInput!, create: PostCreateInput!, update: PostUpdateInput!): Post!
deletePost(where: PostWhereUniqueInput!): Post
deleteManyPosts(where: PostWhereInput): BatchPayload!
}
Mutations에서 deleteManyPosts를 살펴보세요. 내가 처음에 궁금했던 것 중 하나는... 이 "where"인수를 허용하는 것을 볼 수 있습니다. 하지만 PostWhereInput은 무엇이어야 합니까? 운 좋게도 모든 것이 제공됩니다! 아래에서 확인하십시오.
input PostWhereInput {
id: ID
id_not: ID
id_in: [ID!]
id_not_in: [ID!]
id_lt: ID
id_lte: ID
id_gt: ID
id_gte: ID
id_contains: ID
id_not_contains: ID
id_starts_with: ID
id_not_starts_with: ID
id_ends_with: ID
id_not_ends_with: ID
title: String
title_not: String
title_in: [String!]
title_not_in: [String!]
title_lt: String
title_lte: String
title_gt: String
title_gte: String
title_contains: String
title_not_contains: String
title_starts_with: String
title_not_starts_with: String
title_ends_with: String
title_not_ends_with: String
published: Boolean
published_not: Boolean
author: UserWhereInput
AND: [PostWhereInput!]
OR: [PostWhereInput!]
NOT: [PostWhereInput!]
}
그 심각한 양의 옵션! 내가 단순히 많은 게시물을 삭제하고 싶었는지 알 수 있습니다.
deleteManyPosts(where: { author: thatCrazyGuyThatGotBanned })
.이상한 것을 게시하는 미친 사용자는 모든 게시물이 삭제됩니다! 그렇게 쉽게!
그게 다야?
글쎄요. Prisma의 장점은 CRUD 작업에 필요한 모든 가능한 방법을 제공한다는 것입니다. 예를 들어 상점에 있는 항목을 사용하여 가격을 기준으로 항목을 쿼리하는 방법을 알아내는 방법을 만드는 것에 대해 걱정할 필요가 없습니다. Prisma는 이드보다 큼, 작음, 모든 것을 제공함으로써 이를 수행합니다. 또한 데이터베이스에 구애받지 않으므로 MySQL 또는 Mongo와 같은 다양한 유형의 데이터베이스를 사용할 수 있습니다.
Prisma가 제공하지 않는 것은 이 Prisma "API"를 실제로 구현하기 위해 응용 프로그램에 필요한 논리 또는 실제 컨트롤러 메서드입니다. 따라서 누군가 게시물을 작성할 수 있는 애플리케이션을 만드는 경우 예를 들어 그들이 로그인되어 있는지 또는 올바른 권한이 있는지 확인하는 로직을 작성해야 합니다. 하지만 일단 해결하고 나면 쉽게 접근할 수 있습니다.
createPost(data: putYourDataHere )
.프리즈마 설정
내 에서 데모 데이터베이스를 사용하여 Prisma를 설정하는 작업을 할 것입니다. 개인 프로젝트를 위해 모든 것을 시작하고 실행하거나 그것이 무엇인지 배울 수 있는 좋은 방법입니다. 참을성이 없다면 Prisma.io으로 이동하여 튜토리얼을 확인하십시오. 제 경우에는 좀 더 간단하게 분해하고 Prisma가 생성하는 것을 확인할 수 있는 prisma.graphql 파일을 자동으로 생성하고 다운로드하도록 설정하는 것입니다.
더 이상 사용할 수 없는 기사
Reference
이 문제에 관하여(GraphQL 기초: 파트 1 - Prisma(이유)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/doylecodes/graphql-basics-part-1---prisma-the-why-45h0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)