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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow