GraphQL 和 Prisma:当它们已经是 Prisma 数据库模式的一部分时,为啥要在应用程序模式中重新定义类型?

Posted

技术标签:

【中文标题】GraphQL 和 Prisma:当它们已经是 Prisma 数据库模式的一部分时,为啥要在应用程序模式中重新定义类型?【英文标题】:GraphQL & Prisma: why does one redefine types in the application schema when they are already part of the Prisma database schema?GraphQL 和 Prisma:当它们已经是 Prisma 数据库模式的一部分时,为什么要在应用程序模式中重新定义类型? 【发布时间】:2019-07-29 10:26:59 【问题描述】:

嗨——我一直在关注 GraphQL/Prisma 教程 (https://www.howtographql.com/graphql-js/6-authentication/),我想知道为什么当应用程序模式中的类型已经是 Prisma 数据库模式的一部分并且可以从那里。

本教程给出的答案是“对客户端应用程序隐藏潜在的敏感信息”。这到底是什么意思?为什么我们在‘schema.graphql’和‘datamodel.prisma’中复制定义?因为定义略有不同(即“数据模型”包含@unique 之类的标签)?我们如何对客户端应用程序隐藏东西?我仍然感到困惑......

特别是在'schema.graphql'中我有

type User 
    id: ID!
    name: String!
    email: String!
    links: [Link!]!

在 'datamodel.prisma' 我有

type User 
    id: ID! @unique
    name: String!
    email: String! @unique
    password: String!
    links: [ Link!] !

【问题讨论】:

架构没有密码,这可能是“隐藏潜在敏感信息”的意思。这是任何 API 中的常见做法,即不从持久存储中返回 所有 数据。 啊,当然!在我看来仍然很奇怪,在两个不同的地方有几乎相同的定义,但我明白你的意思。 【参考方案1】:

架构没有password 字段,这可能是“隐藏潜在敏感信息”的意思。

这是任何 API 中的常见做法,即不从持久存储中返回所有数据。

【讨论】:

所以基本上'schema.graphql'中定义的模型只包含你需要知道的那些东西,而'datamodel.prisma'中的那些包含一切存储? 基本上是的。在这种情况下,您永远不会显示密码字段。我希望它无论如何都经过哈希处理,因此您唯一应该做的就是传递另一个哈希密码以及用户名或电子邮件并确认匹配。

以上是关于GraphQL 和 Prisma:当它们已经是 Prisma 数据库模式的一部分时,为啥要在应用程序模式中重新定义类型?的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL/Prisma 订阅仅针对 DELETE 触发

Apollo 和 Prisma Graphql 显式模型关系不可查询

有没有办法从 datamodel.prisma 文件生成 schema.graphql 文件?

在单个解析器中一次创建两种类型的数据 (Graphql + Prisma)

如何在两个字段 prisma-graphql 中使用相同的生成 ID

为啥在使用 Prisma 时需要使用 GraphQL 关系?