mainメソッドに新しいエンドポイント関数を追加する必要はなく、end rest apiエンドポイントメソッドを検出可能にするためのhaskell Webフレームワークまたはメソッドがありますか?エンドポイントを発見するHaskell Webフレームワーク?
説明:
私は評価してるHaskellのWebフレームワークと私はそれらのすべてに共通見る何かがあなたのエンドポイントを定義するための一つの場所があるということです。
意味、私は新しいエンドポイントを作成するたびに、関数を作成してmain関数にエンドポイントを入力する必要があります。
いくつか例を挙げます。新しいエンドポイントの
type Api = SpockM()()()()
type ApiAction a = SpockAction()()() a
main :: IO()
main = do
spockCfg <- defaultSpockCfg() PCNoDatabase()
runSpock 8080 (spock spockCfg app)
app :: Api
app = do
get "people" $ do
json $ Person { name = "Fry", age = 25 }
、私はアプリの機能を変更する必要があります。それぞれの新しいエンドポイントの
type UserAPI2 = "users" :> Get '[JSON] [User]
:<|> "albert" :> Get '[JSON] User
:<|> "isaac" :> Get '[JSON] User
isaac :: User
isaac = User "Isaac Newton" 372 "[email protected]" (fromGregorian 1683 3 1)
albert :: User
albert = User "Albert Einstein" 136 "[email protected]" (fromGregorian 1905 12 1)
users2 :: [User]
users2 = [isaac, albert]
server2 :: Server UserAPI2
server2 = return users2
:<|> return albert
:<|> return isaac
、私はserver2の機能を追加する必要があります。私は追加したいそれぞれの新しいエンドポイントの
appInit :: SnapletInit App App
appInit = makeSnaplet "myapp" "My example application" Nothing $ do
hs <- nestSnaplet "heist" heist $ heistInit "templates"
fs <- nestSnaplet "foo" foo $ fooInit
bs <- nestSnaplet "" bar $ nameSnaplet "newname" $ barInit foo
addRoutes [ ("hello", writeText "hello world")
, ("fooname", with foo namePage)
, ("barname", with bar namePage)
, ("company", companyHandler)
]
wrapSite (<|> heistServe)
ref <- liftIO $ newIORef "fooCorp"
return $ App hs fs bs ref
、私はaddRoutes機能を追加する必要があります。
私が見ているすべての例では、新しいエンドポイントを追加したい場合、新しいルートを追加するために、常にメインファイルの関数に戻ってくる必要があります。
そこに何かがあることを望んでいました。新しいファイル内に新しいエンドポイント関数を書くだけで、Webフレームワークで発見されるので、既存の関数に追加する必要はありません。
.net Web Apiでは、これは次のようになります。
デフォルトのルーティングを定義する1か所。
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
プロジェクトに新しいクラスとファイルが追加されました。このフレームワークは、実行時にこのメソッドをエンドポイントとして検出し、追加します。このエンドポイントを追加するためのメイン関数に戻る必要はありません。
[Route("api/books")]
[HttpPost]
public HttpResponseMessage CreateBook(Book book) { ... }