Haskell Language
Webbutveckling
Sök…
Tjänare
Servant är ett bibliotek för att deklarera API: er på typnivå och sedan:
- skrivservrar (denna del av servanten kan betraktas som ett webbramverk),
- få klientfunktioner (i haskell),
- generera klientfunktioner för andra programmeringsspråk,
- generera dokumentation för dina webbapplikationer
- och mer...
Servant har ett kort men ändå kraftfullt API. Ett enkelt API kan skrivas i mycket få kodrader:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
import Data.Text
import Data.Aeson.Types
import GHC.Generics
import Servant.API
data SortBy = Age | Name
data User = User {
name :: String,
age :: Int
} deriving (Eq, Show, Generic)
instance ToJSON User -- automatically convert User to JSON
Nu kan vi förklara vårt API:
type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
som säger att vi vill utsätta /users
för GET
förfrågningar med en fråga param sortby
av typen SortBy
och returnera JSON av typen User
i svaret.
Nu kan vi definiera vår hanterare:
-- This is where we'd return our user data, or e.g. do a database lookup
server :: Server UserAPI
server = return [User "Alex" 31]
userAPI :: Proxy UserAPI
userAPI = Proxy
app1 :: Application
app1 = serve userAPI server
Och den huvudsakliga metoden som lyssnar på port 8081
och tjänar vårt användar-API:
main :: IO ()
main = run 8081 app1
Obs! Stack har en mall för att generera grundläggande API: er i Servant, vilket är användbart för att komma igång mycket snabbt.
Yesod
Yesod-projekt kan skapas med stack new
hjälp av följande mallar:
-
yesod-minimal
. Enklaste Yesod-ställning möjligt. -
yesod-mongo
. Använder MongoDB som DB-motor. -
yesod-mysql
. Använder MySQL som DB-motor. -
yesod-postgres
. Använder PostgreSQL som DB-motor. -
yesod-postgres-fay
. Använder PostgreSQL som DB-motor. Använder Fay-språk för front-end. -
yesod-simple
. Rekommenderad mall att använda om du inte behöver databas. -
yesod-sqlite
. Använder SQlite som DB-motor.
yesod-bin
paketet tillhandahåller yesod
körbara, som kan användas för att köra utvecklingsserver. Observera att du också kan köra din applikation direkt, så yesod
verktyget är valfritt.
Application.hs
innehåller kod som skickar förfrågningar mellan hanterare. Det ställer också in databas- och loggningsinställningar om du använde dem.
Foundation.hs
definierar App
, som kan ses som en miljö för alla hanterare. Att vara i HandlerT
monad, kan du få detta värde med getYesod
funktionen.
Import.hs
är en modul som bara exporterar vanligt förekommande saker.
Model.hs
innehåller Mall Haskell som genererar kod- och datatyper som används för DB-interaktion. Present endast om du använder DB.
config/models
är där du definierar ditt DB-schema. Används av Model.hs
.
config/routes
definierar URI: s för webbapplikationen. För varje HTTP-metod på rutten måste du skapa en hanterare med namnet {method}{RouteR}
.
static/
katalog innehåller webbplatsens statiska resurser. Dessa sammanställs i binär av Settings/StaticFiles.hs
modul.
templates/
katalog innehåller Shakespeare- mallar som används vid serveringsförfrågningar.
Slutligen innehåller Handler/
katalog moduler som definierar hanterare för rutter.
Varje hanterare är en HandlerT
baserad på IO. Du kan inspektera förfrågningsparametrar, dess kropp och annan information, göra frågor till DB med runDB
, utföra godtycklig IO och returnera olika typer av innehåll till användaren. För att servera HTML används defaultLayout
funktionen som tillåter snygg sammansättning av shakespearia mallar.