我们都不想要在前端使用SQL吗?

2021-04-16 02:51:16

当我们从前端使用REAS,GraphQL或RPC API时,大部分时间都呼叫才会最终转换为后端的SQL语句。

那么为什么我们不只是在前端写下SQL以开始呢?

为确保Snappy应用程序,我们通常需要正常化的CAC他。当我们开始尝试做乐观的更新时,事情很快就会变得复杂。除非我们的前端数据模型完全映射到我们的后端模型,否则我们必须做一堆Quirky,手动缓存更新。只需查看Apollo的乐观UI指南 - 它的激烈! SWR和React-查询还将手动查询无效和缓存更新给您。

难事位是,如果我们想要完美的乐观UI更新,我们将需要在前端复制我们的后端数据模型。如果我们使用具有关系数据的SQL数据库,那么我们应该在前端中具有SQL数据库。如果您可以进行此工作,您还可以免费获取脱机支持。

考虑您通常写入前端的过程API响应的所有代码。我通常最终有一堆Lodash(GroupBy,Filter,Map,Refice)来塑造我从服务器获得的数据。这总是变得笨拙,我总是最终希望我能使用SQL。

一个例子可能是asana等任务管理应用程序,其中包含一个项目侧边栏,以及它旁边的任务列表,任务计数显示在每个项目旁边。

如果向项目添加新任务,则需要更新侧栏中的项目计数。理想情况下,您只想添加新的任务实体并将其与项目相关联。这是SQL的一行。

然后我们再次运行所有查询,我们的界面将自动与我们的数据模型一致。

但是,如果我们的API不是由基础关系模型导出,并且我们想要乐观的更新,我们必须手动更新我们的本地模型,如上所述的Apollo示例所示 - 在那里手动添加新的注释到缓存的查询响应中。我们也必须小心只重新触发依赖查询,因为它们会导致新的获取。

每当我们渲染或修改UI中一个或多个地方存在的本地实体时,我们希望它保持一致。

我们曾经被告知我们的API必须休息。所以这就是我们所做的。

然后将GraphQL从休息中解放出来,并说:可以通过单个端点再次执行RPC。而同样的人有自己的协议,所以这就是我们所做的。

但是现在可以再做一次RPC,也许我们可以完成循环,并且可以做到这一点...... SQL再次......就像我们建立桌面应用时一样。

安全问题可能也是人们可能已经把它刷掉的重要原因。没有内置安全,它可能是超级危险的。

我们已经通过WASM在浏览器中拥有SQLite,我们可以使用它。纯SQLite JS实现将很酷。

我们需要一个限制性的SQL解析器来运行服务器端来限制可以运行的内容并防止SQL注入。也许我们需要一个查询库/ orm来在JSON中生成一个安全的中介SQL语言,以便我们可以验证它。也许从prisma的类型安全的数据 - 映射器客户端采取一些启发,可用于帮助人们编写不会意外地失败的安全查询。

在服务器上,也许视图和行级安全性,因为@unodgs写了关于此处的帮助。如果没有仔细实施解析器,请不要忘记GraphQL也可以具有过度提取的安全漏洞,因此它似乎并不像似乎一样疯狂。

对于突变,因为它们是非常危险的并且需要大量的验证,我们可以恢复休息,GraphQL突变,RPC。除非允许批量插入/更新作为选择的子查询有很大的价值,否则它可能最好避免发送服务器端,并仅使用它们来更新我们的本地数据模型。

如果我们可以获得Postgres的外国数据包装器扩展,可以在浏览器中工作,包装localStorage,Chrome扩展API,IndexedDB等,即使也许是第三方API的统一数据模型,也可以是第三方API的统一数据模型。

本地毫不费力的高速缓存的优势是我们不必如此担心我们如何编写查询,因为它们很可能会击中缓存,我们可以依靠一些智能逻辑来检索缺少的数据。

随着WAL(写下未来的日志),我们也有时旅行的能力,如REDUX承诺我们。这也可能在有效地同步更改中方便,并在服务器错误中回滚乐观UI更新。

也许SSR和PJAX这样的事情将意味着我们将来的客户端依赖于客户端状态,并且UI更新将在WebSockets或类似的内容中作为HTML。

所有用户的数据都可以由单个SQLite数据库同步的前端/后端表示,可以下载以提供完全离线体验或数据摘要功能?

GraphQL周围有如此多的工具和势头,挽救它会很好。也许我们可以为GraphQL查询构建本地SQL的缓存,并使用Prisma数据模型定义架构等内容来将我们的GraphQL查询映射到本地SQLite数据库。

除了Sqlite以外的东西。 WebSQL消失了,但随着我最近在JS Jabber Podcast剧集中提到了Jake Archibald,更好的是一个字节级存储API,以便人们可以在浏览器中实现自己的有效的SQL引擎。

SQL今天无处不在。没有代码工具都包含SQL。 Google Sheets,Airtable,Retool。释放您的非技术员工的最佳方式是通过SQL获取您的数据。每个人都想要它。这就是为什么那里有这样一个新的工具。

SQLite最近被提到了很多,这是我想到这一点的原因之一。如果更多人舒适使用它

我错过了什么?我热衷于通过这个玩耍,看看它是否是可行的,因为有一件事是肯定的,我们目前与apollo和反应查询做出乐观的ui更新的方式是站不住脚的。