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.