14. Creating a method to api header to send

 

14. Creación de un método para enviar cabeceras a la API

¡Hola y bienvenido de nuevo!

En esta lección vamos a crear otro método importante para nuestro sistema. Si recuerdas, en la lección anterior creamos un método para generar la URL de la API. Ahora necesitamos preparar las cabeceras HTTP que enviaremos junto con nuestra solicitud.


📌 ¿Por qué necesitamos cabeceras?

Imagina que quieres entrar a un edificio seguro:

  • La URL es como la dirección del edificio (ya la tenemos)

  • Las cabeceras son como tu identificación y permiso de acceso

  • El API Key es como tu credencial única que prueba que tienes autorización

Las APIs suelen requerir:

  1. Autenticación (quién eres) → API Key

  2. Tipo de contenido (qué estás enviando) → JSON, formulario, etc.


🔍 Analizando nuestra API

Según nuestro código anterior, la API de Whisper necesita:

php

// Para ASR (Reconocimiento de Voz):

// Cabecera 1: Authorization: Bearer TU_API_KEY

// Cabecera 2: Content-Type: multipart/form-data


// Para Traducción:

// Cabecera 1: Authorization: Bearer TU_API_KEY  

// Cabecera 2: Content-Type: application/json


🛠️ Vamos a crear el método

php

/**

 * Método para obtener las cabeceras HTTP según el tipo de operación

 * 

 * @param string $dataType Tipo de operación: 'asr' o 'translation'

 * @return array Arreglo con las cabeceras necesarias

 */

public function getHeaders($dataType)

{

    // Verificamos si es para Reconocimiento de Voz (ASR)

    if ($dataType === 'asr') {

        return [

            'Authorization: Bearer ' . $this->api_token,

            'Content-Type: multipart/form-data'

        ];

    } 

    // Si no es ASR, es para Traducción

    else {

        return [

            'Authorization: Bearer ' . $this->api_token,

            'Content-Type: application/json'

        ];

    }

}


📝 Explicación paso a paso

1. Estructura básica del método

php

public function getHeaders($dataType)

  • public: El método es accesible desde fuera de la clase

  • function: Define que es una función/método

  • getHeaders: Nombre descriptivo del método

  • ($dataType): Parámetro que indica qué tipo de operación vamos a hacer

2. Verificación del tipo de operación

php

if ($dataType === 'asr')

Usamos === para comparar valor y tipo exactamente. Es más seguro que ==.

3. Cabeceras para ASR (Reconocimiento de Voz)

php

'Authorization: Bearer ' . $this->api_token

  • Authorization: Indica que vamos a autenticarnos

  • Bearer: Tipo de autenticación (como un "portador" de credenciales)

  • $this->api_token: Nuestra clave API almacenada en la clase

php

'Content-Type: multipart/form-data'

  • multipart/form-data: Formato para enviar archivos (como audio)

4. Cabeceras para Traducción

php

'Content-Type: application/json'

  • application/json: Formato para enviar datos estructurados en JSON


🎨 Analogía Visual: El Proceso de Envío

text

┌─────────────────────────────────────────────────────┐

│                   NUESTRA APLICACIÓN                 │

├─────────────────────────────────────────────────────┤

│ 1. Archivo de audio → "hola_mundo.mp3"              │

│ 2. Tipo de operación → "asr" (convertir a texto)    │

├─────────────────────────────────────────────────────┤

│              PREPARAMOS EL ENVÍO:                    │

│                                                     │

│    🔗 URL: https://api.whisper.com/v1/transcribe    │

│    📋 CABECERAS:                                    │

│       - Authorization: Bearer abc123...             │

│       - Content-Type: multipart/form-data           │

│    📦 CONTENIDO: Archivo "hola_mundo.mp3"           │

└───────────────────────────┬─────────────────────────┘

                            │

                            ▼

┌─────────────────────────────────────────────────────┐

│                     API DE WHISPER                   │

├─────────────────────────────────────────────────────┤

│ ✅ Verifica credenciales (API Key)                   │

│ ✅ Reconoce el tipo de contenido                     │

│ ✅ Procesa el archivo de audio                       │

│ 📤 Devuelve el texto transcrito                     │

└─────────────────────────────────────────────────────┘


🔧 Ejemplo práctico completo

php

class WhisperAPI {

    private $api_token = "sk-tu_clave_api_aqui_12345";

    

    // Método de la lección anterior (URL)

    public function getUrl($dataType) {

        if ($dataType === 'asr') {

            return 'https://api.openai.com/v1/audio/transcriptions';

        } else {

            return 'https://api.openai.com/v1/audio/translations';

        }

    }

    

    // Método de ESTA lección (Cabeceras)

    public function getHeaders($dataType) {

        if ($dataType === 'asr') {

            return [

                'Authorization: Bearer ' . $this->api_token,

                'Content-Type: multipart/form-data'

            ];

        } else {

            return [

                'Authorization: Bearer ' . $this->api_token,

                'Content-Type: application/json'

            ];

        }

    }

}


// USANDO NUESTRA CLASE:

$whisper = new WhisperAPI();


// Para convertir audio a texto:

echo "URL para ASR: " . $whisper->getUrl('asr') . "\n";

print_r($whisper->getHeaders('asr'));


// Para traducir audio:

echo "\nURL para traducción: " . $whisper->getUrl('translation') . "\n";

print_r($whisper->getHeaders('translation'));

Salida:

text

URL para ASR: https://api.openai.com/v1/audio/transcriptions

Array

(

    [0] => Authorization: Bearer sk-tu_clave_api_aqui_12345

    [1] => Content-Type: multipart/form-data

)


URL para traducción: https://api.openai.com/v1/audio/translations

Array

(

    [0] => Authorization: Bearer sk-tu_clave_api_aqui_12345

    [1] => Content-Type: application/json

)


💡 Esquema de Memoria Rápida

text

ASR (Audio a Texto):

├── URL: /transcriptions

└── Cabeceras:

    ├── Authorization: Bearer + API_Key

    └── Content-Type: multipart/form-data


TRADUCCIÓN:

├── URL: /translations  

└── Cabeceras:

    ├── Authorization: Bearer + API_Key

    └── Content-Type: application/json

Regla mnemotécnica:

  • "ASR" → "ArchivoS" → multipart/form-data (para archivos)

  • "Traducción" → "Texto" → application/json (para datos)


🚀 Lo que viene después

Ahora tenemos:
✅ URL de la API
✅ Cabeceras con autenticación

En la próxima lección usaremos cURL para:

  1. Conectar con la API usando nuestra URL

  2. Enviar las cabeceras que acabamos de crear

  3. Adjuntar el archivo de audio

  4. Recibir la respuesta de la IA


📊 Cuestionario de Repaso

Pregunta 1:

¿Qué función cumple la cabecera Authorization en una solicitud a la API?
a) Indica el tipo de archivo que enviamos
b) Autentica nuestra solicitud con la API Key
c) Define la URL de destino
d) Especifica el método HTTP a usar

Pregunta 2:

¿Cuál es la diferencia principal entre las cabeceras para asr y translation?
a) Solo cambia la URL
b) Cambia el Content-Type (multipart/form-data vs application/json)
c) Una usa GET y otra POST
d) No hay diferencia

Pregunta 3:

¿Qué significa $dataType === 'asr'?
a) Compara EXACTAMENTE el valor y tipo con 'asr'
b) Asigna el valor 'asr' a $dataType
c) Verifica si $dataType existe
d) Convierte $dataType a string

Pregunta 4:

¿Por qué necesitamos $this->api_token en nuestras cabeceras?
a) Para mostrar nuestra identidad al usuario
b) Para autenticarnos con la API de Whisper
c) Para encriptar el archivo de audio
d) Para generar una nueva URL

Pregunta 5:

¿Qué formato usamos para enviar archivos de audio?
a) application/json
b) text/plain
c) multipart/form-data
d) application/xml


📋 Respuestas del Cuestionario

  1. b) La cabecera Authorization autentica nuestra solicitud usando el API Key como credencial.

  2. b) La principal diferencia es el Content-Type: ASR usa multipart/form-data para archivos, traducción usa application/json para datos estructurados.

  3. a) El operador === compara valor Y tipo exactamente (comparación estricta).

  4. b) El API token es nuestra credencial única que prueba a la API que estamos autorizados.

  5. c) multipart/form-data es el formato adecuado para enviar archivos a través de HTTP.


🎯 Puntos Clave para Recordar

  1. Las cabeceras HTTP son metadatos que acompañan nuestra solicitud

  2. API Key = Tu "llave" personal para acceder a la API

  3. Content-Type le dice a la API QUÉ le estamos enviando

  4. ASR necesita multipart/form-data (archivos)

  5. Traducción necesita application/json (datos estructurados)


✨ ¡Excelente trabajo! Ahora tu aplicación sabe cómo "presentarse" correctamente ante la API. En la siguiente lección haremos la magia de enviar todo y recibir la respuesta.


Comentarios

Entradas más populares de este blog

1-7. Transforma tu audio a texto

10. Haz que tu asistente hable

8. NUEVO - Solución si tu micrófono no está captando tu audio