Skip to content

Métodos

Esta página documenta los métodos disponibles en detalle.

Clase Principal

API

La clase principal para interactuar con la API.

typescript
class API {
  constructor(config: APIConfig)
  get(endpoint: string, options?: RequestOptions): Promise<Response>
  post(endpoint: string, data: any, options?: RequestOptions): Promise<Response>
  put(endpoint: string, data: any, options?: RequestOptions): Promise<Response>
  delete(endpoint: string, options?: RequestOptions): Promise<Response>
}

Constructor

Crea una nueva instancia de la API.

Parámetros:

  • config (APIConfig) - Configuración de la API

Ejemplo:

javascript
const api = new API({
  baseURL: 'https://api.ejemplo.com/v1',
  token: 'tu-token-aqui',
  timeout: 30000
})

Tipo APIConfig:

typescript
interface APIConfig {
  baseURL: string
  token?: string
  timeout?: number
  headers?: Record<string, string>
}

Métodos HTTP

get()

Realiza una petición GET.

Firma:

typescript
get(endpoint: string, options?: RequestOptions): Promise<Response>

Parámetros:

  • endpoint (string) - El endpoint a consultar
  • options (RequestOptions, opcional) - Opciones adicionales

Retorna:

  • Promise<Response> - La respuesta de la petición

Ejemplo:

javascript
// Obtener lista de usuarios
const users = await api.get('/users')

// Con parámetros de query
const users = await api.get('/users', {
  params: {
    page: 1,
    limit: 10
  }
})

// Con headers personalizados
const users = await api.get('/users', {
  headers: {
    'X-Custom-Header': 'valor'
  }
})

post()

Realiza una petición POST.

Firma:

typescript
post(endpoint: string, data: any, options?: RequestOptions): Promise<Response>

Parámetros:

  • endpoint (string) - El endpoint a consultar
  • data (any) - Los datos a enviar
  • options (RequestOptions, opcional) - Opciones adicionales

Retorna:

  • Promise<Response> - La respuesta de la petición

Ejemplo:

javascript
// Crear un nuevo usuario
const newUser = await api.post('/users', {
  name: 'Juan Pérez',
  email: 'juan@ejemplo.com',
  password: 'contraseña-segura'
})

// Con headers personalizados
const newUser = await api.post('/users', userData, {
  headers: {
    'Content-Type': 'application/json'
  }
})

put()

Realiza una petición PUT.

Firma:

typescript
put(endpoint: string, data: any, options?: RequestOptions): Promise<Response>

Parámetros:

  • endpoint (string) - El endpoint a consultar
  • data (any) - Los datos a actualizar
  • options (RequestOptions, opcional) - Opciones adicionales

Retorna:

  • Promise<Response> - La respuesta de la petición

Ejemplo:

javascript
// Actualizar un usuario
const updatedUser = await api.put('/users/123', {
  name: 'Juan Pérez Actualizado',
  email: 'juan.nuevo@ejemplo.com'
})

delete()

Realiza una petición DELETE.

Firma:

typescript
delete(endpoint: string, options?: RequestOptions): Promise<Response>

Parámetros:

  • endpoint (string) - El endpoint a consultar
  • options (RequestOptions, opcional) - Opciones adicionales

Retorna:

  • Promise<Response> - La respuesta de la petición

Ejemplo:

javascript
// Eliminar un usuario
await api.delete('/users/123')

Tipos

RequestOptions

Opciones para las peticiones.

typescript
interface RequestOptions {
  params?: Record<string, any>
  headers?: Record<string, string>
  timeout?: number
  signal?: AbortSignal
}

Propiedades:

  • params - Parámetros de query
  • headers - Headers HTTP personalizados
  • timeout - Timeout en milisegundos
  • signal - AbortSignal para cancelar la petición

Response

Respuesta de una petición.

typescript
interface Response<T = any> {
  data: T
  status: number
  statusText: string
  headers: Record<string, string>
}

Propiedades:

  • data - Datos de la respuesta
  • status - Código de estado HTTP
  • statusText - Texto del estado HTTP
  • headers - Headers de la respuesta

Utilidades

setToken()

Establece el token de autenticación.

Firma:

typescript
setToken(token: string): void

Ejemplo:

javascript
api.setToken('nuevo-token')

clearToken()

Limpia el token de autenticación.

Firma:

typescript
clearToken(): void

Ejemplo:

javascript
api.clearToken()

setTimeout()

Establece el timeout por defecto.

Firma:

typescript
setTimeout(timeout: number): void

Ejemplo:

javascript
api.setTimeout(60000) // 60 segundos

Manejo de Errores

Todos los métodos pueden lanzar errores que deben ser manejados:

javascript
try {
  const users = await api.get('/users')
} catch (error) {
  if (error.status === 401) {
    console.error('No autenticado')
  } else if (error.status === 404) {
    console.error('No encontrado')
  } else {
    console.error('Error:', error.message)
  }
}

Tipo de Error

typescript
interface APIError extends Error {
  status: number
  statusText: string
  data?: any
}

Interceptores

Puedes agregar interceptores para modificar peticiones o respuestas:

Interceptor de Peticiones

javascript
api.interceptors.request.use((config) => {
  // Modificar la configuración antes de enviar
  config.headers['X-Custom-Header'] = 'valor'
  return config
})

Interceptor de Respuestas

javascript
api.interceptors.response.use(
  (response) => {
    // Modificar la respuesta exitosa
    return response
  },
  (error) => {
    // Manejar errores
    if (error.status === 401) {
      // Redirigir al login
    }
    return Promise.reject(error)
  }
)

Ejemplos Avanzados

Cancelar Peticiones

javascript
const controller = new AbortController()

// Iniciar petición
const promise = api.get('/users', {
  signal: controller.signal
})

// Cancelar después de 5 segundos
setTimeout(() => {
  controller.abort()
}, 5000)

try {
  const users = await promise
} catch (error) {
  if (error.name === 'AbortError') {
    console.log('Petición cancelada')
  }
}

Peticiones en Paralelo

javascript
const [users, posts, comments] = await Promise.all([
  api.get('/users'),
  api.get('/posts'),
  api.get('/comments')
])

Reintentos

javascript
async function fetchWithRetry(endpoint, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await api.get(endpoint)
    } catch (error) {
      if (i === maxRetries - 1) throw error
      await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)))
    }
  }
}

const users = await fetchWithRetry('/users')

Próximos Pasos

Documentación del proyecto