Principales tecnologías utilizadas: PHP 8, Slim 3, MySQL, Monolog, Redis, dotenv, PHPUnit y JSON Web Tokens.
Además, se utilizo otras herramientas adicionales como: Docker & Docker Compose, Travis CI, Swagger, Scrutinizer, Sonar Cloud, PHPStan, PHP Insights, Heroku and CORS.
Esta simple API RESTful, permite que las operaciones CRUD administren recursos como: Usuarios, Tareas y Notas
.
- Git.
- Composer.
- PHP 8+.
- MySQL/MariaDB.
- Redis (Optional).
- o Docker.
Puede crear un nuevo proyecto ejecutando los siguientes comandos:
composer create-project fernandocalmet/php-slim-rest-api [my-api-name]
cd [my-api-name]
composer restart-db
composer test
composer start
En su terminal, ejecute estos comandos:
git clone https://github.com/fernandocalmet/php-slim-rest-api.git && cd php-slim-rest-api
cp .env.example .env
composer install
composer restart-db
composer test
composer start
Puedes usar este proyecto usando docker y docker-compose.
Versión Minimal Docker:
- Engine: 18.03+
- Compose: 1.21+
Comandos:
# Start the API (this is my alias for: docker-compose up -d --build).
$ make up
# To create the database and import test data from scratch.
$ make db
# Checkout the API.
$ curl http://localhost:8080
# Stop and remove containers (it's like: docker-compose down).
$ make down
Comandos:
composer restart-db
Comandos básicos
# Start Service:
redis-cli
# View All cache:
keys *
# Clean cache:
FLUSHALL
# Query (example of a cached data):
get "php-slim-rest-api:test:status"
- slim/slim: Slim es un micro framework PHP que le ayuda a escribir rápidamente aplicaciones web y APIs simples pero potentes.
- respect/validation: El motor de validación más impresionante jamás creado para PHP.
- palanik/corsslim: Middleware de intercambio de recursos de origen cruzado (CORS) para PHP Slim.
- vlucas/phpdotenv: Carga variables de entorno desde
.env
agetenv()
,$ _ENV
y$ _SERVER
automágicamente. - predis/predis: Cliente Redis flexible y con todas las funciones para PHP y HHVM.
- firebase/php-jwt: Una biblioteca simple para codificar y decodificar JSON Web Tokens (JWT) en PHP.
- monolog/monolog: Monolog envía sus registros a archivos, sockets, bandejas de entrada, bases de datos y varios servicios web. Consulte la lista completa de controladores a continuación. Los controladores especiales le permiten crear estrategias de registro avanzadas.
- phpunit/phpunit: El marco de pruebas unitarias de PHP.
- phpstan/phpstan: PHPStan - Herramienta de análisis estático de PHP.
- pestphp/pest: Pest es un elegante marco de pruebas PHP con un enfoque en la simplicidad.
- nunomaduro/phpinsights: Comprobaciones instantáneas de calidad de PHP desde su consola.
- rector/rector: Actualizaciones instantáneas y refactorización instantánea de cualquier código PHP 5.3+.
- vimeo/psalm: Una herramienta de análisis estático para encontrar errores en aplicaciones PHP.
Ejecute todas las pruebas de PHPUnit con composer test
.
$ composer test
> phpunit
PHPUnit 9.3.10 by Sebastian Bergmann and contributors.
............................................................... 63 / 63 (100%)
Time: 00:02.279, Memory: 18.00 MB
OK (63 tests, 390 assertions)
HTTP Method | URL | Auth | Descripción |
---|---|---|---|
GET | / |
No | Obtiene la versión, estado y las rutas de los endpoints disponibles de la API, si la petición es exitosa, retornará un status HTTP 200 (OK). |
GET | /status |
No | Obtiene el estado de los servicios disponibles y la cantidad de los registros en la base de datos, si la petición es exitosa, retornará un status HTTP 200 (OK). En caso no este conectada la base de datos retornará un status HTTP 500 (Error). |
POST | /login |
No | Obtiene el JSON Web Token del usuario, si la petición es exitosa, retornará un status HTTP 200 (OK). En caso de no encontrar o que no coincidan las creedenciales del usuario correspondiente, retornará un status HTTP 400 (Bad Request). |
GET | /api/v1/users |
Si | Obtiene los usuarios, si la petición es exitosa, retornará un status HTTP 200 (OK). Si no estas autenticado retornará un status HTTP 403 (Forbidden). En caso de no encontrar ningun usuario retornará un status HTTP 404 (Not Found). |
GET | /api/v1/users/{id} |
Si | Obtiene un usuario basado en el Id de la cuenta, si la petición es exitosa, retornará un status HTTP 200 (OK). Si no estas autenticado retornará un status HTTP 403 (Forbidden). En caso de no encontrar ningun usuario retornará un status HTTP 404 (Not Found). |
POST | /api/v1/users |
No | Crea un usuario, la petición deberá incluir los datos dentro del cuerpo de la petición. Si el usuario es creado retornará un status HTTP 201 (Created). En caso de que exista un dato con restricción unica que este duplicado retornará un status HTTP 403 (Forbidden). |
PUT | /api/v1/users/{id} |
Si | Actualiza el usuario basado en el Id de la cuenta, si el usuario es actualizado retornará un status HTTP 200 (OK). Si no estas autenticado retornará un status HTTP 403 (Forbidden). En caso de que exista un dato con restricción unica que este duplicado retornará un status HTTP 403 (Forbidden). En caso de no encontrar ningun usuario retornará un status HTTP 404 (Not Found). |
DELETE | /api/v1/users/{id} |
Si | Elimina un usuario basado en el Id de la cuenta, si el usuario es eliminado retornará un status HTTP 200 (OK). Si no estas autenticado retornará un status HTTP 403 (Forbidden). En caso de no encontrar ningun usuario retornará un status HTTP 404 (Not Found). |
GET | /api/v1/users/search/{query} |
Si | Obtiene resultados relacionados a una busqueda por coincidencias de atributos clave de los usuarios, si se encuentran datos retornará un status HTTP 200 (OK). Si no estas autenticado retornará un status HTTP 403 (Forbidden). En caso de no encontrar ningun usuario retornará un status HTTP 404 (Not Found). |
GET | /api/v1/tasks |
Si | Obtiene las tareas, si la petición es exitosa, retornará un status HTTP 200 (OK). Si no estas autenticado retornará un status HTTP 403 (Forbidden). En caso de no encontrar ninguna tarea retornará un status HTTP 404 (Not Found). |
GET | /api/v1/tasks/{id} |
Si | Obtiene una tarea basado en el Id de la tarea y la sesión del usuario activo, si la petición es exitosa, retornará un status HTTP 200 (OK). Si no estas autenticado retornará un status HTTP 403 (Forbidden). En caso de no encontrar ninguna tarea retornará un status HTTP 404 (Not Found). |
POST | /api/v1/tasks |
Si | Crea una tarea basado en la sesión actual del usuario, la petición deberá incluir los datos dentro del cuerpo de la petición. Si la tarea es creada retornará un status HTTP 201 (Created). Si no estas autenticado retornará un status HTTP 403 (Forbidden). En caso de que exista un dato con restricción unica que este duplicado retornará un status HTTP 403 (Forbidden). |
PUT | /api/v1/tasks/{id} |
Si | Actualiza una tarea basado en el Id de la tarea y la sesión del usuario activo, si la tarea es actualizada retornará un status HTTP 200 (OK). Si no estas autenticado retornará un status HTTP 403 (Forbidden). En caso de que exista un dato con restricción unica que este duplicado retornará un status HTTP 403 (Forbidden). En caso de no encontrar ninguna tarea retornará un status HTTP 404 (Not Found). |
DELETE | /api/v1/tasks/{id} |
Si | Elimina una tarea basado en el Id de la tarea y la sesión del usuario activo, si la tarea es eliminada retornará un status HTTP 200 (OK). Si no estas autenticado retornará un status HTTP 403 (Forbidden). En caso de no encontrar ninguna tarea retornará un status HTTP 404 (Not Found). |
GET | /api/v1/tasks/search/{query} |
Si | Obtiene resultados relacionados a una busqueda por coincidencias de atributos clave de las tareas basado en la sesión del usuario activo, si se encuentran datos retornará un status HTTP 200 (OK). Si no estas autenticado retornará un status HTTP 403 (Forbidden). En caso de no encontrar ninguna tarea retornará un status HTTP 404 (Not Found). |
GET | /api/v1/notes |
No | Obtiene las notas, si la petición es exitosa, retornará un status HTTP 200 (OK). En caso de no encontrar ninguna nota retornará un status HTTP 404 (Not Found). |
GET | /api/v1/notes/{id} |
No | Obtiene una nota basado en el Id, si la petición es exitosa, retornará un status HTTP 200 (OK). En caso de no encontrar ningun usuario retornará un status HTTP 404 (Not Found). |
POST | /api/v1/notes |
No | Crea una nota, la petición deberá incluir los datos dentro del cuerpo de la petición. Si la nota es creada retornará un status HTTP 201 (Created). En caso de que exista un dato con restricción unica que este duplicado retornará un status HTTP 403 (Forbidden). |
PUT | /api/v1/notes/{id} |
No | Actualiza la nota basado en el Id, si la nota es creado retornará un status HTTP 200 (OK). En caso de que exista un dato con restricción unica que este duplicado retornará un status HTTP 403 (Forbidden). En caso de no encontrar ninguna nota retornará un status HTTP 404 (Not Found). |
DELETE | /api/v1/notes/{id} |
No | Elimina una nota basado en el Id, si la nota es eliminada retornará un status HTTP 200 (OK). En caso de no encontrar ninguna nota retornará un status HTTP 404 (Not Found). |
GET | /api/v1/notes/search/{query} |
No | Obtiene resultados relacionados a una busqueda por coincidencias de atributos clave de las notas, si se encuentran datos retornará un status HTTP 200 (OK). En caso de no encontrar ninguna nota retornará un status HTTP 404 (Not Found). |
Toda la información de la API, preparada para descargar y usar como colección de postman: Importar Colección.
Además, puede ver la especificación de OpenAPI, utilizando Swagger UI.
Licencia MIT. Puedes verla en el Archivo de Licencia para más información.