Módulo HTTP Request
O módulo HTTP Request fornece funcionalidades completas para realizar requisições HTTP/HTTPS, suportando todos os métodos HTTP padrão, headers customizados, SSL/TLS, timeouts e tratamento abrangente de erros.
🚀 Funcionalidades
Características Principais
- ✅ Métodos HTTP completos: GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD, TRACE, CONNECT
- ✅ Headers customizados: Suporte completo a headers HTTP
- ✅ Body flexível: Suporte a texto, JSON e dados binários
- ✅ SSL/TLS: Verificação de certificados configurável
- ✅ Timeouts: Configuração de timeout personalizável
- ✅ Auto-detecção: Content-Type automático para JSON
- ✅ User-Agent: User-Agent padrão configurável
- ✅ Tratamento de erros: Respostas estruturadas com códigos de status
- ✅ Observabilidade: Tracing completo com OpenTelemetry
📋 Configuração
Configuração Básica
modules:
- name: "http_client"
module: "http_request"
with:
timeout: 30
verify_ssl: true
Configuração com Variáveis de Ambiente
# User-Agent customizado
export PHLOW_HTTP_REQUEST_USER_AGENT="MyApp/1.0.0"
# Desabilitar User-Agent padrão
export PHLOW_HTTP_REQUEST_USER_AGENT_DISABLE="true"
🔧 Parâmetros de Configuração
Configuração do Módulo (with)
timeout
(number, opcional): Timeout em segundos (padrão: 29)verify_ssl
(boolean, opcional): Verificar certificados SSL (padrão: true)
Entrada (input)
method
(string, obrigatório): Método HTTPurl
(string, obrigatório): URL de destinoheaders
(object, opcional): Headers HTTPbody
(string, opcional): Corpo da requisição
Saída (output)
response
(object): Resposta HTTP completastatus_code
(number): Código de status HTTPheaders
(object): Headers da respostabody
(string): Corpo da resposta (parsed JSON se aplicável)
is_success
(boolean): Se a requisição foi bem-sucedida (200-299)is_error
(boolean): Se houve erro (400-599)message
(string): Mensagem de erro ou sucesso
💻 Exemplos de Uso
Requisição GET Simples
steps:
- name: "get_users"
use: "http_client"
input:
method: "GET"
url: "https://jsonplaceholder.typicode.com/users"
Requisição POST com JSON
steps:
- name: "create_user"
use: "http_client"
input:
method: "POST"
url: "https://api.example.com/users"
headers:
"Authorization": "Bearer {{ $auth_token }}"
"Content-Type": "application/json"
body: |
{
"name": "João Silva",
"email": "joao@example.com",
"age": 30
}
Requisição PUT com Headers Customizados
steps:
- name: "update_user"
use: "http_client"
input:
method: "PUT"
url: "https://api.example.com/users/{{ $user_id }}"
headers:
"Authorization": "Bearer {{ $auth_token }}"
"Content-Type": "application/json"
"X-Request-ID": "{{ $request_id }}"
"X-User-Agent": "MyApp/1.0.0"
body: |
{
"name": "João Silva Updated",
"email": "joao.updated@example.com"
}
Requisição DELETE
steps:
- name: "delete_user"
use: "http_client"
input:
method: "DELETE"
url: "https://api.example.com/users/{{ $user_id }}"
headers:
"Authorization": "Bearer {{ $auth_token }}"
Requisição com Timeout Customizado
modules:
- name: "slow_api_client"
module: "http_request"
with:
timeout: 60 # 60 segundos
verify_ssl: false # Para APIs de desenvolvimento
steps:
- name: "slow_operation"
use: "slow_api_client"
input:
method: "POST"
url: "https://slow-api.example.com/process"
body: "{{ $large_data }}"
🔍 Métodos HTTP Suportados
GET - Buscar Dados
input:
method: "GET"
url: "https://api.example.com/users"
headers:
"Accept": "application/json"
POST - Criar Recurso
input:
method: "POST"
url: "https://api.example.com/users"
headers:
"Content-Type": "application/json"
body: '{"name": "Novo Usuário"}'
PUT - Atualizar Recurso Completo
input:
method: "PUT"
url: "https://api.example.com/users/123"
body: '{"name": "Nome Atualizado", "email": "novo@email.com"}'
PATCH - Atualizar Recurso Parcial
input:
method: "PATCH"
url: "https://api.example.com/users/123"
body: '{"name": "Apenas Nome Atualizado"}'
DELETE - Remover Recurso
input:
method: "DELETE"
url: "https://api.example.com/users/123"
OPTIONS - Verificar Opções
input:
method: "OPTIONS"
url: "https://api.example.com/users"
HEAD - Buscar Headers
input:
method: "HEAD"
url: "https://api.example.com/users"
📊 Formato de Resposta
Resposta de Sucesso
{
"response": {
"status_code": 200,
"headers": {
"content-type": "application/json",
"content-length": "1234",
"date": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"id": 1,
"name": "João Silva",
"email": "joao@example.com"
}
},
"is_success": true,
"is_error": false,
"message": "Request successful"
}
Resposta de Erro HTTP
{
"response": {
"status_code": 404,
"headers": {
"content-type": "application/json"
},
"body": {
"error": "User not found"
}
},
"is_success": false,
"is_error": true,
"message": "Request successful"
}
Erro de Conexão
{
"response": undefined,
"is_success": false,
"is_error": true,
"message": "Request error: Connection timeout"
}
🌐 Exemplo Completo - API Client
name: "user-api-client"
version: "1.0.0"
description: "Cliente completo para API de usuários"
modules:
- name: "api_client"
module: "http_request"
with:
timeout: 30
verify_ssl: true
- name: "secure_api_client"
module: "http_request"
with:
timeout: 60
verify_ssl: false # Para desenvolvimento
steps:
- name: "authenticate"
use: "api_client"
input:
method: "POST"
url: "https://api.example.com/auth/login"
headers:
"Content-Type": "application/json"
body: |
{
"username": "{{ $username }}",
"password": "{{ $password }}"
}
- name: "check_auth_success"
condition:
left: "{{ $authenticate.is_success }}"
operator: "equals"
right: true
else:
return: "Authentication failed: {{ $authenticate.message }}"
- name: "get_user_profile"
use: "api_client"
input:
method: "GET"
url: "https://api.example.com/users/me"
headers:
"Authorization": "Bearer {{ $authenticate.response.body.access_token }}"
"Accept": "application/json"
- name: "update_user_profile"
use: "api_client"
input:
method: "PUT"
url: "https://api.example.com/users/me"
headers:
"Authorization": "Bearer {{ $authenticate.response.body.access_token }}"
"Content-Type": "application/json"
body: |
{
"name": "{{ $updated_name }}",
"email": "{{ $updated_email }}",
"preferences": {
"theme": "dark",
"notifications": true
}
}
- name: "get_user_orders"
use: "api_client"
input:
method: "GET"
url: "https://api.example.com/users/me/orders"
headers:
"Authorization": "Bearer {{ $authenticate.response.body.access_token }}"
- name: "create_order"
use: "api_client"
input:
method: "POST"
url: "https://api.example.com/orders"
headers:
"Authorization": "Bearer {{ $authenticate.response.body.access_token }}"
"Content-Type": "application/json"
body: |
{
"items": [
{
"product_id": "{{ $product_id }}",
"quantity": {{ $quantity }},
"price": {{ $price }}
}
],
"shipping_address": {
"street": "{{ $address.street }}",
"city": "{{ $address.city }}",
"zipcode": "{{ $address.zipcode }}"
}
}
- name: "final_result"
script: |
{
profile: $get_user_profile.response.body,
profile_updated: $update_user_profile.is_success,
orders: $get_user_orders.response.body,
new_order: $create_order.response.body
}
🔒 Configuração de Segurança
SSL/TLS
modules:
- name: "secure_client"
module: "http_request"
with:
verify_ssl: true # Produção
- name: "dev_client"
module: "http_request"
with:
verify_ssl: false # Desenvolvimento
Headers de Segurança
input:
headers:
"Authorization": "Bearer {{ $jwt_token }}"
"X-API-Key": "{{ $api_key }}"
"X-Request-ID": "{{ $request_id }}"
"X-Forwarded-For": "{{ $client_ip }}"
🚨 Tratamento de Erros
Verificação de Status
steps:
- name: "api_call"
use: "http_client"
input:
method: "GET"
url: "https://api.example.com/data"
- name: "handle_response"
condition:
left: "{{ $api_call.is_success }}"
operator: "equals"
right: true
then:
# Processar dados de sucesso
script: "Success: {{ $api_call.response.body }}"
else:
# Tratar erro
script: "Error {{ $api_call.response.status_code }}: {{ $api_call.message }}"
Diferentes Tipos de Erro
steps:
- name: "check_error_type"
condition:
left: "{{ $api_call.response.status_code }}"
operator: "equals"
right: 404
then:
return: "Resource not found"
else:
condition:
left: "{{ $api_call.response.status_code }}"
operator: "greater_than_or_equal"
right: 500
then:
return: "Server error"
else:
return: "Client error"
📈 Performance e Timeouts
Configuração de Timeouts
modules:
- name: "fast_api"
module: "http_request"
with:
timeout: 5 # 5 segundos para APIs rápidas
- name: "slow_api"
module: "http_request"
with:
timeout: 120 # 2 minutos para processamento longo
🏷️ Tags
- http
- https
- request
- api
- client
- rest
- web
Versão: 0.0.1
Autor: Philippe Assis <codephilippe@gmail.com>
Licença: MIT
Repositório: https://github.com/phlowdotdev/phlow