====== Migración SICOF ERP - Proceso: Guía de Documentación de Microservicios ======
La siguiente sección define las configuraciones que se deben tener presente en el desarrollo de los microservicios de la fábrica de desarrollo para la documentación de los microservicios.
=== Consideraciones Previas ===
* Los microservicios deben aplicar las configuraciones definidas en la mayoria de los casos a todas las clases que definan la lógica del negocio como Entidades, Controladores, Configuraciones etc.
* Si un microservicio requiere configuraciones especiales, estas deben ser validadas con los lideres de desarrollo (Pablo Quintana, Daberson Henao, Carlos Torres, Gersain Castañeda).
=== Información Importante ===
Se ha definido para el proces ode documentación de los microservcios el estandar OpenAPI Specification (OAS) 3.0.3. e((https://github.com/OAI/OpenAPI-Specification)) la cual define una descripción de interfaz estándar, independiente del lenguaje de programación para las API REST, que permite que tanto humanos como computadoras descubran y comprendan las capacidades de un servicio sin requerir acceso al código fuente, documentación adicional o inspección del tráfico de red. Cuando se define adecuadamente a través de OpenAPI, un consumidor puede comprender e interactuar con el servicio remoto con una cantidad mínima de lógica de implementación. Similar a lo que han hecho las descripciones de interfaz para la programación de nivel inferior, la especificación OpenAPI elimina las conjeturas al llamar a un servicio.
===== Documentación de Soporte =====
En la siguiente web se relacionan la forma de implementación de la especificación OAS((https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md)) con la tecnología Sprintboot
[[https://springdoc.org/|Documentación springdoc]]
===== Configuraciones del Microservicio =====
Todo microservicio que implemente documentación OAS((https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md)) debe incluir en su archivo de configuración Maven **POM**((https://www.tutorialspoint.com/maven/maven_pom.htm)) la dependencia del proyecto del Dominio de clases y entidades Comunes el cual se describe a continuación:
co.ada.models
ModelsClassesADA
0.0.1-SNAPSHOT
El desarrollador debe utilizar la versión más reciente del proyecto la cual puede ser consultada en la sección [[ada:howto:sicoferp:factory:migracionsicoferp:process:backend:apiversion | Versionamiento de APIs]]
===== Como implementar documentación OAS con el Dominio de Clases de Entidades Comunes =====
Para usar el Dominio de Clases de Entidades Comunes en el proceso de documentación siga los siguientes pasos:
=== Paso 1 ===
Registre la dependencia actualizada del Dominio de Clases de Entidades Comunes.
=== Paso 2 ===
Cree un paquete llamado config
=== Paso 3 ===
Cree la clase de configuración como se muestra continuación.
package co.ada.test.microservicio.pruebamodel.config;
import org.springframework.context.annotation.Configuration;
import co.ada.doc.config.SpringOpenApiConfigBase;
@Configuration
public class MySpringOpenApiConfig extends SpringOpenApiConfigBase {}
=== Paso 4 ===
Configure en el bootstrap.yml del proyecto los parametros de documentación del microservicio. Apoyese del siguiente modelo de referencia extraido del proyecto modelo.
openapi-document:
info:
title: "Prueba Model ADA API"
description: "Ejemplo de Microservicio utilizando el Dominio de clases y entidades comunes"
termsOfService: ""
contact:
name: "Carlos Torres"
url: "http://ada.co"
email: "carlos.torres@ada.co"
license:
name: "ADA 1.0"
url: ""
version: "0.0.1"
servers:
public:
url: "http://zuul-mig.adacsc.co/api/prueba"
description: "Development integration public server"
externalDocs:
description: ""
url: ""
=== Paso 5 ===
Documente las clases del microservicio con la especificación OAS((https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md)). Apoyese del proyecto modelo el cual tiene un ejemplo de configuración.
//EJEMPLO CONTROLADOR
package co.ada.test.microservicio.pruebamodel.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import co.ada.core.controller.AdaController;
import co.ada.models.microservicio.usuario.Employee;
import co.ada.models.microservicio.usuario.Usuario;
import co.ada.test.microservicio.pruebamodel.service.EmployeeService;
import co.ada.test.microservicio.pruebamodel.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@Tag(name = "Controlador Servicios", description = "Controlador de prueba de Servicios de ejemplo")
@RestController
public class ServiciosController extends AdaController{
@Autowired
private EmployeeService employeeService;
@Autowired
private UserService usuarioServicie;
@Operation(summary = "Consultar Empleados", description = "Ejemplo de documentación de servicio de lista de empleados")
@GetMapping(value = "employee")
public ResponseEntity> getEmployees() {
return ResponseEntity.status(HttpStatus.ACCEPTED).body(employeeService.getEmployees());
}
@Operation(summary = "Consultar Usuarios", description = "Ejemplo de documentación de servicio de lista de usuarios")
@GetMapping(value = "usuarios")
public ResponseEntity> getUsuarios() {
return ResponseEntity.status(HttpStatus.ACCEPTED).body(usuarioServicie.getUsuarios());
}
}
//EJEMPLO ENTIDAD
package co.ada.models.microservicio.usuario;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import io.swagger.v3.oas.annotations.media.Schema;
@Schema(
name = "Rol",
description = "Clase entidad que contiene la definición de la tabla Rol"
)
@Entity
@Table(name="roles")
public class Role implements Serializable {
/**
*
*/
private static final long serialVersionUID = 6595145379859167872L;
@NotNull
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(unique = true, length = 128)
private String nombre;
public Role() {}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
==== Recomendaciones ====
* Toda documentación debe ser clara y precisa.
* Toda entidad debe estar documentada en la especificación OAS para ser incluida en el Dominio de clases y Entidades Comunes.
* Todo Controller debe ser documentado mínimo en todas las operaciones expuestas.
* Cada operación expuesta debe documentar los códigos de retorno generados en el consumo.
[[ada:howto:sicoferp:factory:migracionsicoferp:process:backend|←Volver atrás]]