Documentar nuestras APIs es fundamental para ofrecer una interfaz profesional y robusta que facilite el acceso a quienes desean consumirla. Swagger es una herramienta poderosa que nos ayuda a lograr esto mediante anotaciones. En este artículo, aprenderás cómo implementar Swagger en tu proyecto y optimizar la documentación de tus servicios, haciendo que la presentación de tu API sea clara y accesible para los desarrolladores.
¿Cómo incluir las dependencias necesarias de Swagger?
El primer paso para usar Swagger en nuestro proyecto es incluir las dependencias adecuadas. Esto se hace editando el archivo build.gradle de la siguiente manera:
Buscar dependencias: Ingresa al Maven Repository y busca Swagger2.
Seleccionar versión: Busca una versión ampliamente utilizada, por ejemplo, 2.9.2.
Copiar el grupo: Pega el siguiente bloque en la sección de dependencias:
Relanzar la aplicación: Una vez configurado, empuja la aplicación nuevamente y verifica en el navegador que Swagger está funcionando correctamente introduciendo /swagger-ui.html tras tu URL base.
Con esto, tus endpoints quedarán documentados y accesibles para otros desarrolladores.
¿Cómo mejorar la documentación visual y práctica de Swagger?
Para que tu API no solo sea funcional sino también visualmente descriptiva y precisa, puedes añadir anotaciones adicionales en tus controladores. Esto dicta cómo Swagger debe mostrar y estructurar la información de cada endpoint.
Añadir anotaciones en tu controlador:
Al ProductController, agrega las siguientes anotaciones para detallar la operación del método getAll:
@ApiOperation(value ="Get all supermarket products", response =Product.class)publicResponseEntity<List<Product>>getAll(){return service.getAll();}
Documentar respuestas y parámetros:
Si es necesario, describe las respuestas posibles y los parámetros de entrada, como con el método que busca un producto por su ID:
@ApiOperation("Search a product with an ID")@ApiResponses(value ={@ApiResponse(code =200, message ="OK"),@ApiResponse(code =404, message ="Product not found")})publicResponseEntity<Product>getProductById(@ApiParam(value ="The ID of the product", required =true, example ="7")@PathVariable("id")int productId){return service.getProductById(productId);}
Verificar cambios:
Después de ajustar anotaciones y detalles, reinicia la aplicación y vuelve a comprobar que los cambios se reflejan en la interfaz de Swagger accesible desde el navegador.
Implementar Swagger te ayudará a comunicar de manera eficiente cómo interactuar con tu API, mejorando la experiencia del usuario y estableciendo un estándar profesional. Continúa explorando y optimizando cada recurso de tu aplicación. ¡El aprendizaje nunca termina!
Si están utilizando la versión 3.0.0 de swagger, se debe tener en cuenta lo siguiente:
En el archivo bundle.gradle se debe añadir las siguientes líneas
implementation "io.springfox:springfox-boot-starter:3.0.0"
compile "io.springfox:springfox-swagger-ui:3.0.0"
En la clase SwaggerConfig ya no hace falta añadir la anotación @EnableSwagger2
La url de acceso a la documentación es: {host}:{puerto} / {contexto} /swagger-ui/index.html
Gracias por el aporte, me sirvió bastante
Muchas gracias por el aporte!!
Para el 2023 ya existe una dependencia llamada Spring doc OpenApi, que te permite implementar Swagger sin la necesidad de crear beans.
Y en tu application.properties colocar la url de swagger
springdoc.swagger-ui.path=/swagger-ui.html
Y listo, ya tienen el swagger funcionando con pocos pasos
Excelente aporte veo que este curso se deberia actualizar varios videos y los comentarios destacados
Excelente aporte!
para los que les sale el error de NullPointerException lo unico que deben hacer es ir al application.properties y agregar esta linea spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER
Gracias, funciona super bien! :D
Me funcionó! muchas gracias :)
Hola, si llegan a tener un error de NullPointerException sin razón alguna, sólo deben bajar la version de SpringBoot de 2.6.1 a 2.5.5 (estuve rato lidiando con ese error)
muchas gracias, me funcionó!
Igual no se a que se deba este error pero tu solución me funciono, gracias.
Me hubiera gustado que se toque un tema importante en la capa de servicios como lo son las transacciones. Espero que salga el curso avanzado de spring.
Seguro lo tendremos en cuenta! ;) Gracias por tu recomendación.
Aun que no se toco el tema de las transacciones puedes utilizar la anotación @Transactional en el servicio y colocarsela a los metodos que la requieren como lo es: save, update, delete para que así se menejen y haga un rollback si algo falla, también puedes utilizar la anotación @Transactional a nivel de toda la clase pero esta debe de llevar una especificación extra que es: readOnly = true
Una forma para ponerle un poco mas de detalle a nuestras APIS.
Muchas gracias por el aporte!!
Si usan la versión 3.0.0 de swagger y les aparece un null o
este error :
->Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException
pueden solucionarlo agregando:
-> spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER en el application.properties
en el build.gradle:
-> implementation “io.springfox:springfox-boot-starter:3.0.0”
Nota: En mi caso elimine del archivo SwaggerConfig la anotación @EnableSwagger2 .
-> estoy usando la versión 2.6.4 de Spring.
Gracias, me sirvió tu ayuda. También quiero agregar que cuando usé la versión 3.0.0 de swagger, para acceder tuve que ingresar (en mi caso) de la siguiente manera: 'h ttp://localhost{puerto}/platzi-market/api/swagger-ui/index.html'
Pueden ver que ahora cambia la parte de: swagger-ui/index.html.
Gracias cracks! Sus aportes me sirvieron para utilizar la versión 3.0.0
Para los que están usando Spring Boot v3, no tienen que usar las librerías mencionadas en el video, solo tienen que usar Spring doc, para eso agreguen en el build.grade la siguiente linea:
Excelente, muchas gracias. Funciono perfecto.
Tengo una duda en el método getProduct con adiciona la anotación @Parameter, yo cambia value por descripción.
Es correcto si lo hice de está forma?
Agradezco la solución.
Muchas gracias para el caso de @Parameter pueden usar estos metodos
(@Parameter(  name ="id",  description ="The id of the product",  required =true,  example ="7")
Desde la versión 3 de spring la librería de swagger fue modificada, y ahora usada springdoc.
Instalación:
En el build.gredel
en el application.properties hacemos la siguiente modificacion:
springdoc.swagger-ui.path=/swagger-ui.html
No es necesario crear el archivo Swagger.config
Con esto ya tendremos la aplicacion deaplegada con la siguiemte url : localhost:{puerto}/{context-path}/swagger-ui/index.html
Muchas gracias Julian, esta aportacion me salvo!!!
Me salvaste la vida. Tenía problemas con esto y me marcaba erros. Con tu aportación ya corrió la aplicación. Muchas gracias
Para el año en que escribo este comentario ya se encuentra la versión 3 de Spring boot, pero la última versión de Swagger, no es compatible con esta, por lo que incorpora Jakarta en vez de Javax, por tal motivo es necesario bajar la versión de Spring boot, ademas hay configuraciones que el maestro hace las cuales ya no son necesarias:
En caso que tengas una version 3, te recomiendo bajarla a la 2.7.6.
Cambia todas las importaciones que tengas en Jakarta a Javax
No es necesario hacer las dos importaciones de swagger y swagger ui, mas ni te funcionará
unicamente debes agregar esta importación
Nota: Recuerda que el puerto debes agregar el que estés usando
Muchísimas gracias compañero, grande!
Esta es la Solución Recomendada para Swagger 3.0.0
Estaba trabajando con spring 3.0 y después de un par de horas la mejor solución fue bajar a spring 2.7.6.
Sigan el consejo de Yesid y evitense problemas.
La forma en la que el profesor implementa Swagger ya no funciona hoy en día, le dejo el link de maven repository para que solo copien y agreguen el archivo build.gradle
Recuerden ya no va ser necesario crear en archivo SwaggerConfig que crea el profesor.
para acceder a la documentacion:
http://localhost:8090/api/swagger-ui.html
Espero les sirva !!
Gracias TavoCode! Me sirvió muchísimo!
Oye y como le adiciono las descripciones e info adicional sobre cada metodo?
Como más abajo mencionaron, actualmente la clase SwaggerConfig no hay que crearla, tengan en cuenta que usé el spring boot 3.3.0, y usé java 17 (Amazon Coretto). Así fue como me pudo correr la aplicacion:
build.gradle
aplication-dev.properties
ProductoCotroller
Resultado:
Genial, esto era lo que le faltaba que alguien enseñara
Este curso mil veces mejor de lo que esperaba
x2
Saldra un curso con spring en donde se desarrolle una aplicacion integrando frontend? seria muy chevere.
Hola Jeisson, gracias por la recomendación se la compartiré al equipo para tenerlo en cuenta :)
Opino lo mismo
Este vídeo se me hace que quedó corto. Me parece genial el vídeo pero quizá un par de vídeos extras agregando el uso de examples y tags en los endpoints, así como su uso en conjunto con bean validation hubiese sido de mayor provecho.
Muchas gracias por tu recomendación Manuel!, la tendré muy en cuenta.
Quise incluir este tema para demostrar como se documenta con Swagger y así robustecer más nuestro proyecto.
Swagger tiene varios temas que incluso darían para un pequeño curso exclusivo para esta herramienta, ¿te gustaría?
Sí, vendría genial un curso de swagger con spring boot.
Quiero compartir con ustedes el proyecto que he estado usando con el fin de aprender Spring boot y que pueden encontrar en GitLab acá.
Puntos a tener en cuenta:
Estoy usando Maven en lugar de Gradle
Hasta este momento, no pienso usar Spring security
Elegí una jerarquía de paquetes mucho más plana que el usado en este curso
Todo el desarrollo está en inglés
Uso una nomenclatura ligeramente distinta (DAO en lugar de Repository, por ejemplo)
Considero que empleo mejores prácticas que las mostradas en este curso en ciertas partes del proyecto
Si bien tengo años en la industria, particularmente con Java, soy automatizador de pruebas y Spring no ha sido una herramienta con la que tenga experiencia. Por lo tanto, aún me queda mucho por aprender y mejorar.
Está genial tu proyecto, felicidades! #NuncaParesDeAprender 🚀
Muchas gracias, don @soyalejoramirez/.
Excelente swagger2 y muy practico, seria bueno un curso para ver mas detalles
x2
Solución que funciono para mi 26-11-2023
7/12/2023 Confirmo!
Siendo el 19/12/2023, también confirmo.
Para poder utilizar Swagger 3.0.0 con la versión de Spring 2.7.7 es necesario agregar en el build.gradle:
Siendo el 18/01/2024 a las 11h30, confirmo que esta clase solo es informativa a dia de hoy, ya que si buscan en maven repository, la implementacion springfox-swagger2 en su version 2.9.2 ya no se puede usar debido a que sus recursos generan vulnerabilidades (el website informa de esto en la info sobre esta version) y si la usas e intentas cargar tu server, simplemente arroja error de version deprecada y se detiene.
Usen los ejemplos de juan Camilo Sandoval hernandez, Alexandra Jimenez o Victor Hugo Vazquez Gomez, los recomiendo si usan gradle a partir de 2024.