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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow