Cliente REST#
O bloco Cliente REST é destinado à execução de requisições HTTP.
Ele suporta os principais métodos de requisições HTTP, permitindo que o Usuário interaja com APIs (incluindo APIs RESTful), utilizando:
- GET: Recuperação de dados.
- POST: Envio de dados para criar um novo recurso.
- PUT: Atualização de um recurso existente.
- DELETE: Exclusão de um recurso.
- OPTIONS: Obtenção de informações sobre os métodos suportados para o recurso especificado.
| Deve-se considerar que o bloco Executar Requisição HTTP no Sherpa Designer está obsoleto (em vez dele, recomenda-se usar o bloco Cliente REST, pois é mais funcional). Mas, considerando que muitos Usuários ainda utilizam o bloco Executar Requisição HTTP, os desenvolvedores o deixaram disponível para garantir a compatibilidade retroativa. |
Os Usuários podem configurar flexivelmente os cabeçalhos das requisições, adicionar cookies e também passar parâmetros na URL. Essas funcionalidades podem ser úteis para:
- Especificar o formato dos dados, como `Content-Type` ou `Accept`.
- Configurar a autorização, utilizando cabeçalhos do tipo `Authorization`, permitindo trabalhar com OAuth, chaves de API ou autenticação básica.
- Passar parâmetros adicionais nas requisições, o que pode ser útil para filtrar ou classificar dados.
Ao utilizar os métodos POST e PUT, o Cliente REST permite que o Usuário envie dados no corpo da requisição. Ele pode:
- Enviar dados no formato JSON, XML ou outros tipos.
- Fazer upload de arquivos, permitindo integração com serviços que exigem a transferência de conteúdo (por exemplo, imagens ou documentos).
Isso é especialmente útil para trabalhar com APIs que aceitam estruturas de dados complexas.
Além disso, o bloco Cliente REST oferece funcionalidades para:
- Configuração de tempo limite (timeout): O Usuário pode definir quanto tempo sua requisição aguardará uma resposta do servidor antes de ser cancelada.
- Tratamento de erros: por padrão, o bloco retorna um erro se o servidor responde com um status diferente de sucesso (2xx), mas o Usuário pode configurá-lo para continuar executando ações dependendo dos códigos de erro.
Para garantir segurança ou contornar restrições de rede, o bloco Cliente REST suporta o uso de servidores proxy. O Usuário pode configurar:
- Endereço do proxy,
- Porta,
- Autorização necessária para acessar o proxy.
Isso é útil em casos onde é necessário interagir com uma API que está disponível apenas através de conexões intermediárias especificadas.
Exemplo de uso: Yandex Speech API#
Suponha que o Usuário queira converter um arquivo de áudio no formato .wav em texto, utilizando a Yandex Speech API. Com o bloco Cliente REST, isso pode ser feito da seguinte forma:
1. Configuração da requisição:
URL: `https://speechiy.yandex.net/apis/speech/v1/stt:recognize\`
Método: `POST`
Cabeçalhos:
Autorização: Api-Key <seu_chave>
Content-Type: application/octet-stream
2. Envio de dados: No corpo da requisição, o Usuário fará o upload do arquivo de áudio .wav.
3. Tratamento da resposta: O Usuário receberá o resultado em texto, que pode ser utilizado no aplicativo.
Exemplo de uso do Cliente REST com um array de campos do tipo `multipart/form-data`#
Ao trabalhar com APIs que exigem o envio de dados no formato `multipart/form-data`, é importante configurar corretamente o cliente. Esse formato é frequentemente utilizado para upload de arquivos, bem como para envio de dados de formulários.
Suponha que o Usuário tenha uma API que permite fazer upload de arquivos e enviar dados textuais adicionais. Para isso, é necessário utilizar o formato `multipart/form-data`.
Por exemplo, suponha que o Usuário queira enviar uma imagem e uma descrição para o servidor.
Exemplo de preenchimento dos campos do bloco Cliente REST:
| Campo | Exemplo de preenchimento | Comentário |
|---|---|---|
| URL | http://www.example.com/api/upload | Link para a API que aceita arquivos enviados. |
| Tipo de requisição | POST | Estamos enviando dados para o servidor, portanto usamos o método POST. |
| Codificação | UTF-8 | Codificação padrão para páginas Web. |
| Cabeçalho Accept | application/json | Especifique qual tipo de resposta você espera do servidor. |
| Parâmetros | {"description"="Descrição do arquivo enviado"} | Especifique dados adicionais que você deseja enviar junto com o arquivo. |
| Cabeçalhos | {"Authorization"="Bearer SeuTokenDeAcesso"} | Especifique o cabeçalho de autorização. |
| Cookies | Lista de cookies, se necessário para a requisição. Se o servidor exigir autorização via cookies, adicione-os aqui, obtendo-os do bloco "Obter Cookies". | |
| Arquivos | @{"file"="C:\caminho\para\seu\arquivo.jpg"} | Especifique o arquivo que deseja enviar. Use o caminho completo para o arquivo. |
| Conteúdo da requisição | Não preencha este campo ao usar `multipart/form-data`, pois os dados são gerados automaticamente. | |
| Cabeçalho Content-Type | multipart/form-data | Especifique o tipo de conteúdo que corresponde aos dados enviados. |
| Tempo de espera | 30 | Defina o tempo de espera em segundos para a resposta do servidor. |
| Resultado | O campo será preenchido automaticamente ao executar a requisição. | |
| Código de resposta | O campo será preenchido automaticamente ao executar a requisição. | |
| Cabeçalhos de resposta | O campo será preenchido automaticamente ao executar a requisição. | |
| Cookies | O campo será preenchido automaticamente ao executar a requisição. | |
| Nível de mensagens | Padrão | Selecione o nível de mensagens que será exibido durante a execução do bloco. |
| Texto do erro | O campo será preenchido automaticamente em caso de erros. |
Categorias de erros#
Os erros que podem ocorrer ao trabalhar com a API podem ser divididos em várias categorias:
- Erro de rede: Problemas de rede, como falta de conexão, timeouts e outras falhas no nível do protocolo de transporte.
- Erros do cliente (4xx): Esses são erros relacionados a solicitações enviadas ao servidor. Eles indicam que algo está errado com a solicitação ou os parâmetros. Exemplos:
`400 Bad Request`: Solicitação inválida, erro de sintaxe.
`401 Unauthorized`: Acesso negado, autorização necessária.
`404 Not Found`: O recurso solicitado não foi encontrado.
- Erros do servidor (5xx): Esses erros indicam problemas do lado do servidor. Exemplos:
`500 Internal Server Error`: Erro interno do servidor, erro genérico sem especificação.
`503 Service Unavailable`: Serviço temporariamente indisponível, pode estar sobrecarregado ou em manutenção.
Tratamento de erros no Cliente REST#
Para um trabalho eficaz com erros no Cliente REST, vários métodos estão disponíveis:
- Estratégia de tratamento: Configuração da lógica de tratamento de erros com base no status da resposta do servidor. Por exemplo:
Para códigos 4xx, você pode exibir uma notificação ao usuário sobre a solicitação inválida.
Para códigos 5xx, pode-se implementar a lógica de nova tentativa com alguns atrasos.
- Personalização das mensagens de erro: Você pode configurar e exibir mensagens mais compreensíveis para os usuários, fornecendo detalhes sobre o erro. Isso é importante para melhorar a usabilidade.
O registro de erros é uma parte importante da depuração e diagnóstico. Você pode configurar o registro de erros para:
- Gravar respostas com erro em um arquivo ou banco de dados para análise posterior.
- Incluir informações adicionais sobre o contexto do erro (por exemplo, URL da solicitação, cabeçalhos, corpo da solicitação) para facilitar o diagnóstico.
Em casos em que a solicitação não pode ser concluída devido a erros temporários de rede ou servidor:
- Defina timeouts para as solicitações, para que não fiquem pendentes por tempo indeterminado.
- Implemente um mecanismo de tentativas com atraso exponencial para erros temporários. Por exemplo, se o servidor estiver temporariamente indisponível (código 503), faz sentido tentar repetir a solicitação após alguns segundos.
Além do tratamento de erros no código, é útil estudar a estrutura dos códigos de erro padrão, para entender como eles são agrupados e o que significam. O uso de códigos padrão ajudará você a identificar mais rapidamente a causa do problema e resolvê-lo.