Інтеграція Vendure GraphQL API з фронтендом

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Інтеграція Vendure GraphQL API з фронтендом
Середня
~5 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Інтеграція Vendure GraphQL API з фронтендом

Vendure надає два окремих GraphQL endpoint: Shop API (/shop-api) для покупців та Admin API (/admin-api) для адміністраторів. Фронтенд використовує тільки Shop API. Аутентифікація через cookie-based сесії або Bearer token, вибір робиться на рівні конфігу сервера.

Налаштування клієнта (urql)

urql легше Apollo та краще підходить для Vendure — менше boilerplate при роботі з cookie-сесіями:

// lib/vendureClient.ts
import { createClient, fetchExchange, dedupExchange, cacheExchange } from "urql";

export const shopClient = createClient({
  url: `${process.env.NEXT_PUBLIC_VENDURE_API_URL}/shop-api`,
  exchanges: [dedupExchange, cacheExchange, fetchExchange],
  fetchOptions: {
    credentials: "include", // cookie-based auth
    headers: { "vendure-token": process.env.NEXT_PUBLIC_CHANNEL_TOKEN! },
  },
});

Генерація типів

# codegen.yml
schema:
  - ${VENDURE_API_URL}/shop-api:
      headers:
        vendure-token: ${CHANNEL_TOKEN}

documents: "src/**/*.graphql"

generates:
  src/generated/shop-types.ts:
    plugins:
      - typescript
      - typescript-operations
      - typescript-urql
    config:
      withHooks: true
VENDURE_API_URL=http://localhost:3000 CHANNEL_TOKEN=my-token npx graphql-codegen

Запити каталогу

query GetProductList($options: ProductListOptions) {
  products(options: $options) {
    totalItems
    items {
      id
      name
      slug
      variants {
        id
        priceWithTax
        stockLevel
      }
    }
  }
}

Checkout flow

// hooks/useCheckout.ts
export function useCheckout() {
  const [, setAddress] = useMutation(SetShippingAddressDocument);
  const [, setShipping] = useMutation(SetShippingMethodDocument);
  const [, addPayment] = useMutation(AddPaymentToOrderDocument);

  async function completeCheckout(params: CheckoutParams) {
    // 1. Адреса
    const addr = await setAddress({ input: params.address });

    // 2. Метод доставки
    await setShipping({ id: [params.shippingMethodId] });

    // 3. Додати платіж
    const payment = await addPayment({
      input: { method: "yookassa", metadata: { returnUrl: window.location.origin } },
    });

    return payment.data?.addPaymentToOrder;
  }

  return { completeCheckout };
}

SSR з Next.js

// app/shop/page.tsx
import { createServerClient } from "@/lib/vendureServerClient";

export default async function ShopPage() {
  const client = createServerClient();
  const result = await client.query(GetProductListDocument, {
    options: { take: 24 },
  }).toPromise();

  return <ProductGrid initialData={result.data} />;
}

Терміни: Налаштування Vendure клієнта, генерація схеми, інтеграція каталогу, checkout — 3–5 робочих днів. Інтеграція платежів, доставка, панель адміністратора — +3–4 дні.