Como consumir dados via API Pública
🔍 Preview
O Store Theme consome dados diretamente da API Pública.
Você pode fazer isso de duas formas:
- ✅ Usando o public-sdk (recomendado)
- ⚙️ Fazendo chamadas diretas (menos comum)
- Persistência de dados
- Integração com tracking (GA4)
- Padronização
- Suporte de tipagem da API em Typescript
- Evita múltiplas refs
- Mantém tipagem centralizada e automatizada
- Permite paralelismo com Promise.all
- Facilita manutenção
ApiTracking- Retorna os dados
- Não envia eventos de analytics
- Informações irrelevantes para mensuração da jornada do cliente
- Dados que não representam interação ou visualização relevante do cliente
- Retorna os dados
- Dispara eventos automaticamente no dataLayer
- Alimenta o tracking da loja
- acompanhar performance
- medir impacto visual
- analisar comportamento do cliente
- https://developers.google.com/analytics/devguides/collection/ga4/reference/events?hl=pt-br&client_type=gtag#view_promotion
- https://developers.google.com/analytics/devguides/collection/ga4/reference/events
- event:
view_promotion - promotion_id
- promotion_name
- creative_name
- creative_slot
- index
- Qual banner foi visto
- Em qual contexto
- Tipagens oficiais da API escritas em TypeScript
- Integração automática com eventos de tracking (GA4)
- Configuração nativa de persistência de dados entre Store Theme, Checkout e Área Restrita
O public-sdk já resolve:
🔌Forma simples: usando o public-sdk
A forma mais simples é consumir dados utilizando o módulo Api.
🎯 Exemplo simples (sem tracking)
1import { onMounted, ref } from 'vue';23import { Api } from '@uappi/public-sdk';4import type { Banners } from '@uappi/public-sdk/modules/Api/types';56const bannersData = ref<Banners | null>(null);78onMounted(async () => {9 bannersData.value = await Api.customization10 .listBanners('my-banner')11 .catch(() => null);12});📊 Com tracking automático (GA4)
Se o dado impacta experiência ou jornada do cliente e precise mensurar essas informações pelo Google Analytics, utilize Tracking.
Isso mantém sua loja enviando eventos automaticamente.
1import { Tracking } from '@uappi/public-sdk';2import { onMounted, ref } from 'vue';3import type { Banners } from '@uappi/public-sdk/modules/Api/types';45const bannersData = ref<Banners | null>(null);67onMounted(async () => {8 bannersData.value = await Tracking.customization9 .listBanners('my-banner')10 .catch(() => null);11});📌 A diferença aqui é:
| Método | Quando usar |
|---|---|
Api | Apenas consumo de dados |
Tracking | Dados que fazem parte da jornada do cliente |
🚀 Múltiplas requisições (padrão recomendado)
Em páginas reais como a Home, é comum precisar de vários dados ao mesmo tempo.
Criar várias ref() manualmente não escala.
Para isso use useAsyncData para centralizar dos dados.
1src/core/composables/useAsyncData🧠 Exemplo utilizando useAsyncData
1import { onMounted, computed } from 'vue';2import { Api } from '@uappi/public-sdk';3import { Tracking } from '@uappi/public-sdk';4import type { Banners } from '@uappi/public-sdk/modules/Api/types';56const { data: pageContent, execute } = useAsyncData(async () => {7 const [8 homeBannersData,9 homeShowcaseData,10 homeMenusData,11 homeBrandsData,12 storeReviewRes,13 ] = await Promise.all([14 Tracking.customization15 .listBanners([16 'main-banner',17 'home-triple-grid-banner',18 'home-pitchbar',19 'home-main-categories',20 'home-check-banner',21 'home-institutional-section',22 'home-triple-grid-banner-two',23 'home-blog'24 ])25 .catch(() => []),2627 Tracking.customization28 .listShowcase(['home-showcase-one'], {29 fields: ['media', 'mainUrl', 'status', 'review'],30 })31 .catch(() => []),3233 Api.customization34 .listMenu([35 'home-showcase-one-link',36 'home-showcase-with-navigation',37 'home-showcase-filter',38 ])39 .catch(() => []),4041 Api.product.listBrands().catch(() => false),42 Api.customer.listStoreReview().catch(() => false),43 ]);4445 return {46 homeBannersData,47 homeShowcaseData,48 homeMenusData,49 homeBrandsData,50 storeReviewRes,51 };52});5354onMounted(async () => {55 await execute();56});Com os dados centralizados, você pode expor apenas o que cada componente precisa:
1const mainBannerData = computed(() => {2 return pageContent.value?.homeBannersData.find(3 banner => banner.code === 'main-banner'4 ) as Banners | undefined;5});67const showcaseOneData = computed(() => {8 return pageContent.value?.homeShowcaseData.find(9 showcase => showcase.code === 'home-showcase-one'10 );11});Por que utilizar o useAsyncData
🔎 Quando usar Api vs Tracking
O public-sdk disponibiliza dois modos de consumo de dados:
Ambos retornam os mesmos dados da API Pública. A diferença está no envio automático de eventos de comportamento do cliente.
📡 Api
Use quando deseja apenas consumir dados da loja.
1Api.customization.listBanners('main-banner')Ideal para:
📊 Tracking
Use quando o conteúdo exibido representa interação relevante na jornada do cliente.
1Tracking.customization.listBanners('main-banner')🎯 Por que isso existe?
Na plataforma Uappi, o tracking é baseado no modelo de eventos do GA4 (Google Analytics 4).
É uma boa prática enviar informações de visualização para que o time de mídia possa:
🧩 Exemplo prático: Banner
Ao utilizar:
1Tracking.customization.listBanners('main-banner')Além de buscar os dados do banner, o SDK envia automaticamente o evento view_promotion
Esse é um evento padrão do GA4 utilizado para registrar a visualização de promoções.
Referência oficial do evento:
Referência geral de eventos GA4:
👀 Como esse evento aparece na prática?
Quando o Tracking é utilizado, o evento é enviado ao dataLayer da página.
Exemplo real de visualização:
Essas informações permitem que ferramentas de análise identifiquem:
⚠️ Uso sem o Public SDK
É possível consumir os dados da API Pública utilizando diretamente bibliotecas como o axios.
Essa abordagem funciona e pode ser adotada em cenários específicos.
No entanto, ao optar por não utilizar o public-sdk, você deixará de contar com recursos importantes fornecidos pela plataforma:
Isso significa que toda essa responsabilidade passará a ser do próprio projeto.
Por esse motivo, recomendamos o uso do public-sdk sempre que possível, garantindo padronização, rastreabilidade e compatibilidade com o ecossistema da plataforma Uappi.
🏁 Próximo passo
Agora que você sabe como consumir dados, entenda como funciona a persistencia de dados no Store Theme.
Persistência de dados Store Theme: como funciona por baixo dos panos