Saltar al contenido principal

Referencia de API

Arquitectura de APIs​

El proyecto integra múltiples fuentes de datos a través de diferentes APIs:

  1. API de Magento (GraphQL y REST)
  2. API de Directus (GraphQL)
  3. API de Typesense (HTTP/REST)
  4. APIs internas de Next.js (Proxies y manipulación de datos)

APIs de Magento​

Endpoints Principales​

EndpointDescripción
/api/magento/graphqlProxy para la API GraphQL de Magento
/api/magento/rest/*Proxy para la API REST de Magento

GraphQL de Magento​

Consulta de Carrito​

query CartQuery($cartId: String!) {
cart(cart_id: $cartId) {
id
items {
id
product {
name
sku
}
quantity
prices {
price {
value
currency
}
}
}
prices {
grand_total {
value
currency
}
}
}
}

Ejemplo de Solicitud​

const response = await requestMagento({
query: CART_QUERY,
variables: { cartId: 'abc123' },
signal: abortController.signal
});

Respuesta​

{
"data": {
"cart": {
"id": "abc123",
"items": [
{
"id": "123",
"product": {
"name": "Producto Ejemplo",
"sku": "SKU123"
},
"quantity": 1,
"prices": {
"price": {
"value": 299.99,
"currency": "MXN"
}
}
}
],
"prices": {
"grand_total": {
"value": 299.99,
"currency": "MXN"
}
}
}
}
}

Gestión de Sesiones y Cookies​

Dado que se utilizan ambos frontends a la vez (Magento / Headless) dependiendo de la página, no es posible utilizar solo las apis REST de magento, por lo que se hace uso de las cookies de sesión generadas por magento, esto causa que tener 2 dominios diferentes no puedan compartir cookies.

El proxy de Magento (/api/magento/graphql/index.js) maneja automáticamente el traspaso de cookies de sesión entre el cliente y Magento. Las sesiones se mantienen con la cookie PHPSESSID que es modificada para funcionar en el dominio del frontend.

En modo producción no es necesario, ya que cloudflare se encarga de manejar el balanceo de cargas utilizando el mismo nombre de dominio.

API de Directus​

Endpoints Principales​

EndpointDescripción
${DIRECTUS_URL}/graphqlEndpoint GraphQL de Directus
${DIRECTUS_URL}/assets/:idAcceso a activos (imágenes, etc.)

Ejemplo de Consulta GraphQL​

query LandingPage($status: String = "published") {
landing_page(filter: {
status: {_eq: $status}
}, limit: 100) {
slug
}
}

Ejemplo de Uso​

const tagPromotions = await directusGraphql({
query: TagPromotions,
variables: {
status: DirectusStatusType.published,
}
});

API de Typesense​

Métodos Principales​

MétodoDescripción
TypesenseService.searchBúsqueda general en el índice
TypesenseService.searchBySkusBúsqueda por SKUs específicos
TypesenseService.searchBySkuBúsqueda por un solo SKU
TypesenseService.getBestSellersObtiene productos más vendidos

Ejemplo de Uso​

const product = await TypesenseService.searchBySku({
sku: 'SKU123',
indexName: 'products',
attributesToRetrieve: ['name', 'price', 'image_url']
});

Limitaciones Conocidas​

  1. Proxies y CORS: En desarrollo, todas las solicitudes a Magento deben pasar por el proxy para evitar problemas de CORS.
  2. Manejo de Sesiones: Las sesiones de Magento están vinculadas a cookies que deben ser gestionadas correctamente.
  3. Cache de GraphQL: Algunas consultas GraphQL pueden ser cacheadas para mejorar el rendimiento.