Creación de una API REST de tablero de anuncios mínima viable con fines educativos.
Obtener listas de todas las etiquetas, publicaciones y usuarios
Buscar en listas
Registro de usuario
Un usuario registrado puede:
Agregar nuevas publicaciones
Comentar publicaciones existentes
Elimina y edita tus publicaciones y comentarios
PHP 8.1+
laravel 10
Compositor
mysql
POST
/api/v1/auth/register
RegistrarseNombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
nombre | requerido | cadena | Nombre |
apodo | requerido | cadena | Identificador legible por humanos |
correo electrónico | requerido | cadena | Dirección de correo electrónico |
contraseña | requerido | cadena | Contraseña |
contraseña_confirmada | requerido | cadena | Confirmación de contraseña |
201
CREATED
{ "access_token", "token_type": "Bearer" }
POST
/api/v1/auth/login
Iniciar sesiónNombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
correo electrónico | requerido | cadena | Dirección de correo electrónico |
contraseña | requerido | cadena | Contraseña |
200
OK
{ "access_token", "token_type":"Bearer" }
POST
/api/v1/auth/logout
Cerrar sesiónLlave | Valor |
---|---|
Autorización | Portador {token} |
204
NO CONTENT
GET
/api/v1/profile
Obtener perfil de usuario autenticadoLlave | Valor |
---|---|
Autorización | Portador {token} |
200
OK
{ "data": { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" } }
GET
/api/v1/profile/posts
Obtener el perfil y las publicaciones de un usuario autenticadoLlave | Valor |
---|---|
Autorización | Portador {token} |
Nombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
por_página | opcional | entero | Número de publicaciones por página |
página | opcional | entero | Número de página |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug", }, ... ], "comments_count" } ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/profile/comments
Obtenga el perfil y los comentarios de un usuario autenticadoLlave | Valor |
---|---|
Autorización | Portador {token} |
Nombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
por_página | opcional | entero | Número de comentarios por página |
página | opcional | entero | Número de página |
200
OK
{ "data": [ { "comment_id", "body", "created_at":, "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/users
Obtener todos los usuariosNombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
q | opcional | cadena | Consulta de búsqueda |
por_página | opcional | entero | Número de usuarios por página |
página | opcional | entero | Número de página |
200
OK
{ "data": [ { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" }, ... ], "links": {...}, "meta": {...} }
GET
/api/v1/users/{nickname}
Obtener usuario200
OK
{ "data": { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" } }
GET
/api/v1/users/{nickname}/posts
Obtener el usuario y sus publicacionesNombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
por_página | opcional | entero | Número de publicaciones por página |
página | opcional | entero | Número de página |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ], "comments_count" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/users/{nickname}/comments
Obtiene el usuario y sus comentariosNombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
por_página | opcional | entero | Número de comentarios por página |
página | opcional | entero | Número de página |
200
OK
{ "data": [ { "comment_id", "body", "created_at":, "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/tags
Obtener todas las etiquetasNombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
q | opcional | cadena | Consulta de búsqueda |
200
OK
{ "data": [ { "tag_id", "name", "slug", "post_count" }, ... ] }
GET
/api/v1/tags/{slug}
Obtener una etiqueta y sus publicacionesNombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
por_página | opcional | entero | Número de publicaciones por página |
página | opcional | entero | Número de página |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname" }, ], "links": {...}, "meta": {...}, "tag": { "tag_id", "name", "slug" } }
GET
/api/v1/posts
Obtener todas las publicacionesNombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
q | opcional | cadena | Consulta de búsqueda |
por_página | opcional | entero | Número de publicaciones por página |
página | opcional | entero | Número de página |
200
OK
{ "data": [ { "post_id, "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ], "comments_count" }, ... ], "links": {...}, "meta": {...} }
GET
/api/v1/posts/{id}
Obtener una publicación y sus comentariosNombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
por_página | opcional | entero | Número de comentarios por página |
página | opcional | entero | Número de página |
200
OK
{ "data": [ { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "post": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] } }
POST
/api/v1/posts
Agregar nueva publicaciónLlave | Valor |
---|---|
Autorización | Portador {token} |
Nombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
título | opcional | cadena | Título |
precio | opcional | flotar | Precio |
descripción | opcional | cadena | Descripción |
etiquetas[identificación] | opcional | matriz[int] | Conjunto de ID de etiquetas |
201
CREATED
{ "data": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] }, }
PUT
/api/v1/posts/{id}
Editar publicaciónLlave | Valor |
---|---|
Autorización | Portador {token} |
Nombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
título | opcional | cadena | Título |
precio | opcional | flotar | Precio |
descripción | opcional | cadena | Descripción |
etiquetas[identificación] | opcional | matriz[int] | Conjunto de ID de etiquetas |
200
OK
{ "data": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] }, }
DELETE
/api/v1/posts/{id}
Eliminar una publicaciónLlave | Valor |
---|---|
Autorización | Portador {token} |
204
NO CONTENT
POST
/api/v1/posts/{id}/comments
Agregar un nuevo comentario a una publicaciónLlave | Valor |
---|---|
Autorización | Portador {token} |
Nombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
cuerpo | requerido | cadena | Texto del comentario |
201
CREATED
{ "data": { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname", }, }
PUT
/api/v1/comments/{id}
Editar comentarioLlave | Valor |
---|---|
Autorización | Portador {token} |
Nombre | Tipo | tipo de datos | Descripción |
---|---|---|---|
cuerpo | requerido | cadena | Texto del comentario |
200
OK
{ "data": { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname", } }
DELETE
/api/v1/comments/{id}
Eliminar un comentarioLlave | Valor |
---|---|
Autorización | Portador {token} |
204
NO CONTENT
Clona este repositorio y ve a la carpeta de tu proyecto:
clon de git https://github.com/AllaAverina/bulletin-board-APIcd boletín-board-API
Instalar dependencias:
instalación del compositor
Inicie MySQL, cambie los parámetros para conectarse a la base de datos en el archivo .env.example y ejecute:
copiar .env.ejemplo .env
Ejecute el comando para ejecutar las migraciones:
php migración artesanal
O si desea completar la base de datos con datos ficticios:
php migración artesanal --semilla
Inicie el servidor web:
servicio artesanal php
Abra en su navegador, por ejemplo, http://localhost:8000/api/v1/posts
Cree una nueva base de datos para realizar pruebas, cambie los parámetros para conectarse a ella en el archivo .env.testing y ejecute:
prueba artesanal de php
Clona este repositorio y ve a la carpeta de tu proyecto:
clon de git https://github.com/AllaAverina/bulletin-board-APIcd boletín-board-API
Instalar dependencias:
ejecución de la ventana acoplable --rm -u "$(id -u):$(id -g)" -v "$(contraseña):/var/www/html" -w /var/www/html laravelsail/php82-composer:último instalación del compositor --ignore-platform-reqs
Cree un archivo .env:
cp.env.docker.examlpe.env
Crea un alias de shell y ejecuta navegar:
alias vela='[ -f vela ] && sh vela || vendedor de sh/bin/sail'sail up -d
Ejecute el comando para ejecutar las migraciones:
vela artesanal migrar
O si desea completar la base de datos con datos ficticios:
vela artesano emigrar --semilla
Ábralo en un navegador, por ejemplo, http://localhost/api/v1/posts
Para detener el uso de contenedores:
parada de vela
Configure el archivo .env.testing:
cp .env.docker.pruebas .env.pruebas
Ejecute las pruebas:
prueba artesanal de vela