{"id":20703944,"url":"https://github.com/darkmtrance/api-first","last_synced_at":"2025-06-11T04:03:42.582Z","repository":{"id":223526383,"uuid":"760164819","full_name":"darkmtrance/api-first","owner":"darkmtrance","description":null,"archived":false,"fork":false,"pushed_at":"2024-02-20T16:15:30.000Z","size":74,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-11T04:32:53.820Z","etag":null,"topics":["api-first","java","openapi","spring-boot","swagger"],"latest_commit_sha":null,"homepage":"","language":null,"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/darkmtrance.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-19T22:44:53.000Z","updated_at":"2024-07-28T03:00:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"815f633b-19a4-41a2-a7d7-f6e84bf42867","html_url":"https://github.com/darkmtrance/api-first","commit_stats":null,"previous_names":["darkmtrance/api-first"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darkmtrance%2Fapi-first","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darkmtrance%2Fapi-first/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darkmtrance%2Fapi-first/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darkmtrance%2Fapi-first/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/darkmtrance","download_url":"https://codeload.github.com/darkmtrance/api-first/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darkmtrance%2Fapi-first/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259195893,"owners_count":22820047,"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-first","java","openapi","spring-boot","swagger"],"created_at":"2024-11-17T01:10:18.220Z","updated_at":"2025-06-11T04:03:42.422Z","avatar_url":"https://github.com/darkmtrance.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# API First\n\nUn enfoque de desarrollo de software que ha ganado terreno rápidamente en la industria.\n\n## Objetivo\n\nGenerar clases e interfaces a partir de una especificación OpenApi\n\n## Librerias utilizadas\n\n- [Spring Boot : 3.2.2](https://start.spring.io/)\n- [Open Api Generator : 7.3.0](https://github.com/OpenAPITools/openapi-generator)\n- [Swagger-annotations : 2.2.20](https://mvnrepository.com/artifact/io.swagger.core.v3/swagger-annotations)\n- [Jackson-databind-nullable : 0.2.6](https://github.com/OpenAPITools/jackson-databind-nullable)\n- [Javax.servlet-api : 4.0.1](https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api/4.0.1)\n- [Javax.annotation-api : 1.3.2](https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api/1.3.2)\n- [Validation-api : 2.0.1.Final](https://mvnrepository.com/artifact/javax.validation/validation-api/2.0.1.Final)\n- [Java : 17]()\n\n## Implementación\n\n1. Se descarga un proyecto maven de `springboot` desde https://start.spring.io/, el cual tendra como dependencia las librerias anteriores mencionadas.\n\n2. Se debe abrir el proyecto desde la IDE de su preferencia, al ubicarse en la ruta `/src/main/resources/` se debe copiar el archivo OAS `cuenta_bancaria_descripcion.yaml`, el cual contiene la especificación de la API.\n\n\n3. Luego se modifica el archivo `pom.xml` con el siguiente código:\n\n```java\n\n\u003cproperties\u003e\n\t\u003cjava.version\u003e17\u003c/java.version\u003e\n\t\u003copenapi-generator.version\u003e7.3.0\u003c/openapi-generator.version\u003e\n\t\u003cswagger.annotations.version\u003e2.2.20\u003c/swagger.annotations.version\u003e\n\t\u003cjackson-nullable.version\u003e0.2.6\u003c/jackson-nullable.version\u003e\n\u003c/properties\u003e\n\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eio.swagger.core.v3\u003c/groupId\u003e\n        \u003cartifactId\u003eswagger-annotations\u003c/artifactId\u003e\n        \u003cversion\u003e${swagger.annotations.version}\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eorg.openapitools\u003c/groupId\u003e\n        \u003cartifactId\u003ejackson-databind-nullable\u003c/artifactId\u003e\n        \u003cversion\u003e${jackson-nullable.version}\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ejavax.servlet\u003c/groupId\u003e\n        \u003cartifactId\u003ejavax.servlet-api\u003c/artifactId\u003e\n        \u003cversion\u003e4.0.1\u003c/version\u003e\n        \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ejavax.annotation\u003c/groupId\u003e\n        \u003cartifactId\u003ejavax.annotation-api\u003c/artifactId\u003e\n        \u003cversion\u003e1.3.2\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ejavax.validation\u003c/groupId\u003e\n        \u003cartifactId\u003evalidation-api\u003c/artifactId\u003e\n        \u003cversion\u003e2.0.1.Final\u003c/version\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n\n\u003cbuild\u003e\n\t\u003cplugins\u003e\n\n\n        \u003cplugin\u003e\n\t\t\t\t\u003cgroupId\u003eorg.openapitools\u003c/groupId\u003e\n\t\t\t\t\u003cartifactId\u003eopenapi-generator-maven-plugin\u003c/artifactId\u003e\n\t\t\t\t\u003cversion\u003e${openapi-generator.version}\u003c/version\u003e\n\t\t\t\t\u003cexecutions\u003e\n\t\t\t\t\t\u003cexecution\u003e\n\t\t\t\t\t\t\u003cgoals\u003e\n\t\t\t\t\t\t\t\u003cgoal\u003egenerate\u003c/goal\u003e\n\t\t\t\t\t\t\u003c/goals\u003e\n\t\t\t\t\t\t\u003cconfiguration\u003e\n\t\t\t\t\t\t\t\u003cskipValidateSpec\u003etrue\u003c/skipValidateSpec\u003e\n\t\t\t\t\t\t\t\u003cinputSpec\u003e./src/main/resources/cuenta_bancaria_descripcion.yaml\u003c/inputSpec\u003e\n\t\t\t\t\t\t\t\u003cgenerateSupportingFiles\u003etrue\u003c/generateSupportingFiles\u003e\n                            \u003cgeneratorName\u003espring\u003c/generatorName\u003e\n                            \u003cstrictSpec\u003etrue\u003c/strictSpec\u003e\n                            \u003cgenerateApiTests\u003efalse\u003c/generateApiTests\u003e\n                            \u003cgenerateApiDocumentation\u003efalse\u003c/generateApiDocumentation\u003e\n                            \u003cgenerateModelTests\u003efalse\u003c/generateModelTests\u003e\n                            \u003cgenerateModelDocumentation\u003efalse\u003c/generateModelDocumentation\u003e\n\t\t\t\t\t\t\t\u003cconfigOptions\u003e\n\t\t\t\t\t\t\t\t\t\u003ccontrollerThrowsExceptions\u003ejava.io.IOException,com.example.NotFoundException\u003c/controllerThrowsExceptions\u003e\n\t\t\t\t\t\t\t\t\t\u003cinterfaceOnly\u003etrue\u003c/interfaceOnly\u003e\n\t\t\t\t\t\t\t\t\t\u003cskipDefaultInterface\u003etrue\u003c/skipDefaultInterface\u003e\n\t\t\t\t\t\t\t\t\t\u003cuseBeanValidation\u003etrue\u003c/useBeanValidation\u003e\n\t\t\t\t\t\t\t\t\t\u003cuseClassLevelBeanValidation\u003efalse\u003c/useClassLevelBeanValidation\u003e\n\t\t\t\t\t\t\t\t\t\u003cuseTags\u003etrue\u003c/useTags\u003e\n\t\t\t\t\t\t\t\t\t\u003cjava17\u003etrue\u003c/java17\u003e\n\t\t\t\t\t\t\t\t\t\u003cuseOptional\u003efalse\u003c/useOptional\u003e\n\t\t\t\t\t\t\t\t\t\u003chideGenerationTimestamp\u003etrue\u003c/hideGenerationTimestamp\u003e\n\t\t\t\t\t\t\t\t\t\u003cdateLibrary\u003ejava17\u003c/dateLibrary\u003e\n\t\t\t\t\t\t\t\t\t\u003cbigDecimalAsString\u003etrue\u003c/bigDecimalAsString\u003e\n\t\t\t\t\t\t\t\t\t\u003cuseBeanValidation\u003etrue\u003c/useBeanValidation\u003e\n\t\t\t\t\t\t\t\u003c/configOptions\u003e\n\t\t\t\t\t\t\u003c/configuration\u003e\n\t\t\t\t\t\u003c/execution\u003e\n\t\t\t\t\u003c/executions\u003e\n\t\t\u003c/plugin\u003e\n\t\u003c/plugins\u003e\n\u003c/build\u003e\n\n```\n        \nSobre la configuración de OpenAPI generator se explica las variables:\n\n- inputSpec: Esta configuración especifica la ubicación del archivo de la especificación OpenAPI.\n\n- generateSupportingFiles: Determina si se deben generar archivos de soporte, como utilidades y clases auxiliares. En este caso, se establece como true.\n\n- generatorName: Indica el nombre del generador que se utilizará. En esta instancia, se emplea el generador \"spring\", diseñado para producir código compatible con proyectos Spring.\n\nstrictSpec: Controla si se aplicará una validación estricta a la especificación OpenAPI. Aquí se configura como true.\n\ngenerateApiTests y generateModelTests: Estas configuraciones determinan si se deben generar pruebas automatizadas para las API y los modelos, respectivamente. En este caso, se establecen como false, lo que indica que no se generarán pruebas automatizadas.\n\nconfigOptions: Este apartado define varias opciones de configuración para el generador. Algunas de estas opciones abarcan el manejo de excepciones en los controladores, el uso de validación de bean, así como la especificación del paquete de la API y el paquete del modelo.\n\n4. Para generar el código se debera ejecutar lo siguiente:\n\n```java\nmvn clean install\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarkmtrance%2Fapi-first","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdarkmtrance%2Fapi-first","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarkmtrance%2Fapi-first/lists"}