Haskell Language
Sviluppo web
Ricerca…
servitore
Servant è una libreria per la dichiarazione delle API a livello di carattere e quindi:
- scrivere server (questa parte di servant può essere considerata un framework web),
- ottenere funzioni client (in haskell),
- generare funzioni client per altri linguaggi di programmazione,
- generare documentazione per le tue applicazioni web
- e altro ancora ...
Servant ha un'API concisa ma potente. Una semplice API può essere scritta in pochissime righe di codice:
{-# 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
Ora possiamo dichiarare la nostra API:
type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
che afferma che desideriamo esporre /users
alle richieste GET
con una query param sortby
di tipo SortBy
e restituire JSON di tipo User
nella risposta.
Ora possiamo definire il nostro gestore:
-- 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
E il metodo principale che ascolta sulla porta 8081
e serve la nostra API utente:
main :: IO ()
main = run 8081 app1
Nota: Stack ha un modello per la generazione di API di base in Servant, utile per essere subito operativo.
Yesod
Il progetto Yesod può essere creato con stack new
usando i seguenti modelli:
-
yesod-minimal
. Il più semplice impalcatura Yesod possibile. -
yesod-mongo
. Utilizza MongoDB come motore DB. -
yesod-mysql
. Utilizza MySQL come motore DB. -
yesod-postgres
. Utilizza PostgreSQL come motore DB. -
yesod-postgres-fay
. Utilizza PostgreSQL come motore DB. Utilizza la lingua Fay per front-end. -
yesod-simple
. Modello consigliato da utilizzare, se non è necessario il database. -
yesod-sqlite
. Utilizza SQlite come motore DB.
yesod-bin
pacchetto yesod-bin
fornisce yesod
eseguibile, che può essere utilizzato per eseguire il server di sviluppo. Si noti che è anche possibile eseguire direttamente l'applicazione, quindi yesod
strumento yesod
è facoltativo.
Application.hs
contiene codice che invia richieste tra gestori. Imposta anche le impostazioni del database e di registrazione, se le hai usate.
Foundation.hs
definisce il tipo di App
, che può essere visto come un ambiente per tutti i gestori. Essendo in HandlerT
monad, puoi ottenere questo valore usando la funzione getYesod
.
Import.hs
è un modulo che ri-esporta solo le cose comunemente usate.
Model.hs
contiene Template Haskell che genera codice e tipi di dati utilizzati per l'interazione DB. Presente solo se si sta utilizzando DB.
config/models
è dove si definisce il proprio schema DB. Utilizzato da Model.hs
.
config/routes
definisce gli URI dell'applicazione Web. Per ogni metodo HTTP del percorso, è necessario creare un gestore denominato {method}{RouteR}
.
static/
directory contiene le risorse statiche del sito. Questi vengono compilati in binario dal modulo Settings/StaticFiles.hs
.
templates/
directory contiene i template di Shakespeare che vengono usati quando servono le richieste.
Infine, Handler/
directory contiene moduli che definiscono i gestori per i percorsi.
Ogni gestore è un'azione di HandlerT
basata su IO. È possibile ispezionare i parametri della richiesta, il suo corpo e altre informazioni, effettuare interrogazioni al DB con runDB
, eseguire IO arbitrario e restituire vari tipi di contenuto all'utente. Per servire HTML, viene utilizzata la funzione defaultLayout
che consente la composizione ordinata di modelli shakespeariani.