2016-10-03 28 views
1

json apiとstatic file servingにそれぞれservantNetwork.Wai.Application.Staticを使用しています。私はApplicationの2つに参加したいので、staticAppが処理に失敗した場合は、jsonAppにリクエストしてください。2つのNetwork.Wai.Applicationに参加してください。

websocketsOrがそれをどのように行ったのかを見つけて調べることを試みました。

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)多くの可能な場合を扱う、それを行っていたように思える..しかし、私は見つけることができないです:

WebsocketsOrは、私は最終的に書きました。

私が紛失しているエッジのケース(例外?)と他のAPIが同じものを実行するために使用できるものは何ですか?

答えて

1

私は#servantチャネル上でこれを尋ねたとalpounetは、私たち自身のApplicationハンドラを置くことを可能にすることについてservant Raw教えてくれました。彼らはさらにserveDirectory apiを持っています。

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 
関連する問題