Product_title | ||||
---|---|---|---|---|
|
Este guia explica como configurar seu ambiente para desenvolvimento usando a biblioteca @totvs/Mingle.
A biblioteca Mingle realiza a integração transparente com o servidor do Mingle que esta na nuvem, assim o desenvolvedor não precisa se preocupar com o servidor do Mingle.
O guia Getting Started inclui informações sobre:
Seguindo o passo a passo apresentado nos próximos tópicos o desenvolvedor terá um software integrado com a biblioteca Mingle e estará pronto para desenvolver uma aplicação de alta performance.
Expandir | ||||
---|---|---|---|---|
| ||||
Para começar a utilizar o a biblioteca @totvs/mingle em sua aplicação é necessário possuir:
|
Expandir | ||
---|---|---|
| ||
A biblioteca Mingle foi criada para facilitar a comunicação entre os aplicativos e o servidor Mingle. Com ela nós teremos a facilidade de realizar login com poucas linhas de código, recursos para geração de métricas, interceptadores de requests entre outros diversos métodos públicos que facilitarão o trabalho do programador. Instalação do pacote MinglePara começar a utilizar o Mingle o primeiro passo é fazer a instalação usando o npm: $ npm install --save @totvs/mingle Acompanhe as próximas páginas deste guia para iniciar o desenvolvimento utilizando o pacote instalado. |
Expandir | |||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
Neste passo vamos realizar a configuração da classe MingleService que deverá ser instanciada no início da sua aplicação para que possamos tirar proveito de todas as funcionalidades da biblioteca Mingle em seu aplicativo. Consideramos este passo o mais importante, aqui é onde iremos configurar uma única instância da classe MingleService e ela funcionará por toda a sua aplicação. Utilizando o comando $ "ng generate service appinitservice" do Angular CLI, criamos um serviço AppInitService e nele realizamos a seguinte implementação:
Agora vamos analisar os trechos mais importantes do código acima: Realize a importação da classe MingleService.
Deverão ser passados três parâmetros para a inicialização do Mingle (init): O primeiro parâmetro que deverá ser passado é o servidor. Existem três servidores, sendo eles:
Como neste exemplo ainda estamos desenvolvendo, vamos utilizar o ambiente "Mingle Development":
Para utilizar o ambiente Staging
Para utilizar o ambiente Production
O segundo parâmetro que deverá ser utilizado é o appId. Cada ambiente possui um appId por aplicativo, o appId deve ser solicitado para um membro da equipe do Mingle. O terceiro parâmetro deverá ser a plataforma utilizada.
Em seguida inicie o aplicativo utilizando o método init() da classe mingleService, informando os três parâmetros acima descritos:
Agora que você realizou a configuração Mingle e o método init() já está pronto, vamos dizer para o seu aplicativo utilizar a classe AppInitService quando for compilado e iniciado. Adicione o bloco de código abaixo em seu app.module.ts (pode ser logo após os imports ou então se for de sua preferência pode ser uma função importada de um arquivo externo).
No app.module.ts -> Providers: 1- Declare AppInitService e MingleService 2- Crie um provide para realizar o APP_INITIALIZER que será responsável por executar as configurações realizadas no tópico anterior 3- Realize a importação das classes declaradas em providers
Agora basta compilar a aplicação e acompanhar o terminal de logs. Para essa aplicação utilizamos o comando: $ "ng serve" Em caso de compilação e configuração positiva, sem erros, no console do seu navegador será apresentada a mensagem: "Mingle Service configuration completed". Acompanhe os próximos tópicos desta documentação para começar a desenvolver a aplicação utilizando o Mingle, como por exemplo realizar uma autenticação ou uma requisição de API utilizando a segurança que o gateway do Mingle proporciona.
|
Expandir | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Agora que você já conhece o pacote Mingle e sua configuração inicial já está funcionando, vamos utilizar o MingleService para realizar a autenticação do usuário ao backend do cliente (Protheus, Datasul, Logix, Smart). Métodos de AutenticaçãoAtualmente, oferecemos dois métodos de autenticação:
Autenticação ClássicaPré-requisitos:
Implementação: Considere o arquivo: Implemente a autenticação utilizando o
Na função login(), utilizamos o método mingleService.auth.login(usuário, senha, alias).
Observe que os valores "login" e "password" geralmente são preenchidos pelo usuário do aplicativo através de uma página de autenticação. Após executar o Login no aplicativo, o retorno de sucesso será parecido com este:
A chave access_token é armazenada no storage do navegador pelo mingleService para ser utilizada em outras etapas do aplicativo que requerem comprovação de autenticação, como por exemplo uma chamada de gateway. O access_token tem um prazo de validade de acordo com cada ambiente e requer uma nova autenticação quando expirar. Quando se utiliza um access_token expirado, o Mingle retornará para o aplicativo o status 401 do protocolo HTTP. O desenvolvedor pode seguir dois caminhos para obter um novo access_token: 1- Solicitar ao usuário do aplicativo um novo login. 2- Utilizar a chave refresh_token obtida no login inicial e realizar uma autenticação transparente para o usuário, sem que ele tenha que realizar login novamente. Autenticação via OIDC (OpenID Connect)Pré-requisitos:
Implementação: Este método utiliza OIDC para realizar a autenticação do usuário, eliminando a necessidade de fornecer login e senha manualmente. Em caso de retorno com código HTTP 300, um novo fluxo de autenticação é iniciado utilizando os cabeçalhos fornecidos pelo servidor.
A chave access_token é armazenada no storage do navegador pelo mingleService para ser utilizada em outras etapas do aplicativo que requerem comprovação de autenticação, como por exemplo uma chamada de gateway. O access_token tem um prazo de validade de acordo com cada ambiente e requer uma nova autenticação quando expirar. Quando se utiliza um access_token expirado, o Mingle retornará para o aplicativo o status 401 do protocolo HTTP. O desenvolvedor pode seguir dois caminhos para obter um novo access_token: 1- Solicitar ao usuário do aplicativo um novo login. 2- Utilizar a chave refresh_token obtida no login inicial e realizar uma autenticação transparente para o usuário, sem que ele tenha que realizar login novamente. Refresh TokenPara obter os dados de autenticação atualizados, você pode utilizar o serviço Refresh Token do Mingle. Considere o código de exemplo abaixo:
O MingleService prepara o body que deve ser enviado para o serviço Refresh Token através do método mingleService.getBodyToRefreshTokenAPI(); Logo após obter o body que deve ser enviado para o Mingle, obtenha a URL do serviço através do método mingleService.getRefreshTokenURL(); E para obter os novos dados de autenticação, realize um POST com os parâmetros encontrados anteriormente. LOGOUT Para realizar o logout utilize o nosso método mingleService.auth.logout();
CHANGEPWDPROTHEUSPara realizar a troca de senha da API Protheus conforme documentação (https://tdn.totvs.com/display/public/framework/Troca+de+senha+no+REST+2.0), utilize nosso método mingleService.auth.changePwdProtheus();
PASSWORDRECOVERY Para realizar a recuperação de senha via API cadastrada no APP, utilize nosso método mingleService.auth.passwordRecovery(); No BODY da solicitação, devem constar as informações obrigatórias do APP_ID, ALIAS e USERLOGIN. Quanto ao restante do BODY da requisição, este será passado conforme as necessidades específicas da API cadastrada no aplicativo, uma vez que o BODY da requisição é repassado diretamente para a API. Este método estará disponível apenas para hosts que utilizam o usuário integrador.
|
Expandir | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||
O Mingle tem o serviço API Gateway para produtos que precisam de exposição de API para internet, garantindo canal único de liberação da rede do cliente para a nuvem e a segurança de não precisar expor o endereço completo do servidor do cliente. Nesta etapa você será capaz de realizar requisições ao servidor usando a segurança e simplicidade do mingleService. Vamos imaginar que você desenvolvedor precise criar uma funcionalidade que busque uma lista de produtos do seu backend através do endereço http://servidor-exemplo.com.br/listaProdutos Com o Mingle Gateway, você não precisa comprometer a segurança do seu host ao informar o endereço rest completo, basta informar o endpoint desejado. Veja o bloco de código abaixo:
Dessa forma o resultado do endereço para o request é "https://dev-mingle.totvs.com.br/listaProdutos" e através do seu ALIAS o Mingle identifica qual é o endereço final do servidor para realizar a chamada GET no endpoint listaProdutos. Ao utilizar a classe mingleService.gateway você substitui o request http padrão do typescript e garante a segurança da informação. O Mingle aceita apenas requisições com conteúdo JSON, objeto ou formData no body. Headers customizadosÉ possível enviar headers customizados de acordo com a sua implementação para o seu host. Neste exemplo, vamos adicionar o header "x-totvs-header-customizado" ao request:
Query Params customizadosÉ possível enviar queryParams customizados de acordo com a sua implementação para o seu host. Neste exemplo, vamos adicionar o queryParams "filial e id" ao request, conforme exemplo abaixo:
Classe mingleService.Gateway A classe mingleService.gateway está pronta para realizar as seguintes ações: Os métodos get, post,put, delete e patch são responsáveis pela comunicação http entre o aplicativo e o servidor do Mingle conforme apresentado nos tópicos anteriores desse documento. O método getHeaders retorna os headers padrões do MingleService. O método getUrl retorna a URL padrão do MingleService. Envio de arquivosPara saber mais sobre envio de arquivos com o gateway do Mingle, acesse: Transferência de arquivos |
Expandir | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||
Com o registro de métricas personalizadas, você pode registrar os comportamentos da sua aplicação.
Uma função core do Mingle é permitir que o app registre métricas de uso de suas funcionalidades, como por exemplo, quando o app é inicializado automaticamente é registrada uma métrica com uma série de informações sobre este evento. Todas essas métricas podem ser consultadas no portal do Mingle na sessão Monitor > Métricas de Uso. As métricas podem ser de dois tipos:
Toda métrica contém as seguintes informações:
Além desses campos, cada métrica pode, arbitrariamente, armazenar informações customizadas de acordo com a necessidade do aplicativo, implementação útil para futuros relatórios e controles de logs. Utilizando a classe MingleService da biblioteca, implemente o seguinte trecho de código na sua aplicação para gerar métricas personalizadas.
A string 'Métrica personalizada' é uma ilustração para este exemplo, podendo ser alterada para o nome que for mais adequado para o seu aplicativo. |
Product_title | ||||
---|---|---|---|---|
|
Button | ||||||
---|---|---|---|---|---|---|
|
Button | ||||||
---|---|---|---|---|---|---|
|
Button | ||||||
---|---|---|---|---|---|---|
|
Button | ||||||
---|---|---|---|---|---|---|
|
Button | ||||||
---|---|---|---|---|---|---|
|