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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow