
Exemplos em PHP
Nossa documentação apresenta exemplos de implementação da WaveLight API utilizando PHP, uma linguagem robusta e amplamente utilizada no desenvolvimento web. Os exemplos a seguir demonstram como integrar nossa API de forma eficiente e segura em projetos PHP.
Projetamos estes guias para desenvolvedores que preferem trabalhar com PHP, oferecendo implementações práticas e diretas dos principais recursos da WaveLight API. Nossos exemplos cobrem desde configurações básicas até cenários mais complexos de integração.
Explore os códigos e tutoriais para aprender como realizar uploads de arquivos, processar eventos em tempo real e gerenciar solicitações assíncronas utilizando PHP.
Solicitação de Serviços de API - Exemplo de Uso
Este documento descreve a implementação das APIs Service Request e Upload File em PHP. A API Service Request permite monitorar eventos enviados pelo servidor em tempo real, enquanto a Upload File permite o envio de arquivos binários para um servidor.
Estrutura Principal
Enumerações de Serviços e Gênero
class Service {
public const HEART_BEATS = "HEART BEATS";
public const BLOOD_PRESSURE = "BLOOD PRESSURE";
public const OXIMETRY = "OXIMETRY";
}
class Gender {
public const UNDEFINED = "UNDEFINED";
public const MALE = "MALE";
public const FEMALE = "FEMALE";
}
Propósito:
-
Define constantes para serviços médicos disponíveis
-
Fornece uma maneira padronizada de referenciar serviços e gêneros
-
Facilita a manutenção e legibilidade do código
Interface de Dados do Paciente
interface WorkflowPerson {
public function getHeight(): float;
public function getWeight(): float;
public function getAge(): int;
public function getGender(): string;
}
Características:
-
Define um contrato para classes que representam dados de pacientes
-
Garante que todas as implementações forneçam métodos para recuperar informações básicas
-
Permite flexibilidade na criação de diferentes tipos de objetos de paciente
Implementação dos Dados do Paciente
class PatientData implements WorkflowPerson {
private float $height;
private float $weight;
private int $age;
private string $gender;
public function __construct(float $height, float $weight, int $age, string $gender) {
$this->height = $height;
$this->weight = $weight;
$this->age = $age;
$this->gender = $gender;
}
// Getter methods implemented...
}
Benefícios:
-
Encapsulamento seguro dos dados do paciente
-
Validação e manipulação simples dos atributos
-
Fácil criação de objetos de paciente
Função Principal de Solicitação de Serviço
function createServiceRequestRequest(array $selectedServices, WorkflowPerson $person): ServiceRequestResponse {
$apiKey = getenv('API_KEY');
$payload = [
'serviceList' => $selectedServices,
'WPG_Object' => [
// Detailed payload structure...
],
];
// cURL request configuration and sending
$ch = curl_init('https://api.wavelighthealth.com/api');
// cURL settings...
$response = curl_exec($ch);
// Error handling and response processing
}
Principais Funcionalidades:
-
Montagem dinâmica do payload de solicitação
-
Utilização segura de chave de API
-
Flexibilidade na seleção de serviços
-
Tratamento robusto de erros de comunicação
Exemplo de Uso
try {
$person = new PatientData(175.5, 70.0, 30, Gender::MALE);
$services = [Service::HEART_BEATS, Service::BLOOD_PRESSURE];
$result = createServiceRequestRequest($services, $person);
echo "Request ID: " . $result->requestId;
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
Demonstração:
-
Criação simples de objeto de paciente
-
Seleção de múltiplos serviços
-
Tratamento de exceções
Considerações de Segurança:
-
Utilização de variáveis de ambiente para armazenamento de chave de API
-
Validação e sanitização de dados de entrada
-
Tratamento de erros com exceções
Requisitos
-
PHP 7.4 ou superior
-
Extensão cURL habilitada
-
Configuração de variáveis de ambiente para chave de API
Performance Optimization
-
Minimal object creation
-
Efficient data processing
-
Lightweight payload structure
Próximos Passos
-
Implementar validação adicional de dados
-
Adicionar logs de requisições
-
Criar mecanismo de retry para falhas de comunicação
Solução de Problemas
-
Certifique-se de que a chave de API está configurada corretamente
-
Verifique a conectividade de rede
-
Verifique a configuração do PHP e do cURL
-
Valide os tipos e formatos dos dados de entrada
Upload de Arquivo PHP
A classe FileUploader fornece métodos robustos para upload de arquivos usando URLs pré-assinadas, com suporte a diferentes métodos de entrada de arquivo.
Métodos Principais
uploadFileOn
public static function uploadFileOn(
ServiceRequestResponse $presigned,
string $filePath
): array
Parâmetros:
-
$presigned : Objeto com URL de upload pré-assinada
-
$filePath : Caminho completo do arquivo a ser enviado
Características:
-
Upload via caminho de arquivo no sistema
-
Suporte a arquivos binários
-
Tratamento completo de erros
uploadFileFromStream()
public static function uploadFileFromStream(
ServiceRequestResponse $presigned,
$fileResource
): array
Parâmetros:
-
$presigned : Objeto com URL de upload pré-assinada
-
$fileResource : Recurso de stream do arquivo
Características:
-
Upload a partir de recursos de stream
-
Flexibilidade de entrada
-
Validação de recurso
Exemplo de Uso
try {
$serviceResponse = new ServiceRequestResponse();
$serviceResponse->uploadVideoUrl = 'https://example.com/upload';
// File upload
$uploadResult = FileUploader::uploadFileOn(
$serviceResponse,
'/path/to/file.mp4'
);
// Stream upload
$fileStream = fopen('/path/to/file.mp4', 'r');
$streamResult = FileUploader::uploadFileFromStream(
$serviceResponse,
$fileStream
);
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
Tratamento de Erros:
-
Exceções para cenários como:
-
Arquivo não encontrado
-
Falha de leitura
-
Erros de rede
-
Códigos de status HTTP inválidos
-
Configurações de Upload:
-
Método HTTP: PUT
-
Tipo de Conteúdo: application/octet-stream
-
Suporte a uploads binários
Eventos Enviados pelo Servidor (SSE) em PHP
Esta implementação fornece um método robusto para lidar com Eventos Enviados pelo Servidor (SSE) em PHP, projetado especificamente para rastrear resultados de solicitações de serviço em tempo real no Gateway da Wavelight Health.
Assinatura da Função
listenToServiceResults
function listenToServiceResults($requestId, $selectedServices, $onResultsCallback)
Parameters:
-
$requestId : Um identificador único para a solicitação de serviço
-
$selectedServices : Um array de serviços a serem rastreados
-
$onResultsCallback : Uma função de callback para processar os resultados recebidos
Principais Detalhes da Implementação
1. Configuração de Autenticação e Cabeçalhos
$apiKey = getenv('API_KEY');
$headers = [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiKey
];
Purpose:
-
Recupera a chave de API das variáveis de ambiente
-
Prepara cabeçalhos de autenticação para a conexão SSE
-
Utiliza autenticação Bearer token
2. Criação de Contexto de Stream
$context = stream_context_create([
'http' => [
'method' => 'GET',
'header' => implode("\r\n", $headers)
]
]);
Propósito:
-
Cria um contexto de stream com cabeçalhos HTTP personalizados
-
Permite configurar a solicitação GET com autenticação
-
Habilita conexão com o endpoint SSE com credenciais adequadas
3. Lógica de Processamento de Eventos
while (!feof($stream)) {
$line = fgets($stream);
if (strpos($line, 'data:') === 0) {
try {
$eventData = json_decode(trim(substr($line, 5)), true);
if (!empty($eventData['results'])) {
$parsedResults = array_map(function($result) {
$result['return'] = json_decode($result['return'], true);
return $result;
}, $eventData['results']);
$onResultsCallback($parsedResults);
$allServicesReturned = array_reduce($selectedServices, function($carry, $service) use ($parsedResults) {
return $carry && array_filter($parsedResults, function($result) use ($service) {
return $result['name'] === $service;
});
}, true);
if ($allServicesReturned) {
fclose($stream);
break;
}
}
} catch (Exception $error) {
error_log("[SSE] Failed to process message: " . $error->getMessage());
}
}
}
Etapas Principais de Processamento:
-
Ler o stream linha por linha
-
Identificar linhas de dados de evento (começando com 'data:')
-
Decodificar dados de evento em JSON
-
Transformar resultados analisando JSON aninhado
-
Invocar callback com resultados processados
-
Verificar se todos os serviços selecionados retornaram
-
Fechar conexão quando todos os serviços completarem
-
Registrar erros de processamento
4. Verificação de Conclusão de Serviço
$allServicesReturned = array_reduce($selectedServices, function($carry, $service) use ($parsedResults) {
return $carry && array_filter($parsedResults, function($result) use ($service) {
return $result['name'] === $service;
});
}, true);
Propósito:
-
Use array_reduce() para verificar se todos os serviços selecionados retornaram resultados
-
Fornece um mecanismo para fechar automaticamente a conexão SSE
Tratamento de Erros:
-
Use error_log() para registrar erros de conexão e processamento
-
Lida graciosamente com possíveis falhas de decodificação de JSON
-
Previne terminação do script em erros de processamento de eventos individuais
Exemplo de Uso
$requestId = 'example-request-id';
$selectedServices = ['service1', 'service2'];
listenToServiceResults($requestId, $selectedServices, function($results) {
// Process received results
print_r($results);
});
Considerações:
-
Requer PHP com suporte a stream e JSON
-
Melhor usado em processos PHP de longa duração
-
Adequado para ambientes CLI ou de jobs em segundo plano
Possíveis Melhorias:
-
Adicionar mecanismo de timeout
-
Implementar estratégia de reconexão
-
Adicionar registro de logs mais detalhado
-
Suporte para tratamento de erros personalizado
This documentation serves as a quick guide to integrating with the Wavelight Health API. For more information, see the official documentation.