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.

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.

  2. nufort
    jueves, 28 de octubre de 2021 a las 05:49 | #2

    Tengo un error muy extraño con el renderizado de una consulta (Dataset).

    Render(dmConexion.qAtable , False);

    Al agregar la configuracion para manejar webtoken (tomado de los ejemplos de Daniel Teti), me indica que no se encuentra implementado.

    procedure TMVCHTMLSerializer.RaiseNotImplemented;
    begin
    raise EMVCException.Create(‘Not Implemented’);
    end;

    Por si alguien mas le sucede y poder comparar notas.

  3. martes, 16 de noviembre de 2021 a las 08:49 | #3

    @Lucas
    Hola Lucas y gracias por el comentario.
    Te pido dsculpas por que no contestarte antes (no me llegó el aviso).

  4. martes, 16 de noviembre de 2021 a las 08:52 | #4

    @nufort
    Hola nufort, te pido dsculpas por que no contestarte antes (no me llegó el aviso).
    Tendrías que revisar el código y hacer una ejecución paso a paso para ver dónde se está generando la excepción.
    El error parece claro (hay algo que te falta implementar). Es posible que estés utilizando algún método abstracto que debas redefinir.
    pero eso te lo dirá la ejecución y el punto/llamada donde se genera este error.

    Un saludo.

  1. Sin trackbacks aún.