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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow