---
title: "Tratamento de erros HTTP em mapeamentos de dados de serviços web"
date: "2019-06-19"
categories: 
  - "data-integration"
  - "tools"
tags: 
  - "data-mapping"
  - "flowforce-server"
  - "http-testing"
  - "mapforce"
  - "mapforce-server"
  - "web-services"
description: Descubra como gerir erros HTTP em mapeamentos de dados de serviços web utilizando o MapForce, garantindo uma integração de dados robusta e um sistema de relatórios de erros eficaz em projetos automatizados.
---
Status: #blog

Tags:  #data-mapping #flowforce-server #http-testing #mapforce #mapforce-server #web-services

Categories: [data-integration](/blog/pt/category/data-integration.md) | [development](/blog/pt/category/development.md)
# Tratamento de erros HTTP em mapeamentos de dados de serviços web

Projetos de integração de dados que incluem informações de serviços web externos podem ser vulneráveis a erros HTTP ao recuperar dados remotos. Quando os processos de mapeamento de dados são executados sob controlo automatizado, é especialmente importante detetar e reportar erros, mesmo que estes ocorram apenas muito raramente.

Um mapeamento de dados no MapForce pode incluir chamadas a serviços web e apresentar o resultado diretamente num ficheiro ou base de dados, ou combiná-lo com outras informações para processamento adicional. Independentemente do resultado final, um erro de serviço web HTTP detetado numa requisição a um serviço web REST coloca o mapeamento em risco.

O MapForce inclui funcionalidades para lidar com erros HTTP, em vez de simplesmente interromper a execução de um mapeamento. Os programadores podem configurar o corpo de uma chamada a um serviço web REST para tratar e reportar exceções com base no código de estado HTTP retornado.

Vamos analisar um exemplo.

![](/blog/images/cbcr_blog_2.jpg)

<!--more-->

Os dados de mapeamento de exemplo instalados com o MapForce incluem um mapeamento real de um serviço web REST chamado AirportStatus.mfd. Este mapeamento utiliza um serviço web patrocinado pela Administração Federal da Aviação, que fornece informações sobre atrasos nas operações dos principais aeroportos dos EUA. A entrada do mapeamento é um código de aeroporto de três letras, que é fornecido ao serviço web, e o resultado é devolvido como um ficheiro JSON. O mapeamento e o resultado de exemplo são apresentados abaixo.

[![Mapeamento de dados de serviços web sem mecanismos para tratamento de erros HTTP](/blog/images/airport-status-mapping.png)](airport-status-mapping.png)

[![Ficheiro JSON de saída resultante do exemplo de mapeamento](/blog/images/mapping-result.png)](mapping-result.png)

Em caso de qualquer erro HTTP, a execução da operação falharia.

O manual de ajuda do MapForce inclui uma explicação sobre o tratamento condicional da resposta de um serviço web REST. Poderíamos simplesmente copiar a parte do código responsável pelo tratamento de erros HTTP e colá-la no mapeamento existente, mas não teríamos forma de validar o resultado em caso de um erro HTTP. Não podemos forçar o serviço web da FAA a gerar um erro HTTP para fins de teste!

Em vez disso, podemos utilizar o serviço web em httpstat.us para gerar vários códigos de estado HTTP e descrições para testes, numa etapa separada de mapeamento de dados. Por exemplo, o URL [https://httpstat.us/200](https://httpstat.us/200) num navegador retorna "200 OK". O URL [https://httpstat.us/400](https://httpstat.us/400) retorna "400 Bad Request", e assim por diante, para todos os códigos de estado definidos, até ao 524.

Podemos implementar uma requisição REST para este serviço no MapForce simplesmente abrindo um novo ficheiro de mapeamento e clicando no botão "Inserir Serviço Web" na barra de ferramentas:

![Inserir uma função de serviço web numa correspondência de dados](/blog/images/insert-web-service-function.png)

Isto abre a janela de configurações da chamada de serviço web, onde podemos configurar manualmente as opções. Utilizaremos um parâmetro em vez de um código de estado específico, para que possamos testar facilmente valores alternativos.

[![Configuração das definições da chamada do serviço web](/blog/images/web-service-call-settings.png)](web-service-call-settings.png)

Aqui está a correspondência com uma constante para fornecer o parâmetro do código:

[![Serviço web com parâmetro de entrada na mapeamento de dados](/blog/images/mapping-1.png)](mapping-1.png)

Por padrão, uma função de serviço web suporta apenas valores de resposta HTTP normais no intervalo de 200 a 299. Podemos adicionar suporte para outros códigos clicando com o botão direito no elemento "Corpo" na resposta, para abrir a caixa de diálogo "Estrutura da Resposta" e expandir o intervalo de códigos de estado aceites:

[![Gerir erros HTTP através da expansão da gama de códigos de estado suportados](/blog/images/response-structure.png)](response-structure.png)

Podemos mapear o resultado da requisição REST para um ficheiro de texto simples, utilizando a função "decode-mime-entity". O serviço web não fornece o valor do conjunto de caracteres no cabeçalho da resposta, por isso, vamos associar o valor constante "utf-8" à função de decodificação.

[![Gerir erros HTTP mapeando a resposta para uma mensagem guardada como texto](/blog/images/mapping-2.png)](mapping-2.png)

Agora, podemos usar o botão "Saída" (Output) que se encontra na parte inferior da janela de mapeamento do MapForce para executar o mapeamento e analisar o resultado:

![Primeiro resultado do teste da mensagem de mapeamento](/blog/images/result-1.png)

 Podemos alterar a constante de entrada no painel de mapeamento e executar novamente para verificar a diferença:

![Segundo resultado do teste da mensagem de mapeamento](/blog/images/result-2.png)

Podemos usar uma função de concatenação para combinar o resultado com outras informações, de forma a criar uma mensagem de estado mais fácil de entender para o utilizador

[![Definição de um resultado de mensagem mais completo](/blog/images/elaborate-message.png)](elaborate-message.png)

![Uma mensagem de localização mais fácil de usar](/blog/images/result-3.png)

Depois de testarmos a configuração com uma variedade de códigos de estado HTTP possíveis e estarmos satisfeitos com os resultados, podemos adicionar o tratamento de erros HTTP à configuração existente do AirportStatus.mfd através de uma operação de copiar e colar. Primeiro, criaremos um novo corpo de resposta na configuração do AirportStatus para lidar com códigos de resposta que estejam fora da faixa normal. Podemos clicar com o botão direito no elemento "Corpo" no lado da resposta do serviço web para adicionar um novo nó "Corpo".

![Tratamento de erros HTTP com um corpo de resposta separado](/blog/images/add-body-node.png)

Isto adiciona o novo corpo e abre a caixa de diálogo "Estrutura da Resposta", onde especificaremos o tratamento a aplicar a qualquer código de estado HTTP superior a 299:

![Gerir erros HTTP especificando o intervalo de códigos de estado](/blog/images/response-structure-2.png)

Agora podemos copiar os componentes de mapeamento da nossa definição de tratamento de erros do mapeamento de teste, colar no mapeamento do AirportStatus e conectar o novo corpo da resposta:

[![Tratamento de erros HTTP num mapeamento de dados de um serviço web REST](/blog/images/copy-error-handling.png)](copy-error-handling.png)

A configuração agora define múltiplas saídas. Durante a execução manual, diretamente no MapForce, o utilizador seleciona uma ou outra saída. O valor do caminho de execução para o tratamento de erros HTTP torna-se claro quando a configuração está destinada a ser executada sob controlo automatizado pelo [MapForce Server](https://www.altova.com/pt/mapforce-server) ou numa tarefa agendada no [FlowForce Server](https://www.altova.com/pt/flowforceserver). Por exemplo, uma configuração de mapeamento de dados automatizada pode reportar o estado de 50 aeroportos diferentes a cada meia hora.

Durante a execução automatizada, todos os caminhos de saída do mapeamento de dados são processados. Para garantir que o serviço web seja chamado apenas uma vez para cada entrada, um componente intermediário irá capturar o resultado do serviço web antes de o mapear para o destino final. Se ocorrer algum erro HTTP, a data, a hora e o código de estado HTTP exato serão registados.

Lidar com erros HTTP numa aplicação de mapeamento de dados para serviços web REST é como ter um cinto de segurança ou um extintor de incêndio: é algo muito útil, mas esperamos nunca ter de o usar!

Se é novo no MapForce, consulte este [vídeo de apresentação](https://youtu.be/a83na6G9FjI) para uma introdução. Pode experimentar o MapForce por si próprio com um [período de teste gratuito de 30 dias](https://www.altova.com/pt/mapforce/download).
