O objetivo desse Spike foi o de realizar um levantamento a respeito do desenvolvimento de uma ferramenta que facilitasse, graficamente, a edição da documentação X-TOTVS.
Foi sugerido um estudo de ferramentas Open Source antes de considerarmos o desenvolvimento de uma ferramenta própria.
Iniciamos esse documento explicando sobre o levantamento de problemas realizado com usuários chave, em seguida, sobre a pesquisa comparativa de ferramentas.
Todos os outros tópicos que se seguem, são à respeito do projeto apicurio, que foi a ferramenta selecionada para aprofundamento.
Inicialmente, foi verificada uma falta de iniciativas de alteração das documentações X-TOTVS, a fim de mantê-las atualizadas.
Provável causa é a dificuldade de fazê-la na estrutura do documento, e ter que passar por todo o processo de pull request e aprovação.
Além disso, foi realizado um levantamento através de tópico no Ryver:
https://totvs.ryver.com/index.html#posts/2072879
Os problemas identificados nesse tópico foram:
- Entendimento nos erros apresentados pelo validador
- Dificuldade ao utilizar Git / GitHub
- Dificuldade ao realizar o design de APIs mais complexas (de process;, com entidade filhas/ligadas...)
- Falta de exemplos/templates de documentações de APIs (Antes)
- Falta de exemplos/templates de códigos fonte para APIs (Ainda acontece)
Foram verificadas as seguintes ferramentas Open Source:
- Apicurio
- Mermade
- OpenAPI Designer
O primeiro foi selecionado (Apicurio), devido aos seguintes motivos:
- Melhor UX
- Maturidade do projeto
- Atividade recente no projeto
- Mantido pela RedHat
- Tecnologias utilizadas (Angular e Java)
- Suporte à versão 3.x
- Integrações diversas (Repositórios e outras aplicações)
A licença do projeto é a Apache License 2.0, que é bastante permitiva. Permite uso comercial, modificação e distribuição.
![](/download/attachments/485870898/image2019-4-25_11-5-14.png?version=1&modificationDate=1556201114143&api=v2)
O apicurio é divido nos seguintes componentes:
- UI
- API
- Websockets (real-time collaboration with other users)
- Keycloak (Authentication)
- Microcks (Fake APIs implementations)
![](/download/attachments/485870898/image2019-4-25_11-39-55.png?version=1&modificationDate=1556203195273&api=v2)
- Facilitar a edição dos "x-totvs"
- Integração diretamente com a master (Diminuir burocracia e tempo de publicação)
- Colaboração, divulgação e avaliação do comitê
- Democratização do Design de APIs
- O cliente ainda precisa conhecer apenas boas práticas REST
- O cliente não precisa conhecer JSON / JsonSchema / OpenAPI
- O cliente não precisa conhecer GIT, PullRequests...
- Experiência de UX indolor, refinada e agradável. (Não foi um problema apontado no levantamento)
- Arquitetura bem organizada em camadas (FrontEnd/BackEnd/APIs/Injeção de dependências)
- Tecnologias conhecidas pela equipe (Angular e Java)
- Código bem escrito, organizado e comentado
- Open Source. Projeto em constante evolução, facilidade em trazer atualizações feitas pela comunidade, abertura de issues e pullrequests.
- Projeto extremamente grande, o que o torna complexo
- Dificuldades na manipulação da estrutura do OpenAPI.
- O frontend utiliza bibliotecas externas para manipulação dos objetos OpenAPI. Nós teremos que incluir a base de código dessa biblioteca no nosso projeto para inclusão dos campos personalizados, e seus tratamentos.
- Problemas ao derreferenciar
- O projeto atualmente precisa que exista uma quebra entre o OpenAPI e schema dentro do próprio arquivo, para ele identificar os datatypes.
- Não funciona com links para arquivos externos
- Não funciona com a propriedade "components/schemas" vazia
- Complexidade ao fazer a quebra dos arquivos (OpenAPI / JSONSchema)
- No momento de salvar, vamos ter que "na mão" realizar a quebra da maneira que definimos (Dois arquivos).
- As bibliotecas padrão não fazem isso.
- Integrações com ferramentas das quais não temos conhecimento, como Keycloak e Microcks
- Preocupação com suporte
- Falta de controle no tempo de resposta de issues abertas no GitHub
- Possibilidade de assinatura de um suporte oficial / cobrança?
Como resultado desse Spike, foram gerados os seguintes artefatos:
Após discussão, esse foi o futuro definido para esse projeto:
- Mapearemos o que é imprescindível e o que é desejável (must-have e nice-to-have) do projeto. Priorizar.
- Será criado um épico em relação a isso, e criaremos as issues de acordo com as prioridades.
Outras possibilidades discutidas ao longo da reunião:
Fazer uma versão enxuta, "enxugando" algumas funcionalidades existentes, fazendo apenas o que considerarmos como ponto focalContinuar estudo
Buscar resolver os problemas no processoSe aprofundar em outras ferramentasDesenvolvimento de ferramenta própria
Desistir desse projeto
- Integrações para ações no repositórios
- Integração do backend com nosso repositório do GitHub
- Abrir pull requests em nome do usuário
- Integração do backend com o comparador de OpenAPIs
- Identificar cenários em que apenas o XTOTVS foi alterado.
- Permitir que, quando o cenário acima for verdadeiro, o commit do documento seja realizado diretamente na master
- Manipulação das customizações TOTVS no OAS 3.X
- Incluir os fontes de manipulação do OpenAPI no nosso projeto.
- Adaptar os mesmos para estrutura X-TOTVS (Modelos e lógica de parseamento)
- Trabalhar nos componentes para exibir/atualizar os elementos do X-TOTVS
- Trabalhar a lógica de derreferenciar as arquivos externos
- Trabalhar a lógica de separar o artefato gerado em dois documentos
- Pipeline CI/CD
- Quanto antes isso for realizado, maior o ganho de produtividade da equipe (Tempo gasto com outras maneiras de deploy durante evolução do projeto)
- Entender se precisamos fazer alguma alteração no dockerfile existente
- Solicitar apoios necessários: Repositório do docker.totvs, namespace Kubernets, DNS...
- Configurar pipeline de build da imagem e deploy através do github
- Validações
- Externalizar serviço para as mesmas validações existentes no CI do Github.
- Consumir o serviço descrito acima na interface de usuário, para preencher a lista de validações na coluna da direita, conforme o usuário for preenchendo os campos
- Colaboração
- Estudar como funciona a edição real time de uma mesma API por mais de um usuário, convites de colaboração...
- Ativar colaboração
- Integração com provider de autenticação
- Estudar utilizar o nosso Identity Manager
- Implementar integração
- Integração com Microcks
- Estudar como utilizar essa integração, e se existe alguma mudança necessária em relação à implementação padrão
- Ativar integração
- Gerador de projetos através de Wizard
- Customizar gerador para fornecer Templates de código em TL++, Java...
Are you a problem solver... or a solution creator?