Haskell Language
Desarrollo web
Buscar..
Servidor
Servant es una biblioteca para declarar API en el nivel de tipo y luego:
- servidores de escritura (esta parte del servidor puede considerarse un framework web),
- obtener funciones de cliente (en haskell),
- generar funciones de cliente para otros lenguajes de programación,
- Genera documentación para tus aplicaciones web.
- y más...
Servant tiene una API concisa pero potente. Una API simple puede escribirse en muy pocas líneas de código:
{-# 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
Ahora podemos declarar nuestra API:
type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
que se afirma que deseamos exponer /users
a GET
peticiones con una consulta de parámetro sortby
de tipo SortBy
y JSON retorno de tipo de User
en la respuesta.
Ahora podemos definir nuestro manejador:
-- 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
Y el método principal que escucha en el puerto 8081
y sirve nuestra API de usuario:
main :: IO ()
main = run 8081 app1
Tenga en cuenta que Stack tiene una plantilla para generar API básicas en Servant, que es útil para comenzar a trabajar muy rápido.
Yesod
El proyecto de Yesod se puede crear con una stack new
utilizando las siguientes plantillas:
-
yesod-minimal
. El andamio más simple posible de Yesod. -
yesod-mongo
. Utiliza MongoDB como motor DB. -
yesod-mysql
. Utiliza MySQL como motor de base de datos. -
yesod-postgres
. Utiliza PostgreSQL como motor de base de datos. -
yesod-postgres-fay
. Utiliza PostgreSQL como motor de base de datos. Utiliza el lenguaje Fay para front-end. -
yesod-simple
. Plantilla recomendada para usar, si no necesita base de datos. -
yesod-sqlite
. Utiliza SQlite como motor DB.
yesod-bin
paquete yesod-bin
proporciona el ejecutable yesod
, que se puede usar para ejecutar el servidor de desarrollo. Tenga en cuenta que también puede ejecutar su aplicación directamente, por yesod
herramienta yesod
es opcional.
Application.hs
contiene código que despacha solicitudes entre los manejadores. También establece la base de datos y la configuración de registro, si los usó.
Foundation.hs
define el tipo de App
, que puede verse como un entorno para todos los manejadores. Al estar en la mónada HandlerT
, puede obtener este valor utilizando la función getYesod
.
Import.hs
es un módulo que simplemente reexporta cosas comúnmente utilizadas.
Model.hs
contiene la plantilla Haskell que genera el código y los tipos de datos utilizados para la interacción DB. Presente solo si está utilizando DB.
config/models
es donde define su esquema de base de datos. Utilizado por Model.hs
.
config/routes
define los URI de la aplicación web. Para cada método HTTP de la ruta, deberá crear un controlador llamado {method}{RouteR}
.
static/
directory contiene los recursos estáticos del sitio. Estos son compilados en binario por el módulo de Settings/StaticFiles.hs
.
templates/
directory contiene plantillas de Shakespeare que se utilizan cuando se atienden solicitudes.
Finalmente, el controlador Handler/
directorio contiene módulos que definen los controladores para las rutas.
Cada controlador es una acción de mónada HandlerT
basada en IO. Puede inspeccionar los parámetros de solicitud, su cuerpo y otra información, realizar consultas al DB con runDB
, realizar IO arbitrarias y devolver varios tipos de contenido al usuario. Para servir HTML, se defaultLayout
función defaultLayout
que permite una composición ordenada de plantillas shakespearianas.