2016-07-29 105 views
0

我習慣於使用Dart,在服務器和客戶端之間共享類型與將相關包導入到項目中一樣簡單。Yesod - 服務器和客戶端之間的共享類型

Yesod/Haskell可以完成類似的工作嗎?我應該爲客戶使用GHCJS嗎?也許榆樹?我們的目標是不必擔心服務器和客戶端之間的數據傳輸會受到影響 - 而且也不必編寫單行的JS代碼。 :o)

我一直沒有找到任何好的,初學者友好的文檔,說明如何用Haskell最好地解決這個問題。我懷疑我只是沒有看到正確的地方。任何和所有的幫助都是值得歡迎的。

+2

有[elm-export](https://github.com/krisajenkins/elm-export)項目,它創建基於Haskell類型的類型和解碼器。這看起來像最近保持的一羣。 –

+0

還有[haste.app](https://hackage.haskell.org/package/haste-compiler-0.4/docs/Haste-App.html),一個「類型安全的客戶端 - 服務器通信框架」。我不知道它是否會與Yesod完美融合。 –

回答

1

要使用GHCJS實現這個你可以建立自己的項目出來的三個核心包以這種方式:

  • 前端 - 這是基於ghcjs-DOM,我喜歡Reflex-dom
  • 後端 - 用你最喜歡的框架,我喜歡Snap,耶索德應該工作一樣的
  • 共享 - 代碼前端和後端之間共享

前端和後端都依賴共享當然。前端編譯爲GHCJS,後端編號爲GHC

如果你想看到一個完整的例子,我會強烈推薦學習hsnippet。請看WsApi.hs,其中定義了一組上行和下行消息。所有的JSON實例都在一個地方派生,並在前端和後端導入。

Hsnippet使用websockets。當然這不是要求。你可以在你自己的應用程序中使用普通的XHR。原則保持不變。您可以在共享包中定義API和序列化實例(通常爲JSON),並在前端和後端中導入相關模塊。

我個人也分享驗證碼,數據庫實體定義生成與持久等。一旦你設置共享額外的東西大多是複製粘貼到其中一個共享模塊,然後導入任何地方。

相關問題