2

我分别使用servantNetwork.Wai.Application.Static用于 json api 和静态文件服务。我想加入这两个应用程序,如果staticApp服务失败,请求应该去jsonApp

我试着找出并阅读websocketsOr它是如何做到的。Websockets或

我终于写道:

app :: NW.Application -> NW.Application -> NW.Application
app staticApp apiApp req respond =
  staticApp req (\ response ->
                  do
                    if (Status.statusCode . NW.responseStatus $ response) < 300
                    then respond response
                    else apiApp req respond)

但似乎其他人(wai 本身)会这样做,处理许多可能的情况。但我找不到。

我缺少哪些边缘情况(例外??)以及我可以使用哪些其他 api 来做同样的事情?

4

1 回答 1

1

#servant我在频道上问了这个问题,并alpounet告诉我servant Raw允许放置我们自己的Application处理程序。他们甚至还有一个serveDirectoryapi :)

import qualified Servant as S
import Servant ((:>), (:<|>))

type JobApi = "job" :> "status" :> S.Capture "id" ST.JobId :> S.Get '[S.JSON] ST.JobStatus
         :<|> "job" :> S.ReqBody '[S.JSON] ST.JobPostBody :> S.Post '[S.JSON] ST.JobId
         :<|> "job" :> S.Capture "id" ST.JobId :> S.Get '[S.JSON] ST.JobResult
         :<|> S.Raw

serverRouter :: ST.Server -> S.Server JobApi
serverRouter server = statusGet
    S.:<|> jobPost
    S.:<|> jobGet
    S.:<|> S.serveDirectory "assets"
  where 
    -- ... so on
于 2016-10-04T02:01:37.227 回答