{"id":19865515,"url":"https://github.com/angel-raa/api-blog","last_synced_at":"2025-09-18T17:31:11.142Z","repository":{"id":192160245,"uuid":"686185795","full_name":"Angel-Raa/API-Blog","owner":"Angel-Raa","description":" API Restful CRUD Blog usando Spring Boot 3, Spring Security 6, JWT, PostgreSQL y  Spring Data Jpa","archived":false,"fork":false,"pushed_at":"2024-01-11T21:29:42.000Z","size":233,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-12T15:28:05.563Z","etag":null,"topics":["doc","docker","java","jpa-hibernate","json","jwt-token","postgresql","postgressql","spring-boot","spring-data-jpa","spring-security"],"latest_commit_sha":null,"homepage":"","language":"Java","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/Angel-Raa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-09-02T01:04:16.000Z","updated_at":"2024-07-27T20:43:34.000Z","dependencies_parsed_at":"2024-01-12T08:50:03.002Z","dependency_job_id":"dd1aad5b-8eec-4099-8dd3-106a780c6442","html_url":"https://github.com/Angel-Raa/API-Blog","commit_stats":null,"previous_names":["angel-raa/blog","angel-raa/restful-crud-blog-api-spring-boot-3","angel-raa/api-restful-crud-blog-spring-boot","angel-raa/api-blog"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Angel-Raa%2FAPI-Blog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Angel-Raa%2FAPI-Blog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Angel-Raa%2FAPI-Blog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Angel-Raa%2FAPI-Blog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Angel-Raa","download_url":"https://codeload.github.com/Angel-Raa/API-Blog/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233502473,"owners_count":18685945,"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":["doc","docker","java","jpa-hibernate","json","jwt-token","postgresql","postgressql","spring-boot","spring-data-jpa","spring-security"],"created_at":"2024-11-12T15:23:02.633Z","updated_at":"2025-09-18T17:31:05.841Z","avatar_url":"https://github.com/Angel-Raa.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# API Restful CRUD Blog usando Spring Boot 3, Spring Security 6, JWT, PostgreSQL y  Spring Data Jpa\n\nEste proyecto representa un caso de uso de una aplicación Restful API, desarrollada con  Java 17, Spring Boot 3, Spring Security 6, JWT (JSON Web Tokens),  PostgreSQL y Spring Data Jpa.\n\n## Tecnologías Utilizadas\n\n- JDK 17\n- Spring Boot 3\n- Spring Data Jpa\n- Spring security 6\n- PostgreSQL 15\n- Java JWT\n- Docker\n\n## Configuración del Entorno  y  Prerrequisitos\n\nAsegúrate de tener instalados los siguientes componentes en tu entorno de desarrollo antes de comenzar:\n\n1. [Git](https://git-scm.com/downloads)\n2. [Docker](https://docs.docker.com/compose/install/)\n\n## Instrucciones de Uso\n\nSigue estos pasos para ejecutar la aplicación en tu entorno local:\n\n\n#### Clonar el repositorio en tu máquina local\n```\ngit clone https://github.com/Angel-Raa/API-Restful-CRUD-Blog-Spring-Boot.git\n```\n#### Navegar al directorio del proyecto\n```\ncd API-Blog\n```\n\n#### Construir y ejecutar los contenedores de Docker Compose\n```\ndocker compose up -d\n```\n### Documentación de los Endpoints\n\n### Base URL\n\n- [http://localhost:2020](http://localhost:2020)\n\nSe requiere autenticación para acceder a los endpoints de esta API. Puedes obtener un token JWT mediante los siguientes endpoints:\n\n## Autenticación\n\n| Método   | Endpoint                               | Descripción                                |\n|----------|----------------------------------------|--------------------------------------------|\n| POST     | `/authentication/login`                | Iniciar sesión de usuario                  |\n| POST     | `/authentication/signup`               | Registro de usuario                        |\n| GET      | `/authentication/all`                  | Obtener todos los usuarios autenticados    |\n\n- **Iniciar sesión de usuario:** `POST /authentication/login`\n    - Cuerpo de la solicitud:\n        ```json\n        {\n            \"username\": \"alba\",\n            \"password\": \"alba\"\n        }\n        ```\n    - Respuesta exitosa:\n        ```json\n        {\n             \"message\":\"login successfully\",\n             \"jwt\": \"TOKEN_JWT\",\n             \"status\":\"OK\"\n        }\n        ```\n        \n- **Registro de usuario:** `POST /authentication/sign`\n    - Cuerpo de la solicitud:\n        ```json\n        {\n            \"username\": \"angel\",\n            \"password\": \"admin\",\n            \"email\":\"alba@gmail.com\"\n        }\n        ```\n    - Respuesta exitosa:\n        ```json\n        {\n            \"message\":\"register successfully\",\n            \"jwt\": \"TOKEN_JWT\",\n            \"status\":\"CREATED\"\n        }\n- **Obtener todos los usuario:** `Endpoint: GET /authentication/all`\n    - Respuesta Exitosa:\n      ```json\n      {\n\n        [\n          {\n            \"id\": 1,\n            \"username\": \"angel\",\n            \"email\": \"angel@gmail.com\",\n            \"createAt\": \"2023-09-05T01:49:15.016076\",\n            \"updateAt\": \"2023-09-05T01:49:15.016335\"\n          },\n         {\n            \"id\": 2,\n            \"username\": \"admin\",\n            \"email\": \"admin@gmail.com\",\n            \"createAt\": \"2023-09-05T01:52:34.307614\",\n            \"updateAt\": \"2023-09-05T01:52:34.307684\"\n          },\n          {\n            \"id\": 3,\n            \"username\": \"alba\",\n            \"email\": \"alba@gmail.com\",\n            \"createAt\": \"2023-09-05T02:24:01.017702\",\n            \"updateAt\": \"2023-09-05T02:24:01.017821\"\n          }\n        ]    \n      \n      }\n      ```\n## Endpoints de Post\n\n| Método   | Endpoint                       | Descripción                                      |\n|----------|--------------------------------|--------------------------------------------------|\n| POST     | `/post/create`                 | Crear un nuevo post                              |\n| GET      | `/post/list`                   | Listar todos post                                |\n| GET      | `/post/{id}`                   | Obtener un post por ID                           |\n| GET      | `/post/find/{title}`           | Buscar post por título                           |\n| PUT      | `/post/update/{id}`            | Actualizar un mensaje de post por ID             |\n| DELETE   | `/post/delete/{id}`            | Eliminar post por ID                             |\n| GET     | `/post/all`                    | Obtener todos los  post                           |\n\n\n- **Obtener Todos los Post:** `Endpoint: POST /post/all`\n  - Respuesta Exitosa:\n      ```json\n      {\n\n        [\n          {\n              \"id\": 1,\n              \"username\": \"angel\",\n              \"title\": \"para que sirve en java\",\n              \"content\": \"Java es un lenguaje de programación que se compila en bytecode y se ejecuta en una máquina virtual, lo que permite que el código se ejecute en cualquier plataforma con                  una  JVM instalada, y ofrece un gran conjunto de bibliotecas estándar para facilitar el desarrollo de aplicaciones.\",\n              \"createAt\": \"2023-09-05T01:49:41.90261\",\n              \"updateAt\": \"2023-09-05T01:49:41.902698\"\n            },\n            {\n              \"id\": 2,\n              \"username\": \"angel\",\n              \"title\": \"que son JSON Web Token\",\n              \"content\": \"JSON Web Token (abreviado JWT) es un estándar abierto basado en JSON propuesto por IETF (RFC 7519) para la creación de tokens de acceso que permiten la propagación de                   identidad y privilegios o claims en inglés.\",\n              \"createAt\": \"2023-09-05T01:50:17.367953\",\n              \"updateAt\": \"2023-09-05T01:50:17.36798\"\n            },\n            {\n              \"id\": 3,\n              \"username\": \"angel\",\n              \"title\": \"que en git\",\n              \"content\": \"GIT es el SCV (sistema de control de versiones) de código abierto más utilizado que te permite rastrear los cambios realizados en los archivos. Las empresas y los                       programadores suelen utilizar el GIT para colaborar en el desarrollo de software y aplicaciones.\",\n              \"createAt\": \"2023-09-05T01:51:51.602443\",\n              \"updateAt\": \"2023-09-05T01:51:51.602491\"\n            },\n            {\n              \"id\": 5,\n              \"username\": \"alba\",\n              \"title\": \"La Programación Orientada a Objetos (POO)\",\n              \"content\": \"La Programación Orientada a Objetos (POO) es un paradigma de programación, esto es, un modelo o un estilo de programación que proporciona unas guías acerca de cómo                      trabajar con él y que está basado en el concepto de clasey objetos.\",\n              \"createAt\": \"2023-09-05T02:58:23.848193\",\n              \" updateAt\": \"2023-09-05T02:58:23.848241\"\n            }\n          ]\n      }\n       ```\n\n- **Obtener un Post por ID:** `Endpoint: GET /post/{id} `\n    - Parámetros de la Solicitud:\n        - `{id}` (Path Parameter): El ID del mensaje de publicación que se desea obtener.\n    - Respuesta Exitosa:\n        ```json\n        {\n          {\n            \"id\": 1,\n            \"username\": \"angel\",\n            \"title\": \"para que sirve en java\",\n            \"content\": \"Java es un lenguaje de programación que se compila en bytecode y se ejecuta en una máquina virtual, lo que permite que el código se ejecute en cualquier plataforma con una              JVM  instalada, y ofrece un gran conjunto de bibliotecas estándar para facilitar el desarrollo de aplicaciones.\",\n            \"createAt\": \"2023-09-05T01:49:41.90261\",\n            \"updateAt\": \"2023-09-05T01:49:41.902698\"\n          }\n        }\n         ```\n- **Buscar Post por Título** `Endpoint: GET /post/find/{title}`\n    - Parámetros de la Solicitud:\n      - `{title}` (Path Parameter): El título del POst que se desea buscar.\n    - Respuesta Exitosa:\n        ```json\n        {\n          {\n            \"id\": 3,\n            \"username\": \"angel\",\n            \"title\": \"que en git\",\n            \"content\": \"GIT es el SCV (sistema de control de versiones) de código abierto más utilizado que te permite rastrear los cambios realizados en los archivos. Las empresas y lo             programadores suelen utilizar el GIT para colaborar en el desarrollo de software y aplicaciones.\",\n            \"createAt\": \"2023-09-05T01:51:51.602443\",\n            \"updateAt\": \"2023-09-05T01:51:51.602491\"\n          }\n        } \n        ```\n\n- **Crear un Nuevo  Post:** `Endpoint: POST /post/create `\n    - Cuerpo de la Solicitud:\n        ```json\n        {\n\n           {\n              \"username\": \"alba\",\n              \"title\": \"que son tipos de datos java\",\n              \"content\": \"Los tipos de datos en Java son un formato de almacenamiento de datos que puede contener un tipo específico o rango de valores.\"\n            }\n          \n        }\n        ```\n\n  - Respuesta Exitosa:\n      ```json\n      {\n        {\n          \"message\": \"post created successfully\",\n          \"code\": 201,\n          \"http\": \"CREATED\",\n          \"time\": \"05-09-2023 03:29:08\"\n        }\n      }\n      ```\n- **Actualizar Post por ID:** `Endpoint: PUT /post/update/{id}`\n    - Parámetros de la Solicitud:\n      - `{id}` (Path Parameter): El ID del Post que se desea actualizar.\n        \n    - Cuerpo de la Solicitud:\n        ```json\n        {\n\n           {\n              \"username\": \"alba\",\n              \"title\": \"que son tipos de datos java\",\n              \"content\": \"Los tipos de datos en Java son un formato de almacenamiento de datos que puede contener un tipo específico o rango de valores.\"\n            }\n          \n        }\n        ```\n    - Respuesta Exitosa:\n         ```json\n        {\n\n           {\n              \"username\": \"alba\",\n              \"title\": \"que son tipos de datos java\",\n              \"content\": \"Los tipos de datos en Java son un formato de almacenamiento de datos que puede contener un tipo específico o rango de valores Cuando una aplicación o un programa informático almacena datos en variables, a cada variable se le debe asignar un tipo de datos específico.\"\n            }\n          \n        }\n        ```\n- **Eliminar Post por ID:**  `Endpoint: DELETE /post/delete/{id}`\n    - Parámetros de la Solicitud:\n       - `{id}` (Path Parameter): El ID del Post eliminar.\n     - Cuerpo de la Solicitud:\n         ```json\n         {\n           {\n             \"username\":\"alba\"\n           {\n         }\n         ```\n  - Respuesta Exitosa:\n    ```json\n    {\n       {\n          \"message\": \"post deleted successfully\",\n          \"code\": 200,\n          \"http\": \"OK\",\n          \"time\": \"05-09-2023 03:44:36\"\n        }\n    }\n    ```\n\n\n- **Listar Todos los Post:** `Endpoint: GET /post/list `\n  \nDescripción: Este endpoint devuelve una lista de todos Post, incluyendo los comentarios asociados a cada post.\n\n  - Respuesta Exitosa:\n    ```json\n    {\n\n    [\n      {\n          \"username\": \"angel\",\n          \"title\": \"para que sirve en java\",\n        \"content\": \"Java es un lenguaje de programación que se compila en bytecode y se ejecuta en una máquina virtual, lo que permite que el código se ejecute en cualquier plataforma con una JVM instalada, y ofrece un gran conjunto de bibliotecas estándar para facilitar el desarrollo de aplicaciones.\",\n          \"createAt\": \"2023-09-05T01:49:41.90261\",\n          \"updateAt\": \"2023-09-05T01:49:41.902698\",\n          \"commentList\": [\n            {\n                \"id\": 1,\n                \"body\": \"excelente contenido\",\n                \"created\": \"2023-09-05T01:52:07.086776\"\n              },\n              {\n                \"id\": 4,\n                \"body\": \"muy buen artículo\",\n                \"created\": \"2023-09-05T01:57:26.710532\"\n              }\n            ]\n        },\n        {\n            \"username\": \"angel\",\n            \"title\": \"que son JSON Web Token\",\n            \"content\": \"JSON Web Token (abreviado JWT) es un estándar abierto basado en JSON propuesto por IETF (RFC 7519) para la creación de tokens de acceso que permiten la propagación de identidad y privilegios o claims en inglés.\",\n            \"createAt\": \"2023-09-05T01:50:17.367953\",\n            \"updateAt\": \"2023-09-05T01:50:17.36798\",\n            \"commentList\": []\n        }\n    ]\n\n    }\n    ``` \n\n## Endpoints de Comment \n\n| Método   | Endpoint                               | Descripción                                      |\n|----------|----------------------------------------|--------------------------------------------------|\n| GET      | `/comment/all`                         | Obtener todos los comentarios                    |\n| GET      | `/comment/{commentId}`                 | Obtener un comentario por ID                     |\n| POST     | `/comment/create/{PostId}`             | Crear un comentario en un publicación            |\n| PUT      | `/comment/update/{commentId}`          | Actualizar un comentario por ID                  |\n| DELETE   | `/comment/delete/{commentId}`          | Eliminar un comentario por ID                    |\n\n\n- **Obtener Todos los Comment:** `Endpoint: GET /comment/all`\n  \nDescripción: Este endpoint permite obtener una lista de todos los Comment.\n\n- Respuesta Exitosa:\n  ```json\n  {\n\n    [\n            {\n                \"id\": 1,\n                \"username\": \"angel\",\n                \"body\": \"excelente contenido\",\n            \"    created\": \"2023-09-05T01:52:07.086776\"\n            },\n            {\n                \"id\": 4,\n                \"username\": \"admin\",\n                \"body\": \"muy buen articulos\",\n                \"created\": \"2023-09-05T01:57:26.710532\"\n            }\n        ]\n  }\n  ```\n\n- **Obtener un Comentario por ID:** `Endpoint: GET /comment/{id}`\n\nDescripción: Este endpoint permite obtener un Comment específico según su ID.\n\n - Parámetros de la Solicitud:\n      `{id}` (Path Parameter): El ID del Commtn que se desea obtener.\n\n - Respuesta Exitosa:\n  ```json\n  {\n\n    {\n        \"id\": 4,\n        \"username\": \"admin\",\n        \"body\": \"muy buen articulos\",\n        \"created\": \"2023-09-05T01:57:26.710532\"\n    }\n\n  }\n  ```\n\n\n- **Crear un Nuevo Comment en un Post:** `Endpoint: POST /comment/create/{PostId}`\nDescripción: Este endpoint permite crear un nuevo Comment en un Post específico, identificado por su PostId.\n\n    - Parámetros de la Solicitud:\n      - `{PostId}` (Path Parameter): El ID del Post en el que se desea crear el Comment.\n\n   - Cuerpo de la Solicitud:\n     ```json\n     {\n             {    \n                \"username\": \"alba\",\n                \"body\": \"Cuáles son las ventajas características principales de Git ?\"\n            }\n     }\n     ```      \n  - Respuesta Exitosa:\n    ```json\n    {\n\n        {\n            \"message\": \"comment created successfully\",\n            \"code\": 201,\n            \"http\": \"CREATED\",\n            \"time\": \"05-09-2023 12:51:14\"\n         }\n\n    }\n    ```\n\n- **Actualizar un Comment por ID:** `Endpoint: PUT /comment/update/{commentId}`\nDescripción: Este endpoint permite actualizar un Comment existente  mediante su ID\n\n    - Parámetros de la Solicitud:\n      `{commentId}` (Path Parameter): El ID del Comment que se desea actualizar.\n\n    - Cuerpo de la Solicitud:\n      ```json\n      {\n\n        {\n            \"username\": \"alba\",\n            \"body\": \"Cuáles son las ventajas características principales de Git y Quién creó Git?\"\n        }\n\n      }\n      ```\n  - Respuesta Exitosa:\n    ```json\n      {\n\n        {\n            \"username\": \"alba\",\n            \"body\": \"Cuáles son las ventajas características principales de Git y Quién creó Git?\"\n        }\n\n      }\n      ```\n\n- **Eliminar un Comment por ID:** `Endpoint: DELETE /comment/delete/{commentID}`\n \nDescripción: Este endpoint permite eliminar un Comment existente  mediante su ID.\n    - Parámetros de la Solicitud:\n        `{commentID}` (Path Parameter): El ID del comment que se desea eliminar.\n        \n   - Cuerpo de la Solicitud:\n        ```json\n        {\n\n            {\n                \"username\": \"alba\"\n            }\n        }\n        ```\n        \n- Respuesta Exitosa:\n    ```json\n    {\n        {\n            \"message\": \"comment deleted successfully\",\n            \"code\": 200,\n            \"http\": \"OK\",\n            \"time\": \"05-09-2023 01:11:32\"\n        }\n    }\n    ```  \n        \n## Recursos Adicionales\n\nAquí hay algunos recursos adicionales que podrían ser útiles:\n- [Documentacion de Spring Data](https://spring.io/projects/spring-data)\n- [Documentación de Java JWT](https://github.com/jwtk/jjwt)\n- [Documentacion de open jdk 17](https://docs.oracle.com/en/java/javase/17/docs/api/)\n- [Documentacion de Spring boot](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/)\n- [Documentacion de Maven](https://maven.apache.org/guides/getting-started/)\n- [Documentacion de Docker](https://docs.docker.com/)\n- [Documentacion de Spring Security](https://docs.spring.io/spring-security/reference/index.html)\n- [Documentacion de Git](https://git-scm.com/doc)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangel-raa%2Fapi-blog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangel-raa%2Fapi-blog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangel-raa%2Fapi-blog/lists"}