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:
Autenticación (quién eres) → API Key
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:
Conectar con la API usando nuestra URL
Enviar las cabeceras que acabamos de crear
Adjuntar el archivo de audio
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
b) La cabecera Authorization autentica nuestra solicitud usando el API Key como credencial.
b) La principal diferencia es el Content-Type: ASR usa multipart/form-data para archivos, traducción usa application/json para datos estructurados.
a) El operador === compara valor Y tipo exactamente (comparación estricta).
b) El API token es nuestra credencial única que prueba a la API que estamos autorizados.
c) multipart/form-data es el formato adecuado para enviar archivos a través de HTTP.
🎯 Puntos Clave para Recordar
Las cabeceras HTTP son metadatos que acompañan nuestra solicitud
API Key = Tu "llave" personal para acceder a la API
Content-Type le dice a la API QUÉ le estamos enviando
ASR necesita multipart/form-data (archivos)
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
Publicar un comentario