Ferramentas de Integração do Pipefy
OBJETIVO
Descrever o processo de análise e indicar a melhor alternativa para implantação da USER STORY “Estudar uma forma de acompanhar as demandas solicitadas pelos clientes registradas no pipefy.”.
JUSTIFICATIVA
Após reunião de alinhamento do time com a gerência, identificou-se a necessidade de disponibilizar as informações presentes no pipefy para os cliente, permitindo a estes acompanhar o status de desenvolvimento das atividades planejadas e consequentemente, fornecendo uma maior transparência entre as partes envolvidas. Foi identificada a necessidade da realização de um estudo prévio da funcionalidades hoje presentes na ferramenta, para que seja identificada uma abordagem que atendam a demanda .
RESULTADOS ESPERADOS
- Lista contendo os dados que são disponibilizados pela ferramenta e que atendam a demanda.
- Maneiras das quais é possível obter esses dados.
- Relatório de viabilidade técnica com indicação de qual a melhor abordagem de utilização (se existir).
ENVOLVIDOS
- Baymax (B.I. Team)
GLOSSÁRIO
- API - Interface de Programação de Aplicações é o conjunto de rotinas e padrões estabelecidos por um software para a utilização de suas funcionalidades.
- PIPEFY - ferramenta de controle de demandas e fluxo de trabalho atualmente utilizada pela SETIC.
PREMISSAS
- O Pipefy é a solução oficial adotada pela SETIC, sendo qualquer alteração nesse sentido além do escopo deste estudo.
- Convém disponibilizar aos clientes as informações necessárias em uma ferramenta externa ao Pipefy.
GRAPHQL
DEFINIÇÃO
GraphQL é uma sintaxe que descreve uma maneira de solicitar dados. Ele é geralmente utilizado para entregar dados, do servidor para o cliente. O GraphQL tem três principais características:
- Ele permite que o cliente especifique exatamente os dados que ele quer.
- Torna mais fácil agregar dados de várias fontes.
- Usa um sistema de tipos para descrever os dados.
Com o GraphQL, o usuário pode fazer uma única chamada para buscar todas as informações que precisa. Diferente do que acontece na arquitetura REST, que é necessário fazer várias requisições para buscar as mesmas informações.
Figura 1 - Exemplo de consulta utilizando GraphQL.
ZAPIER
DEFINIÇÃOZAPIER
O Zapier é uma ferramenta de automação que permite a integração entre diversos serviços, incluindo o Pipefy. A ferramenta integra, de maneira segura, os pipes à outros aplicativos como Google Sheets, Slack, Evernote, Git Hub e muitos outros.
A ferramenta é recomendada pela própria equipe do Pipefy, porém sua utilização de maneira gratuita é restritiva, sendo necessário um investimento financeiro para melhor aproveitamento da mesma.
Figura 2 - Tabela de precificação da ferramenta Zapier.
PROPOSTAS
A seguir são descritas duas abordagens possíveis para a implantação, utilizando o GraphQl e o Zapier.
1. UTILIZAÇÃO DO GRAPHQL
- AÇÕES ASSOCIADAS
- Alinhamento com a Gerência identificando as necessidades
- Definição de quais atributos serão utilizados
- Estudo para definir qual abordagem para implantar a solução
- Implantação da solução
- COMPLEXIDADE - depende do alinhamento.
- EXEMPLO - a partir da ferramenta disponível pelo Pipefy é possível realizar consultas de acordo com os atributos fornecidos pela documentação. As consultas realizadas estão dispostas na figura 2, a seguir.
Figura 3 - Exemplo de Utilização do GraphQl que atenda a demanda. Foi identificado o card, a time responsável, o status atual e quando ocorreu a movimentação.
Para a utilização por ferramentas externas é necessário montar a requisição “POST”. A seguir, um exemplo dessa requisição em Javascript e em Python.
var data = null;
var xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://api.pipefy.com/graphql");
xhr.setRequestHeader('Authorization', 'Bearer ' + "TOKEN_FORNECIDO")
xhr.setRequestHeader("content-type", "Content-Type");
xhr.send(data);
Exemplo de requisição em Javascript.
import requests
url = "https://api.pipefy.com/graphql"
headers = {"content-type": "application/json",'Authorization': 'Bearer ' + "TOKEN_FORNECIDO"}
response = requests.request("POST", url, headers=headers)
print(response.text)
Exemplo de requisição em Python.
2. UTILIZAÇÃO DO ZAPIER
- AÇÕES ASSOCIADAS
- Alinhamento com a Gerência identificando as necessidades
- Definição de qual a aplicação será integrada
- Alinhamento para definir como a aplicação será disponibilizada aos clientes
- COMPLEXIDADE - baixa
- EXEMPLO - devido as restrições de usuário não foi possível disponibilizar um exemplo.
IMPEDIMENTOS E POSSÍVEIS IMPEDIMENTOS
- Após análise da documentação, não foram identificadas informações referentes ao número de consultas permitidas. Uma limitação no número de consultas pode impactar na usabilidade da solução. Atualizado em 01/09/2020 - segundo a DOCUMENTAÇÃO do Pipefy, a assinatura Enterprise permite requisições ilimitadas.
- Não foi possível testar o número de requisições devido a indisponibilidade de um usuário para esse tipo de teste. A utilização dos usuários de produção para este teste pode acarretar em bloqueios para o mesmo. Atualizado 01/09/2020 - Usuário disponibilizado e teste de carga realizado com sucesso.
TESTES DE VALIDAÇÃO DO GRAPHQL
Para a validação da User Story, é necessário garantir a correta utilização da API disponibilizada pelo Pipefy. Nesse caso, optou-se por realizar dois teste, sendo um de autenticação e outro de carga. Para este conjunto de testes, utilizou-se o Pipefy SDK, ferramenta open-source (DISPONÍVEL AQUI) escrita em Python que permite a utilização dos recursos disponíveis pela API de uma maneira mais simples e intuitiva.
TESTE DE AUTENTICAÇÃO
Tendo o usuário teste sendo disponibilizado para o time, o primeiro passo é gerar um token a ser utilizado para a autenticação das requisições à API. O token pode ser gerado dentro do Pipefy (LINK) e uma vez gerado, basta copiar o valor gerado.
De acordo com a documentação, é necessário apenas passar o valor token no construtor, para que seja possível fazer a conexão com o serviço provido pelo Pipefy e utilizar os recursos da API.
Para a utilização, basta importar o SDK para um projeto Python. No exemplo a seguir é feita a importação, inicialização do objeto passando o token correto como parâmetro e é consultada a lista de organizações disponíveis.
import pipefy
p = pipefy.Pipefy(token='Bearer #TOKEN_CORRETO', mock_server=False)
print(p.rawQuery(query='{organizations{name}}'))
Para essa consulta, o valor de retorno a seguir está de acordo com o resultado esperado.
{'organizations': [{'name': 'DITECRO'}]}
Alterando o valor do token para um valor incorreto, o retorno a seguir está de acordo com o resultado esperado.
Traceback (most recent call last):
File ".\result.py", line 5, in <module>
raise PipefyException(response.get('error_description', response.get('error')))
pipefy.PipefyException: The access token is invalid
Após analise de ambos os valores retornados, é possível validar a utilização do Token, SDK e API, sendo necessária a realização do teste a seguir para garantir se a disponibilidade da solução encontrada atende a demanda esperada.
TESTE DE CARGA
Para o teste de carga, realizou-se uma série de mil requisições sequenciais. O valor foi escolhido considerando a utilização simultânea de dez usuários realizando cem requisições cada.
Para esse segundo teste, listamos o nome de todos os utilizadores do Pipefy pertencentes a nossa organização, resultando na seguinte consulta:
query = '{organizations{id, name, members{user{displayName}}}}'
O resultado foi obtido de acordo com o esperado.
{ "organizations":[
{ "id":"120158",
"name":"DITECRO",
"members":[
{"user":{"displayName":"Isadora Basso Badalotti"}},
{"user":{"displayName":"DITEC Rondônia"}},
{"user":{"displayName":"Caveiras"}},
{"user":{"displayName":"Defensores"}},
{"user":{"displayName":"Guardiões"}},
{"user":{"displayName":"Tambaqui"}},
{"user":{"displayName":"Baymax Time de BI"}},
{"user":{"displayName":"Esquadrão Suicida"}},
{"user":{"displayName":"BlackOps"}},
{"user":{"displayName":"Vingadores"}},
{"user":{"displayName":"Dark Souls"}},
{"user":{"displayName":"Amazonas Dev"}},
{"user":{"displayName":"Gerência Administrativa e Financeira"}},
{"user":{"displayName":"Product Owner"}},
{"user":{"displayName":"300"}},
{"user":{"displayName":"Dashboard Setic RO"}}
]
}
]
}
A primeira requisição foi realizada precisamente as 10:52:13 e a última requisição as 11:05:32, decorrendo um período de aproximadamente 13 minutos para a realização das 1000 requisições ou 76 requisições por minuto em uma máquina com configuração padrão de hardware e infraestrutura de internet.
CONCLUSÃO
Após análise pelos integrantes do time, foi identificado que a utilização do GRAPHQL embora mais trabalhosa, permite uma maior flexibilidade de utilização. O time então opta pela utilização desta ferramenta, sendo destacado que não foi possível validar se o número de requisições permitidos será capaz de atender as necessidades. O time indica que novos estudos sejam realizados para que essas questões sejam sanadas antes do desenvolvimento da solução.
ATUALIZADO 01/09/2020 - Após realização de novos estudos, o time constata que a ferramenta escolhida consegue suprir a demanda esperada, atendendo as necessidades da organização. Os dados estão estruturados de maneira não-relacional, sendo necessária futura análise na fase de modelagem.
REFERÊNCIAS
- Pipefy Docs - https://developers.pipefy.com/reference
- Pipefy API - https://api-docs.pipefy.com/reference
- Artigo sobre GraphQl - https://medium.com/trainingcenter/graphql-os-dados-no-formato-requisitado-964f5555d467
- GraphQl Docs - https://graphql.org/learn/queries/