当前位置: 首页 > 知识库问答 >
问题:

为什么在后端环境中使用Prisma?

仲孙小云
2023-03-14

在学习了GraphQL并在一些项目中使用它之后,我终于想尝试一下Prisma。它promise消除对数据库的需求,并从GraphQL模式中生成一个GraphQL客户端和一个工作数据库。到目前为止还不错。

但我的问题是:对我来说,GraphQL客户端似乎只对客户端有用(防止超取,加快页面速度,React集成,...)。然而,Prisma并没有消除对业务逻辑的需求,因此人们最终会在Node.js中使用生成的客户端库,只是将另一台GraphQL服务器中的许多功能重新导出到实际的客户端。

为什么我更喜欢Prisma而不是自定义数据库解决方案?在必须向实际客户机重新公开大量endpoint的背后有什么想法吗?

共有2个答案

何烨华
2023-03-14

当我开始学习图形时,甚至我也有类似的问题。这是我在使用它后学到并意识到的。

>

  • Prisma作为您的数据库的代理,为您提供一个现成的GraphQL API,允许您过滤和排序数据以及一些自定义类型,如DateTime,这些类型不是GraphQL的一部分必须以其他方式实现自己。它不是GraphQL服务器。只是数据库和后端服务器之间的一层,就像ORM一样。

    它涵盖了数据模型中几乎所有可能的用例,其中所有CRUD操作都是在模式中预先定义的,还有订阅,因此您不必做所有这些事情,只需更多地关注业务逻辑方面的事情。

    它还消除了为不同数据库编写不同查询的依赖性,如Sql或MongoDb,作为将其查询语言转换为实际数据库查询的层。

    您可以使用API(graphql)服务器仅向客户机公开所需的架构,而不是所有内容。由于graphql查询可以得到高度嵌套,因此实现这些查询可能很困难,也很棘手,这可能会导致性能问题,而Prisma却不是这样,因为它自己处理所有事情。

    您可以查看这篇文章了解更多信息。

  • 裴展
    2023-03-14

    我在Prisma工作,很想澄清这一点!

    这里有一个简短的提示:Prisma不是一个“GraphQL-as-a-Service”工具(以GraphTool、AppSync或Hasura的方式)。Prisma客户端不是“GraphQL客户端”,而是数据库客户端(类似于ORM)。因此,不在前端使用Prisma客户端的原因与不使用ORM或不直接从前端连接到DB的原因相同。

    它promise不再需要数据库,并从GraphQL模式生成GraphQL客户机和工作数据库。到现在为止,一直都还不错。

    我真的很想知道你到底是从哪里得到这种感觉的!我们很清楚,我们需要改善关于Prisma提供的价值及其工作方式的沟通。你所阐述的是一个关于棱镜的极其普遍的误解,我们希望在未来防止这种误解。事实上,我们计划下周发表一篇关于这个话题的博客文章,希望这能澄清很多。

    为了抓住具体的要点:

    • Prisma并没有消除对数据库的需求。与ORM类似,Prisma客户端用于简化数据库访问。它还通过声明性数据建模和迁移方法简化了数据库迁移(实际上,我们目前正在对迁移系统进行大规模改进,您可以在这里找到RFC)
     类似资料:
    • 问题内容: 我在Linux中编写了一个C程序,使用来设置环境变量的值,但是执行后,当我运行或时,环境变量本身似乎未设置。为什么? 这是代码片段: 问题答案: 环境变量在程序的上下文中设置。 程序退出时,您将返回到程序启动所在的上下文。

    • 本文向大家介绍生产环境中为什么建议使用外部表?相关面试题,主要包含被问及生产环境中为什么建议使用外部表?时的应答技巧和注意事项,需要的朋友参考一下 解答: 1、因为外部表不会加载数据到hive,减少数据传输、数据还能共享。 2、hive不会修改数据,所以无需担心数据的损坏 3、删除表时,只删除表结构、不删除数据。

    • 本文向大家介绍ISR在Kafka环境中代表什么?相关面试题,主要包含被问及ISR在Kafka环境中代表什么?时的应答技巧和注意事项,需要的朋友参考一下 答:ISR指的是同步副本。这些通常被分类为一组消息副本,它们被同步为领导者。

    • 本文向大家介绍axios为什么能在浏览器中环境运行又能在node中环境运行?相关面试题,主要包含被问及axios为什么能在浏览器中环境运行又能在node中环境运行?时的应答技巧和注意事项,需要的朋友参考一下 源码中defaults.js文件里有getDefaultAdapter这个方法,用来判断环境。如果是浏览器就实例new XMLHttpRequest()来发送请求响应服务,node环境就引用h

    • 问题内容: 我了解此构造的工作原理: 但是我不明白为什么else在这里使用它作为关键字,因为它表明所讨论的代码仅在for块未完成时才运行,这与它的工作相反!无论我如何考虑,我的大脑都无法从for陈述到else障碍的无缝发展。对我来说,还是更有意义(我正在尝试训练自己这样阅读)。 我想知道Python编码人员是如何在头脑中读取这个结构的。也许我缺少使这些代码块更容易理解的东西? 问题答案: 即使是经

    • 三维世界(3D world) 光影关系(Light and shadow) 三维世界(3D world) Material 环境是一个三维的空间,这意味着每个对象都有 x , y , z 三维坐标属性,z 轴垂直于显示平面,并延伸向用户视角,每个 material 元素在 z 轴上占据一定的位置并且有一个 1dp 厚度的标准。 在网页上,z 轴被用来分层而不是为了视角。3D 空间通过操纵 y 轴进