Haskell Language
Webontwikkeling
Zoeken…
Knecht
Servant is een bibliotheek voor het declareren van API's op typeniveau en vervolgens:
- schrijfservers (dit deel van servant kan worden beschouwd als een webframework),
- clientfuncties verkrijgen (in haskell),
- clientfuncties genereren voor andere programmeertalen,
- documentatie genereren voor uw webapplicaties
- en meer...
Servant heeft een beknopte maar krachtige API. Een eenvoudige API kan in zeer weinig regels code worden geschreven:
{-# 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 kunnen we onze API declareren:
type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
waarin staat dat we /users
willen blootstellen aan GET
aanvragen met een query-parameter sortby
van het type SortBy
en JSON van het type User
als antwoord teruggeven.
Nu kunnen we onze handler definiëren:
-- 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
En de belangrijkste methode die luistert op poort 8081
en onze gebruikers-API bedient:
main :: IO ()
main = run 8081 app1
Let op, Stack heeft een sjabloon voor het genereren van basis-API's in Servant, wat handig is om heel snel aan de slag te gaan.
Yesod
Yesod-project kan worden gemaakt met stack new
met de volgende sjablonen:
-
yesod-minimal
. Eenvoudigste Yesod-steiger mogelijk. -
yesod-mongo
. Gebruikt MongoDB als DB-engine. -
yesod-mysql
. Gebruikt MySQL als DB-engine. -
yesod-postgres
. Gebruikt PostgreSQL als DB-engine. -
yesod-postgres-fay
. Gebruikt PostgreSQL als DB-engine. Gebruikt Fay-taal voor front-end. -
yesod-simple
. Aanbevolen sjabloon om te gebruiken als u geen database nodig hebt. -
yesod-sqlite
. Gebruikt SQlite als DB-engine.
yesod-bin
pakket biedt het uitvoerbare bestand yesod
, dat kan worden gebruikt om de ontwikkelingsserver uit te voeren. Merk op dat u uw toepassing ook rechtstreeks kunt uitvoeren, dus yesod
tool is optioneel.
Application.hs
bevat code die verzoeken tussen handlers verzendt. Het stelt ook database- en logboekinstellingen in, als u ze hebt gebruikt.
Foundation.hs
definieert het App
type, dat kan worden gezien als een omgeving voor alle handlers. In HandlerT
monade kun je deze waarde krijgen met de functie getYesod
.
Import.hs
is een module die gewoon veelgebruikte dingen opnieuw exporteert.
Model.hs
bevat Template Haskell die code en gegevenstypen genereert die worden gebruikt voor DB-interactie. Alleen aanwezig als u DB gebruikt.
config/models
definieert u uw DB-schema. Gebruikt door Model.hs
.
config/routes
definieert URI's van de webapplicatie. Voor elke HTTP-methode van de route moet u een handler maken met de naam {method}{RouteR}
.
static/
directory bevat de statische bronnen van de site. Deze worden gecompileerd in binair door de module Settings/StaticFiles.hs
.
templates/
map bevat Shakespeare- sjablonen die worden gebruikt bij het aanbieden van aanvragen.
Ten slotte bevat Handler/
directory modules die handlers voor routes definiëren.
Elke handler is een HandlerT
op basis van IO. U kunt verzoekparameters, de hoofdtekst en andere informatie inspecteren, query's naar de DB uitvoeren met runDB
, willekeurige IO uitvoeren en verschillende soorten inhoud terugsturen naar de gebruiker. Om HTML te gebruiken, wordt de defaultLayout
functie gebruikt die een nette samenstelling van shakespeariaanse sjablonen mogelijk maakt.