Yesod - 服务器和客户端之间的共享类型

Yesod - shared types between server and client

我习惯于使用 Dart,在服务器和客户端之间共享类型就像将相关包导入您的项目一样简单。

可以用 Yesod/Haskell 完成类似的事情吗?我应该为客户端使用 GHCJS 吗?也许榆树?目标是不必担心数据在服务器和客户端之间的传输过程中被破坏——也不必编写一行 JS。 :o)

关于如何使用 Haskell 最好地应对这一挑战,我一直无法找到任何好的、适合初学者的文档。我怀疑我只是没找对地方。我们非常欢迎任何帮助。

要使用 GHCJS 实现此目的,您只需使用以下三个核心包构建您的项目:

  • 前端 - 基于 ghcjs-dom 的东西,我喜欢 Reflex-dom
  • 后端 - 使用你最喜欢的框架,我喜欢 Snap,Yesod 应该可以正常工作
  • 共享 - 前端和后端共享代码

前端和后端当然都依赖共享。前端用 GHCJS 编译,后端用 GHC.

如果您想查看完整示例,我强烈建议您研究 hsnippet. Take a look at WsApi.hs,其中定义了一组上行和下行消息。所有 JSON 个实例都在一个地方派生并在前端和后端导入。

Hsnippet 使用 websockets。这当然不是必需的。您可以在自己的应用程序中使用常规 XHR。原则保持不变。您在共享包中定义 API 和序列化实例(通常 JSON),并在前端和后端导入相关模块。

就个人而言,我还分享验证代码、使用持久性生成的数据库实体定义等。设置后,共享其他内容主要是复制粘贴到其中一个共享模块,然后导入到任何地方。