добавить общий корневой путь перед внутренним API с помощью Servant - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть следующий API:

type GSDMonitoringApi =   FetchWorkspaceIdsCreated
                    :<|>  FetchGsdCommandsByWorkspaceId

type FetchWorkspaceIdsCreated =      "gsd" :> "monitoring" :> "workspaceIds" :> Get '[JSON] [Persisted WorkspaceId]
type FetchGsdCommandsByWorkspaceId = "gsd" :> "monitoring" :> "commands" :> Capture "workspaceId" WorkspaceId :> Get '[JSON] [Persisted GsdCommand]

возможно ли выделить "gsd" :> "monitoring" :> и поместить его в GSDMonitoringApi только один раз?

PS: Слуга на удивление молодец!

1 Ответ

0 голосов
/ 13 декабря 2018

Да, вы можете добавить префикс к обеим ветвям после их объединения:

type GSDMonitoringApi = 
    "gsd" :> "monitoring" :> 
    ( FetchWorkspaceIdsCreated :<|> FetchGsdCommandsByWorkspaceId )

type FetchWorkspaceIdsCreated = "workspaceIds" :> Get '[JSON] [Persisted WorkspaceId]
type FetchGsdCommandsByWorkspaceId = "commands" :> Capture "workspaceId" WorkspaceId :> Get '[JSON] [Persisted GsdCommand]

В качестве полусвязанного пункта я рекомендую проверить Servant.API.Generic.Подобное объединение API с :<|> становится очень уродливым очень быстро.Servant.API.Generic решает это до некоторой степени.

...