Haskell Language
Web Entwicklung
Suche…
Diener
Servant ist eine Bibliothek zum Deklarieren von APIs auf Typebene und dann:
- Schreibserver (dieser Teil des Servants kann als Web-Framework betrachtet werden),
- Clientfunktionen erhalten (in haskell),
- Client-Funktionen für andere Programmiersprachen generieren,
- Dokumentation für Ihre Webanwendungen erstellen
- und mehr...
Servant hat eine prägnante, aber leistungsfähige API. Eine einfache API kann in sehr wenigen Codezeilen geschrieben werden:
{-# 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
Jetzt können wir unsere API deklarieren:
type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
Gibt an, dass wir /users
GET
Anforderungen mit einem Abfrageparameter sortby
vom Typ SortBy
und JSON vom Typ User
in der Antwort zurückgeben SortBy
.
Jetzt können wir unseren Handler definieren:
-- 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
Und die Hauptmethode, die Port 8081
und unsere Benutzer-API bedient:
main :: IO ()
main = run 8081 app1
Beachten Sie, dass Stack über eine Vorlage zum Generieren grundlegender APIs in Servant verfügt, die hilfreich ist, um schnell einsatzbereit zu sein.
Yesod
Das Yesod-Projekt kann mit folgenden Stapelvorlagen mit stack new
werden:
-
yesod-minimal
. Einfachstes Jessod-Gerüst möglich. -
yesod-mongo
. Verwendet MongoDB als DB-Engine. -
yesod-mysql
. Verwendet MySQL als DB-Engine. -
yesod-postgres
. Verwendet PostgreSQL als DB-Engine. -
yesod-postgres-fay
. Verwendet PostgreSQL als DB-Engine. Verwendet die Sprache Fay für das Frontend. -
yesod-simple
. Empfohlene Vorlage zur Verwendung, wenn Sie keine Datenbank benötigen. -
yesod-sqlite
. Verwendet SQlite als DB Engine.
yesod-bin
Paket yesod-bin
enthält die yesod
Datei yesod
, die zum Ausführen des Entwicklungsservers verwendet werden kann. Beachten Sie, dass Sie Ihre Anwendung auch direkt yesod
Werkzeug yesod
ist daher optional.
Application.hs
enthält Code, der Anforderungen zwischen Handlern auslöst. Außerdem werden Datenbank- und Protokollierungseinstellungen eingerichtet, sofern Sie diese verwendet haben.
Foundation.hs
definiert den App
Typ, der als Umgebung für alle Handler angesehen werden kann. Wenn Sie sich in der HandlerT
Monade befinden, können Sie diesen Wert mithilfe der getYesod
Funktion getYesod
.
Import.hs
ist ein Modul, das nur häufig verwendete Import.hs
.
Model.hs
enthält Template Haskell, das Code und Datentypen generiert, die für die DB-Interaktion verwendet werden. Nur präsentieren, wenn Sie DB verwenden.
config/models
definieren Sie Ihr DB-Schema. Wird von Model.hs
.
config/routes
definiert die URIs der Webanwendung. Für jede HTTP-Methode der Route müssen Sie einen Handler mit dem Namen {method}{RouteR}
.
static/
directory enthält statische Ressourcen der Site. Diese werden vom Modul " Settings/StaticFiles.hs
in binär kompiliert.
templates/
Verzeichnis enthält Shakespeare- Vorlagen, die beim Bereitstellen von Anforderungen verwendet werden.
Schließlich enthält das Handler/
-Verzeichnis Module, die Handler für Routen definieren.
Jeder Handler ist eine HandlerT
die auf IO basiert. Sie können Anforderungsparameter, ihren Hauptteil und andere Informationen runDB
, mit runDB
Abfragen an die runDB
, beliebige runDB
/ A ausführen und dem Benutzer verschiedene Arten von Inhalt zurückgeben. Zur defaultLayout
HTML wird defaultLayout
Funktion defaultLayout
verwendet, die eine defaultLayout
Vorlagen ermöglicht.