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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow