Haskell Language
Tworzenie stron internetowych
Szukaj…
Sługa
Servant to biblioteka służąca do deklarowania interfejsów API na poziomie typu, a następnie:
- pisz serwery (tę część sługi można uznać za platformę internetową),
- uzyskać funkcje klienta (w haskell),
- generować funkcje klienta dla innych języków programowania,
- generuj dokumentację dla swoich aplikacji internetowych
- i więcej...
Sługa ma zwięzłe, ale potężne API. Prosty interfejs API można napisać w kilku wierszach kodu:
{-# 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
Teraz możemy zadeklarować nasze API:
type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
który stwierdza, że chcemy narażać /users
na żądania GET
za pomocą parametru zapytania sortby
według typu SortBy
i SortBy
odpowiedzi JSON typu User
.
Teraz możemy zdefiniować naszego handlera:
-- 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
I główna metoda, która nasłuchuje na porcie 8081
i obsługuje nasz interfejs API użytkownika:
main :: IO ()
main = run 8081 app1
Uwaga: Stack ma szablon do generowania podstawowych interfejsów API w Servant, który jest przydatny do szybkiego uruchamiania i uruchamiania.
Yesod
Projekt Yesod można utworzyć za pomocą stack new
przy użyciu następujących szablonów:
-
yesod-minimal
. Najprostsze możliwe rusztowanie Yesod. -
yesod-mongo
. Używa MongoDB jako silnika DB. -
yesod-mysql
. Używa MySQL jako silnika DB. -
yesod-postgres
. Używa PostgreSQL jako silnika DB. -
yesod-postgres-fay
. Używa PostgreSQL jako silnika DB. Używa języka Fay w interfejsie użytkownika. -
yesod-simple
. Zalecany szablon do użycia, jeśli nie potrzebujesz bazy danych. -
yesod-sqlite
. Używa SQlite jako silnika DB.
Pakiet yesod-bin
zapewnia plik wykonywalny yesod
, którego można użyć do uruchomienia serwera programistycznego. Pamiętaj, że możesz także uruchomić aplikację bezpośrednio, więc narzędzie yesod
jest opcjonalne.
Application.hs
zawiera kod, który rozsyła żądania między modułami obsługi. Konfiguruje również ustawienia bazy danych i rejestrowania, jeśli ich użyłeś.
Foundation.hs
definiuje typ App
, który może być postrzegany jako środowisko dla wszystkich programów obsługi. Będąc w HandlerT
, możesz uzyskać tę wartość za pomocą funkcji getYesod
.
Import.hs
to moduł, który po prostu ponownie eksportuje często używane rzeczy.
Model.hs
zawiera szablon Haskell, który generuje kod i typy danych używane do interakcji z Model.hs
danych. Prezentuj tylko, jeśli korzystasz z DB.
config/models
to miejsce, w którym definiujesz schemat DB. Używany przez Model.hs
.
config/routes
definiuje identyfikatory URI aplikacji sieci Web. Dla każdej metody HTTP trasy musisz utworzyć {method}{RouteR}
obsługi o nazwie {method}{RouteR}
.
katalog static/
zawiera statyczne zasoby witryny. Są one kompilowane do Settings/StaticFiles.hs
binarnego przez moduł Settings/StaticFiles.hs
.
katalog templates/
katalog zawiera szablony Szekspira, które są używane podczas obsługi żądań.
Wreszcie katalog Handler/
zawiera moduły definiujące moduły obsługi tras.
Każdy HandlerT
obsługi jest HandlerT
monady HandlerT
opartą na IO. Możesz sprawdzać parametry żądania, jego treść i inne informacje, wykonywać zapytania do bazy danych za pomocą runDB
, wykonywać dowolne runDB
/ wy i zwracać różne typy treści do użytkownika. Aby obsługiwać HTML, defaultLayout
jest funkcja defaultLayout
która umożliwia zgrabną kompozycję szablonów szekspirowskich.