# 📨 Ejemplos de Peticiones cURL

## Pruebas Básicas

### 1. Test de Conexión
```bash
curl -X GET http://localhost:8000/api/test
```

### 2. Health Check
```bash
curl -X GET http://localhost:8000/api/v1/health
```

### 3. Información del Sistema
```bash
curl -X GET http://localhost:8000/api/v1/info
```

## CRUD de Ejemplos (Públicas)

### Listar Todos
```bash
curl -X GET http://localhost:8000/api/v1/ejemplos \
  -H "Accept: application/json"
```

### Obtener Uno Específico
```bash
curl -X GET http://localhost:8000/api/v1/ejemplos/1 \
  -H "Accept: application/json"
```

### Crear Nuevo
```bash
curl -X POST http://localhost:8000/api/v1/ejemplos \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "nombre": "Mi Primer Ejemplo",
    "descripcion": "Esta es una prueba de creación"
  }'
```

### Actualizar Existente
```bash
curl -X PUT http://localhost:8000/api/v1/ejemplos/1 \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "nombre": "Ejemplo Actualizado",
    "descripcion": "Descripción modificada"
  }'
```

### Eliminar
```bash
curl -X DELETE http://localhost:8000/api/v1/ejemplos/1 \
  -H "Accept: application/json"
```

## Autenticación con Sanctum

### Crear Usuario y Obtener Token (usando tinker)
```bash
php artisan tinker
```

Luego en tinker:
```php
$user = \App\Models\User::factory()->create([
    'name' => 'Usuario API',
    'email' => 'test@api.com',
    'password' => bcrypt('password123')
]);

$token = $user->createToken('mi-app-token')->plainTextToken;
echo $token;
exit;
```

### Usar el Token en Peticiones Protegidas

#### Obtener Usuario Autenticado
```bash
curl -X GET http://localhost:8000/api/user \
  -H "Accept: application/json" \
  -H "Authorization: Bearer TU_TOKEN_AQUI"
```

#### Listar Recursos Protegidos
```bash
curl -X GET http://localhost:8000/api/recursos-protegidos \
  -H "Accept: application/json" \
  -H "Authorization: Bearer TU_TOKEN_AQUI"
```

#### Crear Recurso Protegido
```bash
curl -X POST http://localhost:8000/api/recursos-protegidos \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer TU_TOKEN_AQUI" \
  -d '{
    "nombre": "Recurso Protegido",
    "descripcion": "Solo usuarios autenticados pueden crear esto"
  }'
```

## Ejemplos con httpie (alternativa a cURL)

Si tienes httpie instalado (`brew install httpie`):

### GET Simple
```bash
http GET localhost:8000/api/v1/health
```

### POST con Datos
```bash
http POST localhost:8000/api/v1/ejemplos \
  nombre="Mi Ejemplo" \
  descripcion="Descripción del ejemplo"
```

### Con Autenticación
```bash
http GET localhost:8000/api/user \
  "Authorization: Bearer TU_TOKEN_AQUI"
```

## Probar con Postman

### Importar Colección

Puedes crear una nueva colección en Postman con estos endpoints:

**Base URL:** `http://localhost:8000/api`

**Headers Globales:**
- `Accept: application/json`
- `Content-Type: application/json`

**Para Rutas Protegidas:**
- `Authorization: Bearer {{token}}`

### Variables de Entorno en Postman
```json
{
  "base_url": "http://localhost:8000/api",
  "token": "TU_TOKEN_AQUI"
}
```

## Probar Validaciones

### Enviar Datos Inválidos
```bash
curl -X POST http://localhost:8000/api/v1/ejemplos \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "descripcion": "Falta el campo nombre requerido"
  }'
```

**Respuesta esperada (422):**
```json
{
  "message": "The nombre field is required.",
  "errors": {
    "nombre": ["The nombre field is required."]
  }
}
```

## Scripts de Prueba Rápida

### Crear archivo `test-api.sh`
```bash
#!/bin/bash

BASE_URL="http://localhost:8000/api"

echo "🧪 Probando API..."
echo ""

echo "1️⃣ Test de Conexión"
curl -s "$BASE_URL/test" | jq
echo ""

echo "2️⃣ Health Check"
curl -s "$BASE_URL/v1/health" | jq
echo ""

echo "3️⃣ Listar Ejemplos"
curl -s "$BASE_URL/v1/ejemplos" | jq
echo ""

echo "4️⃣ Crear Ejemplo"
curl -s -X POST "$BASE_URL/v1/ejemplos" \
  -H "Content-Type: application/json" \
  -d '{"nombre":"Test Automatizado","descripcion":"Creado por script"}' | jq
echo ""

echo "✅ Pruebas completadas"
```

### Hacer el script ejecutable y correrlo
```bash
chmod +x test-api.sh
./test-api.sh
```

## Debugging

### Ver Log en Tiempo Real
```bash
tail -f storage/logs/laravel.log
```

### Ver Queries SQL
En tu `.env`:
```env
DB_LOG_QUERIES=true
```

---

**Tip:** Instala `jq` para formatear JSON en terminal: `brew install jq`
