Inicio > Delphi, JSON, REST > DelphiMVCFramework; Primeros pasos

DelphiMVCFramework; Primeros pasos

viernes, 30 de octubre de 2020 Dejar un comentario Ir a comentarios
Share Button

En la última entrada del blog vimos una presentación a DMVC como framework REST. En este caso vamos a avanzar un poco más y vamos a dar un vistazo rápido a la configuración y a la estructura de las respuestas que podemos dar desde el servidor.

Entrada 1: DelphiMVCFramework; Framework REST para Delphi
Entrada 2: DelphiMVCFramework; Primeros pasos
Entrada 3: DelphiMVCFramework; Acciones básicas (GET, POST, PUT y DELETE)

Antes de avanzar en nuestro controlador, vamos a detenernos un momento en el «controlador de sistema» (por llamarlo así). Un controlador que viene integrado «de serie» en nuestro servidor.

CONTROLADOR DE SISTEMA

En nuestro primer ejemplo, en la entrada anterior vimos como se genera un proyecto de ejemplo utilizando el wizard que se instala con MVC. Al crear un proyecto de ejemplo se nos genera automáticamente un controlador (TMyWebController) que incluye varias acciones.

Una vez que aceptamos el wizard, obtendremos en el código unas acciones de ejemplo como estas:

image

Todos los proyectos de DMVC además incluyen un controlador de sistema. Este controlador está incluido en la unit MVCFramework.SysControllers.pas e incorpora una serie de “Actions” de “sistema” que podemos invocar en nuestro servidor:

[MVCPath('/describeserver.info')]
[MVCHTTPMethods([httpGET])]
procedure DescribeServer;
…
MVCPath('/describeplatform.info')]
[MVCHTTPMethods([httpGET])]
procedure DescribePlatform;[MVCPath('/serverconfig.info')]
[MVCHTTPMethods([httpGET])]
procedure ServerConfig;

Así que si ponemos en marcha nuestro server, podemos abrir un navegador y escribir las siguientes peticiones para obtener información de sistema:

image

NOTA: Este controlador está disponible sólo si trabajamos en localhost.

Esta primera parte la podéis seguir en este video:

 

RENDERIZADO DE ACCIONES

En la anterior entrada vimos la respuesta que nos devuelve nuestro servidor REST cuando invocamos la siguiente ruta:  http://localhost:8080/api

image

Este “renderizado” es el mecanismo con el que DMVC devuelve los elementos que le solicitamos. Para hacerlo el servidor “serializa” estos elementos y los envía al cliente. DMVC permite realizar el renderizado de varios tipos de elementos de forma sencilla; Los más utilizados y en los que nos vamos a centrar son los siguientes:

  • Texto simple
  • Texto HTML
  • Estructuras JSON
  • Datasets
  • Objetos delphi
  • Listas de objetos
  • Excepciones
  • Streams es formato raw

Todos los métodos de Renderizado los podemos encontrar en la clase TMVCRenderer de la unit MVCFramework.pas de DMVC.

A continuación os muestro algunos ejemplos de renderizado.

Para devolver un texto o un html, basta con pasarlo como string. En ambos casos podemos utilizar la propiedad ContentType o el atributo [MVCProduces] en el método.

En el caso de un objeto delphi o una lista de ellos podemos utilizar lo siguiente:

var  
  usr:TUsuario; 
begin 
… 
Render(usr);

En el caso de las lista, podemos utilizar TObjectList y las propiedades de genéricos de Delphi.

var  
  usrList:TObjectList; 
begin 
… 
Render(usrList);

Obtendremos un JSON con el contenido de los objetos.

Podemos renderizar de forma fácil una TDataset pasándolo como parámetro o podemos generar una excepció utilizando un código similar a este:

  raise EMVCDatabaseException.Create('Error de conexión a la Base de Datos');
  raise EMVCDatabaseException.Create('Error de Base de Datos', 
                 'La conexion no se ha podido realizar', 33, 401);

Por último y esto lo dejo para que lo veáis en este segundo vídeo, os muestro al final cómo podemos utilizar Streams para renderizar datos, en este caso una imagen.

Os adjunto el código fuente del proyecto y las Bases de datos que he utilizado.

Código fuente del Ejemplo de Renderizado

Bases de Datos SQLite de ejemplo

Como siempre sugerencias, comentarios, críticas,…. siempre son bienvenidas.

Un saludo y hasta la próxima.

Share Button
Categories: Delphi, JSON, REST Tags: , ,
  1. Lucas
    viernes, 6 de noviembre de 2020 a las 14:56 | #1

    Hola muy bien.

    Estoy haciendo un marco algo diferente.
    Usando Indy para la comunicación y Delphi Objects para generar SQL en el servidor y regresar como un Json al cliente.

    Muy bien tus felicitaciones.

  1. Sin trackbacks aún.
What is 16 + 19 ?
Please leave these two fields as-is:
IMPORTANTE! Para continuar, debes contestar la pregunta anterior (para evitar SPAM) :-)