Comercialización:
ventas@acsinet-solutions.com
Servicios Educacionales:
educacional@acsinet-solutions.com
Servicios de Consultoría:
consultoría@acsinet-solutions.com
Comercialización:
soporte@acsinet-solutions.com

Teléfonos:
58 93 36 63
Oficina:
58 93 36 63
Fax:
58 93 36 63
Celulares:
044 55 54 56 77 45







Estructura de una Aplicación REST sobre Cetia4

Examinando la Aplicación forum

El objetivo de este tutorial es desmenuzar el funcionamiento de una aplicación web escrita en Cetia4 con REST, con el fin de explicar cada una de sus partes. La aplicación que se explicará en este caso es forum_injection ( o forum ), que se ofrece como parte de la distribución abierta del framework que se puede consultar en esta liga.

Es un objetivo de esta serie de tutoriales el presentar la construcción de una misma aplicación siguiendo diferentes aproximaciones. Posteriormente se pretende ofrecer un análisis similar sobre aplicaciones desarrolladas en JavaServer Faces, Struts 1 y 2, y posiblemente otros frameworks.



La Aplicación

La aplicación forum simula la estructura de un foro, aunque su objetivo principal es mostrar varias características del framework. Permite realizar búsquedas sobre tópicos, agregar nuevos y editarlos, además de agregar mensajes asociados a cada uno de ellos. También contiene un pequeńo catálogo de tipos de tópicos que es editable.

Las siguientes son algunos ejemplos de pantallas con las que cuenta la aplicación; aunque la mejor manera de familiarizarse con la aplicación es descargarla y ejecutarla:



Listado de Tópicos Insertar Tópico Mensajes por Tópico Catálogo de Tipos



La Jerarquía de Recursos

Una aplicación REST se estructura como una jerarquía de recursos. En el caso de la aplicación forum, estos recursos representan tópicos, tipos de tópicos, y mensajes dentro de tópicos. También se agrega un recurso main ( principal ) que representa el punto de entrada de la aplicación desde una perspectiva web.

La estructura básica de estos recursos puede visualizarse como sigue:

Obviamente, los recursos que corresponden a cada tópico, mensaje y tipo de tópico de forma individual son dinámicos; pueden generarse tantos como el uso de la aplicación lo requiera.



Implantando la Jerarquía de Recursos en Cetia4

Cada uno de los recursos planteados con anterioridad se implementan en el framework por medio de un servlet mapeado hacia dicho recurso, o por medio de un módulo anidado. El siguiente diagrama resume el mapeo que se realiza para la jerarquía de recursos anterior en la aplicación forum:

Como puede verse, la aplicación se compone de cuatro diferentes componentes. MainServlet es un componente estándar que forma parte de Cetia4, y el resto de los servlets listados pueden encontrarse bajo el paquete com.example.controller.



Métodos Asociados a Cada Recurso

El siguiente diagrama muestra los métodos asociados a cada recurso dentro de cada uno de los componentes que se han listado con anterioridad. Estos métodos definen la funcionalidad asociada a cada recurso en el árbol. En este nuevo diagrama, todos los recursos que corresponden a un mismo nivel ( recursos dinámicos ) se contraen en uno solo para simplificar el diagrama.



URLs que Invocan cada Método

Cada uno de los métodos mostrados con anterioridad responden a tipos de peticiones particulares. En la siguiente tabla se asocian estos métodos con las diferentes posibles peticiones en ambiente web ( HTML, XHTML ) o web service ( XML ):



com.acsinet_solutions.cetia4.controller.rest.support.MainServlet

GET /forum/main render( RenderContext )

com.example.controller.TopicServlet

GET /forum/topics
GET /forum/topics?firstResult=0 &pattern=xxx
GET /forum/topics?firstResult=0 &orderBy=name&ascending=true
GET /forum/topics?firstResult=10
render ( RenderContext, TopicSearchFilter )
GET /forum/topics?_method=insertForm renderInsertForm( RenderContext )
POST /forum/topics?_method=insert insert( ActionContext, TopicDTO )
GET /forum/topics/5 render( RenderContext, int id )
GET /forum/topics/5?_method=updateForm renderUpdateForm ( RenderContext, int id )
POST /forum/topics/5?_method=update update( ActionContext, int id, TopicDTO )
POST /forum/topics/5?_method=delete delete( ActionContext, int id )

com.example.controller.MessagesModule

GET /forum/topics/5/messages render( RenderContext, int topicId )
POST /forum/topics/5/messages ?_method=insert insert( RenderContext, int topicId, MessageDTO message )
GET /forum/topics/5/messages/2 render( RenderContext, int topicId, int number )

com.example.controller.TopicTypesServlet extends com.acsinet_solutions.cetia4.controller.rest.support.GenericDAOServlet

GET /forum/topic_types render( RenderContext, Object )
POST /forum/topic_types?_method=insert insert( ActionContext, Object )
GET /forum/topic_types/1 render( RenderContext, String id )
POST /forum/topic_types/1?_method=update update ( ActionContext, String id, Object )
POST /forum/topic_types/1?_method=delete delete( ActionContext, String id )



Navegación Web

Integrando toda la información anterior, se puede establecer la navegación web que tendrá la aplicación.

La relación básica entre los componentes se muestra en la siguiente imagen:

MainServlet es el componente de entrada para una aplicación web, y proporciona acceso hacia otros componentes principales como TopicsServlet para el manejo de tópicos, y TopicTypesServlet para el manejo del catálogo de tipos. En aplicaciones más complejas, el número de componentes será mucho mayor. El acceso por web service ( XML ) posiblemente no requiera de este componente principal.

Por otro lado, a partir de TopicsServlet se tiene acceso hacia MessagesModule, que implementa el manejo de los recursos asociados a mensajes de un tópico.

Un diagrama expandido de cada una de las pantallas que implementan la aplicación forum se muestra a continuación. También se relacionan las pantallas y las acciones con los URLs que invocan a cada una de ellas, y por medio de la tabla mostrada con anterioridad se puede establecer la relación con el método que es ejecutado en cada interacción. Documentos posteriores explicarán el código relacionado con cada una de estas pantallas:




Regresar


Copyright © ACSINET S.A. de C.V. 2007 http://www.acsinet-solutions.com

Derechos Reservados de este Material:
Atribución-No Comercial-Licenciamiento Recíproco 2.5 México

http://creativecommons.org/licenses/by-nc-sa/2.5/mx/

Eres libre de: a) copiar, distribuir y comunicar públicamente la obra, b) hacer obras derivadas. Bajo las condiciones siguientes: a) Atribución. Debes reconocer la autoría de la obra en los términos especificados por el propio autor o licenciante. b) No comercial. No puedes utilizar esta obra para fines comerciales. c) Licenciamiento Recíproco. Si alteras, transformas o creas una obra a partir de esta obra, solo podrás distribuir la obra resultante bajo una licencia igual a ésta.
Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Nada en esta licencia menoscaba o restringe los derechos morales del autor.

Java and all Java-based trademarks and logos are trademarks of Sun Microsystems in the United States and/or other countries.

Other products and services are trademarks of their respective owners.




Copyright © ACSINET S.A. de C.V. 2000 - 2007 Derechos Reservados.


Java™ is a trademark of Sun Microsystems in the United States and/or other countries All other products and services are trademarks of their respective owners.