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
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.
|


















