{"id":20465906,"url":"https://github.com/fernandocalmet/php-slim-rest-api","last_synced_at":"2025-04-13T08:51:36.217Z","repository":{"id":41894651,"uuid":"241657595","full_name":"FernandoCalmet/php-slim-rest-api","owner":"FernandoCalmet","description":"🐘Rest API: Utilizando las tecnologías: PHP 8, Slim 3, MySQL, Redis, Monolog, dotenv, PHPUnit y JSON Web Tokens. Además, se utilizo otras herramientas adicionales como: Docker \u0026 Docker Compose, Travis CI, Swagger, Scrutinizer, Sonar Cloud, PHPStan, PHP Insights, Heroku and CORS.","archived":false,"fork":false,"pushed_at":"2023-02-20T23:44:04.000Z","size":7419,"stargazers_count":18,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-27T00:23:08.526Z","etag":null,"topics":["api","api-rest","crud","crud-application","mysql","php","slim","slim-framework","slim4","sql"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FernandoCalmet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"fernandocalmet","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2020-02-19T15:57:34.000Z","updated_at":"2024-09-19T11:17:58.000Z","dependencies_parsed_at":"2024-11-15T13:31:10.163Z","dependency_job_id":null,"html_url":"https://github.com/FernandoCalmet/php-slim-rest-api","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FernandoCalmet%2Fphp-slim-rest-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FernandoCalmet%2Fphp-slim-rest-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FernandoCalmet%2Fphp-slim-rest-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FernandoCalmet%2Fphp-slim-rest-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FernandoCalmet","download_url":"https://codeload.github.com/FernandoCalmet/php-slim-rest-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248688542,"owners_count":21145763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","api-rest","crud","crud-application","mysql","php","slim","slim-framework","slim4","sql"],"created_at":"2024-11-15T13:20:25.258Z","updated_at":"2025-04-13T08:51:36.178Z","avatar_url":"https://github.com/FernandoCalmet.png","language":"PHP","readme":"# REST API IN SLIM PHP 🐘\n\n[![Github][github-shield]][github-url]\n[![Kofi][kofi-shield]][kofi-url]\n[![LinkedIn][linkedin-shield]][linkedin-url]\n[![Khanakat][khanakat-shield]][khanakat-url]  \n\n[![License](https://img.shields.io/github/license/fernandocalmet/php-slim-rest-api)](https://github.com/FernandoCalmet/php-slim-rest-api/blob/master/LICENSE.md)\n[![Build Status](https://travis-ci.com/FernandoCalmet/php-slim-rest-api.svg?branch=master)](https://travis-ci.com/FernandoCalmet/php-slim-rest-api)\n[![Build Status](https://scrutinizer-ci.com/g/FernandoCalmet/php-slim-rest-api/badges/build.png?b=master)](https://scrutinizer-ci.com/g/FernandoCalmet/php-slim-rest-api/build-status/master)\n[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/FernandoCalmet/php-slim-rest-api/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/FernandoCalmet/php-slim-rest-api/?branch=master)\n[![Code Coverage](https://scrutinizer-ci.com/g/FernandoCalmet/php-slim-rest-api/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/FernandoCalmet/php-slim-rest-api/?branch=master)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=FernandoCalmet_rest-api-slim-php\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=FernandoCalmet_rest-api-slim-php)\n[![Code Intelligence Status](https://scrutinizer-ci.com/g/FernandoCalmet/php-slim-rest-api/badges/code-intelligence.svg?b=master)](https://scrutinizer-ci.com/code-intelligence)  \n\n[![Quality gate](https://sonarcloud.io/api/project_badges/quality_gate?project=FernandoCalmet_rest-api-slim-php)](https://sonarcloud.io/dashboard?id=FernandoCalmet_rest-api-slim-php)\n\nPrincipales tecnologías utilizadas: `PHP 8, Slim 3, MySQL, Monolog, Redis, dotenv, PHPUnit y JSON Web Tokens.`\n\nAdemás, se utilizo otras herramientas adicionales como: `Docker \u0026 Docker Compose, Travis CI, Swagger, Scrutinizer, Sonar Cloud, PHPStan, PHP Insights, Heroku and CORS.`\n\n![alt text](extras/img/slim-logo.png \"Slim PHP micro framework\")\n\nEsta simple **API RESTful**, permite que las operaciones **CRUD** administren recursos como: `Usuarios, Tareas y Notas`.\n\n## :gear: INSTALACIÓN RÁPIDA\n\n### Pre requisitos\n\n- Git.\n- Composer.\n- PHP 8+.\n- MySQL/MariaDB.\n- Redis (Optional).\n- o Docker.\n\n### Con Composer\n\nPuede crear un nuevo proyecto ejecutando los siguientes comandos:\n\n```bash\ncomposer create-project fernandocalmet/php-slim-rest-api [my-api-name]\ncd [my-api-name]\ncomposer restart-db\ncomposer test\ncomposer start\n```\n\n### Con Git\n\nEn su terminal, ejecute estos comandos:\n\n```bash\ngit clone https://github.com/fernandocalmet/php-slim-rest-api.git \u0026\u0026 cd php-slim-rest-api\ncp .env.example .env\ncomposer install\ncomposer restart-db\ncomposer test\ncomposer start\n```\n\n### Con Docker\n\nPuedes usar este proyecto usando **docker** y **docker-compose**.\n\n**Versión Minimal Docker:**\n\n- Engine: 18.03+\n- Compose: 1.21+\n\n**Comandos:**\n\n```bash\n# Start the API (this is my alias for: docker-compose up -d --build).\n$ make up\n\n# To create the database and import test data from scratch.\n$ make db\n\n# Checkout the API.\n$ curl http://localhost:8080\n\n# Stop and remove containers (it's like: docker-compose down).\n$ make down\n```\n\n### Migración de Base de Datos\n\n**Comandos:**\n\n```bash\ncomposer restart-db\n```\n\n### Redis\n\nComandos básicos\n\n```bash\n# Start Service:\nredis-cli\n\n# View All cache:\nkeys *\n\n# Clean cache:\nFLUSHALL\n\n# Query (example of a cached data):\nget \"php-slim-rest-api:test:status\"\n```\n\n## :inbox_tray: DEPENDENCIAS\n\n### LISTA DE REQUISITOS DEPENDENCIAS\n\n- [slim/slim](https://github.com/slimphp/Slim): Slim es un micro framework PHP que le ayuda a escribir rápidamente aplicaciones web y APIs simples pero potentes.\n- [respect/validation](https://github.com/Respect/Validation): El motor de validación más impresionante jamás creado para PHP.\n- [palanik/corsslim](https://github.com/palanik/CorsSlim): Middleware de intercambio de recursos de origen cruzado (CORS) para PHP Slim.\n- [vlucas/phpdotenv](https://github.com/vlucas/phpdotenv): Carga variables de entorno desde `.env` a `getenv()`,`$ _ENV` y `$ _SERVER` automágicamente.\n- [predis/predis](https://github.com/nrk/predis/): Cliente Redis flexible y con todas las funciones para PHP y HHVM.\n- [firebase/php-jwt](https://github.com/firebase/php-jwt): Una biblioteca simple para codificar y decodificar JSON Web Tokens (JWT) en PHP.\n- [monolog/monolog](https://github.com/Seldaek/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.\n\n### LISTA DE DEPENDENCIAS DE DESARROLLO\n\n- [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit): El marco de pruebas unitarias de PHP.\n- [phpstan/phpstan](https://github.com/phpstan/phpstan): PHPStan - Herramienta de análisis estático de PHP.\n- [pestphp/pest](https://github.com/pestphp/pest): Pest es un elegante marco de pruebas PHP con un enfoque en la simplicidad.\n- [nunomaduro/phpinsights](https://github.com/nunomaduro/phpinsights): Comprobaciones instantáneas de calidad de PHP desde su consola.\n- [rector/rector](https://github.com/rectorphp/rector): Actualizaciones instantáneas y refactorización instantánea de cualquier código PHP 5.3+.\n- [vimeo/psalm](https://github.com/vimeo/psalm): Una herramienta de análisis estático para encontrar errores en aplicaciones PHP.\n\n## :traffic_light: TESTING\n\nEjecute todas las pruebas de PHPUnit con `composer test`.\n\n```bash\n$ composer test\n\u003e phpunit\nPHPUnit 9.3.10 by Sebastian Bergmann and contributors.\n\n...............................................................   63 / 63 (100%)\n\nTime: 00:02.279, Memory: 18.00 MB\n\nOK (63 tests, 390 assertions)\n```\n\n## :books: DOCUMENTACIÓN\n\n### ENDPOINTS\n\nHTTP Method | URL | Auth | Descripción\n--- | --- | --- | ---\nGET | `/` | 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).\nGET | `/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).\nPOST | `/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).\nGET | `/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).\nGET | `/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).\nPOST | `/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).\nPUT | `/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).\nDELETE | `/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).\nGET | `/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).\nGET | `/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).\nGET | `/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).\nPOST | `/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).\nPUT | `/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).\nDELETE | `/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).\nGET | `/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).\nGET | `/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).\nGET | `/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).\nPOST | `/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).\nPUT | `/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).\nDELETE | `/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).\nGET | `/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).\n\n### AYUDA Y DOCUMENTACIÓN\n\n### IMPORTA CON POSTMAN\n\nToda la información de la API, preparada para descargar y usar como colección de postman: [Importar Colección](https://www.getpostman.com/collections/b2198065165c871332cc).\n\n[![Run in Postman](https://run.pstmn.io/button.svg)](https://www.getpostman.com/collections/b2198065165c871332cc)\n\n### OPEN API SPEC\n\nAdemás, puede ver la especificación de OpenAPI, utilizando [Swagger UI](https://php-slim-rest-api-sql.herokuapp.com/docs/index.html).\n\n## :page_facing_up: LICENCIA\n\nLicencia MIT. Puedes verla en el [Archivo de Licencia](LICENSE.md) para más información.\n\n\u003c!--- reference style links ---\u003e\n[github-shield]: https://img.shields.io/badge/-@fernandocalmet-%23181717?style=flat-square\u0026logo=github\n[github-url]: https://github.com/fernandocalmet\n[kofi-shield]: https://img.shields.io/badge/-@fernandocalmet-%231DA1F2?style=flat-square\u0026logo=kofi\u0026logoColor=ff5f5f\n[kofi-url]: https://ko-fi.com/fernandocalmet\n[linkedin-shield]: https://img.shields.io/badge/-fernandocalmet-blue?style=flat-square\u0026logo=Linkedin\u0026logoColor=white\u0026link=https://www.linkedin.com/in/fernandocalmet\n[linkedin-url]: https://www.linkedin.com/in/fernandocalmet\n[khanakat-shield]: https://img.shields.io/badge/khanakat.com-brightgreen?style=flat-square\n[khanakat-url]: https://khanakat.com","funding_links":["https://ko-fi.com/fernandocalmet"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffernandocalmet%2Fphp-slim-rest-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffernandocalmet%2Fphp-slim-rest-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffernandocalmet%2Fphp-slim-rest-api/lists"}