top of page
AEnB2UrPAz1jrLwPzGy6ckjFcFP-uMXJfeyA1QYB7-97LH-694BJ06-C84AJ8mg8n-M7yi0yb50BxP5D1MphC5HNeb

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:

  1. Ler o stream linha por linha

  2. Identificar linhas de dados de evento (começando com 'data:')

  3. Decodificar dados de evento em JSON

  4. Transformar resultados analisando JSON aninhado

  5. Invocar callback com resultados processados

  6. Verificar se todos os serviços selecionados retornaram

  7. Fechar conexão quando todos os serviços completarem

  8. 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.

bottom of page