
Resumen
En este laboratorio se desarrolla una aplicación web PHP sobre una base de datos MongoDB. Se creará una API REST para interactuar con la base de datos.
-
Familiarse con el driver MongoDB para PHP.
-
Desarrollar una API REST en PHP sencilla sobre MongoDB.
-
Crear una aplicación sencilla en PHP sobre MongoDB.
1. Recursos
Puedes obtener más información sobre cómo trabajar con MongoDB siguiendo estos tutoriales:
2. Actividades
Desarrollar una aplicación web en PHP sobre una base de datos MongoDB. Se trata de un ejemplo de un Blog sencillo sobre información legislativa norteamericana. La aplicación ofrece las siguientes funciones básicas:
-
La aplicación implementa una API REST que permite lo siguiente:
-
Obtener toda la información de un post a partir de su
ObjectId
-
Obtener todos los posts que tengan una etiqueta determinada
-
Crear un post
-
Añadir un comentario a un post
-
-
En la página de inicio se muestran cinco posts.
-
De forma predeterminada, cada post se presenta de forma parcial, mostrando su título, persona que lo ha escrito, un extracto del cuerpo del post y las etiquetas.
-
Se puede mostrar información completa sobre un post.
-
Se pueden mostrar los posts (máximo 5) asociados a una etiqueta.
-
La aplicación también muestra la lista de todas las personas que hayan realizado algún comentario en algún post. Se pueden mostrar los posts (máximo 5) comentados por una persona.
Note
|
La aplicación clonada es totalmente funcional, pero omite toda la lógica de acceso a la base de datos (conexión y endpoints de la API). El objetivo de este laboratorio es completar la lógica de acceso a la base de datos para que la aplicación funcione correctamente. |
2.1. Ejercicios propuestos
-
Importar el archivo JSON
posts.json
disponible en SampleDatabases en una colecciónposts
dentro de una base de datos denominadablog
. -
Hacer un fork del repositorio de base y completar los scripts PHP para que la aplicación funcione correctamente. Los scripts PHP son los siguientes, modificando los lugares en los que aparece
YOUR CODE HERE
:-
public/connection.php
-
public/routes/posts.php
-
2.1.1. Descripción de los endpoints de la API REST
Method | URL | Descripción | Uso |
---|---|---|---|
GET |
|
Obtener un post por ID |
Devuelve los detalles completos de un post específico |
GET |
|
Obtener posts por etiqueta |
Devuelve todos los posts que contienen la etiqueta proporcionada |
POST |
|
Crear un nuevo post |
Crea un nuevo post con la información proporcionada en el cuerpo de la petición |
POST |
|
Añadir comentario a un post |
Añade un comentario al post especificado con la información proporcionada en el cuerpo |
2.1.2. Ejemplos de cuerpo y respuesta de los endpoints de la API REST
-
Operación: Obtener la lista de posts
-
Endpoint:
GET /api/posts
-
Respuesta:
{ "status": 200, "data": [ { "_id": "50ab0f8dbcf1bfe2536dc7df", "body": "Four score and seven years ago our fathers brought forth on this continent a new nation, conceived in liberty, and dedicated to ...", "permalink": "TLxrBfyxTZjqOKqxgnUP", "author": "machine", "title": "Gettysburg Address", "tags": [ "wrist", "pasta", "pantyhose", "freon", "tempo", "pail", "atom", "hydrogen", "pilot", "secretary" ], "comments": [ { "body": "Lorem ipsum dolor sit ...", "email": "WCnznPGN@WrhZKAxu.com", "author": "Aleida Elsass" }, { "body": "Lorem ipsum dolor sit amet, ...", "email": "SjcQpnuO@LnriWoky.com", "author": "Joaquina Arbuckle" }, ... ] }, { "_id": "50ab0f8dbcf1bfe2536dc7e0", "body": "When in the Course of human events, it becomes necessary for one people to dissolve the political bands which have connected them with another, ...", "permalink": "TLxrBfyxTZjqOKqxgnUQ", "author": "machine", "title": "Declaration of Independence", "tags": [ "pantyhose", "freon", "tempo", "pail", "atom", "hydrogen", "pilot", "secretary", "wrist", "pasta" ], "comments": [ { "body": "Lorem ipsum dolor sit ...", "email": " "author": "Aleida Elsass" }, ... ] }, ... ] }
-
Operación: Crear un nuevo post
-
Endpoint:
POST /api/posts
-
Cuerpo:
{ "body": "En un lugar de La Mancha ...", "permalink": "TLxrBfyxTZjqOKqxgnUQ", "author": "nosqlist", "title": "El Quijote", "tags": [ "caballerías", "fantasía", "héroes" ] }
-
Operación: Añadir un comentario a un post
-
Endpoint:
POST /api/posts/67e339d760c452c6800ff8a2/comments
-
Cuerpo:
{ "body": "Lorem ipsum dolor sit amet, ...", "email": "johndoe@acme.com", "author": "John Doe" }
-
Operación: Obtener una lista de posts por etiqueta
-
Endpoint:
GET /api/posts?tag=caballerías
-
Respuesta:
{ "status": 200, "data": [ { "_id": "67e339d760c452c6800ff8a2", "body": "En un lugar de La Mancha ...", "permalink": "TLxrBfyxTZjqOKqxgnUQ", "author": "nosqlist", "title": "El Quijote", "tags": [ "caballerías", "fantasía", "héroes" ], "comments": [ { "body": "Lorem ipsum dolor sit amet, ...", "email": "johndoe@acme.com", "author": "John Doe" } ] } ], "total": 1 }
3. Pantallas de la aplicación
A continuación se muestran algunas capturas de pantalla de la aplicación:
Esta sería la pantalla de inicio de la aplicación mostrando los cinco primeros posts. A la derecha se muestra la lista de personas que han comentado algún post.

Al hacer clic en una etiqueta (p.e. watch`
) se muestran los posts asociados a esa etiqueta. La figura muestra los posts asociados a la etiqueta watch
.

También se pueden mostrar los posts asociados a la persona que ha creado el post y a personas que han realizado comentarios. El resultado sería similar al de las figuras anteriores.
La aplicación permite crear nuevos posts pulsando el botón Nuevo Post
. La figura muestra el formulario para crear un nuevo post.

Al hacer clic en un post se muestra la información completa del post. La figura muestra la información completa de un post. Al final se presenta un botón para añadir un comentario, que se muestra en la figura siguiente.
