🎯 Цель: Этот раздел содержит готовые примеры интеграции OZON Seller API SDK с популярными JavaScript/TypeScript фреймворками и платформами.
⚛️Next.js + React
Современный React фреймворк с поддержкой SSR, API Routes и статической генерации
// lib/ozon-client.ts
import { OzonSellerAPI } from 'daytona-ozon-seller-api';
export const ozonApi = new OzonSellerAPI({
clientId: process.env.OZON_CLIENT_ID!,
apiKey: process.env.OZON_API_KEY!,
timeout: 30000,
debug: process.env.NODE_ENV === 'development'
});
// pages/api/products.ts
import type { NextApiRequest, NextApiResponse } from 'next';
import { ozonApi } from '../../lib/ozon-client';
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
if (req.method === 'GET') {
try {
const products = await ozonApi.product.getList({
limit: 20
});
res.status(200).json(products);
} catch (error) {
res.status(500).json({ error: error.message });
}
}
}
// hooks/useProducts.ts
import { useState, useEffect } from 'react';
export function useProducts() {
const [products, setProducts] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch('/api/products')
.then(res => res.json())
.then(setProducts)
.finally(() => setLoading(false));
}, []);
return { products, loading };
}
🚀Express.js
Минималистичный веб-фреймворк для Node.js с поддержкой middleware и роутинга
// server.js
import express from 'express';
import { OzonSellerAPI } from 'daytona-ozon-seller-api';
const app = express();
const ozonApi = new OzonSellerAPI({
clientId: process.env.OZON_CLIENT_ID,
apiKey: process.env.OZON_API_KEY
});
// Middleware
app.use(express.json());
// Routes
app.get('/api/products', async (req, res) => {
try {
const products = await ozonApi.product.getList({
limit: parseInt(req.query.limit) || 20
});
res.json(products);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
🏗️NestJS
Enterprise Node.js фреймворк с TypeScript, декораторами и dependency injection
// ozon.service.ts
import { Injectable } from '@nestjs/common';
import { OzonSellerAPI } from 'daytona-ozon-seller-api';
@Injectable()
export class OzonService {
private readonly api: OzonSellerAPI;
constructor() {
this.api = new OzonSellerAPI({
clientId: process.env.OZON_CLIENT_ID,
apiKey: process.env.OZON_API_KEY
});
}
async getProducts(limit: number = 20) {
return await this.api.product.getList({ limit });
}
async updatePrices(priceUpdates: PriceUpdate[]) {
return await this.api.pricesStocks.updatePrices(priceUpdates);
}
}
💚Vue.js + Nuxt
Прогрессивный фреймворк для создания пользовательских интерфейсов
// composables/useOzon.ts
import { OzonSellerAPI } from 'daytona-ozon-seller-api';
export const useOzon = () => {
const config = useRuntimeConfig();
const api = new OzonSellerAPI({
clientId: config.ozonClientId,
apiKey: config.ozonApiKey
});
const products = ref([]);
const loading = ref(false);
const fetchProducts = async () => {
loading.value = true;
try {
const result = await api.product.getList({ limit: 20 });
products.value = result.result?.items || [];
} finally {
loading.value = false;
}
};
return {
products: readonly(products),
loading: readonly(loading),
fetchProducts
};
};
☁️AWS Lambda
Serverless функции для обработки событий и создания API без управления серверами
// lambda/products.js
import { OzonSellerAPI } from 'daytona-ozon-seller-api';
// Initialize outside handler for connection reuse
const ozonApi = new OzonSellerAPI({
clientId: process.env.OZON_CLIENT_ID,
apiKey: process.env.OZON_API_KEY,
timeout: 25000 // Lambda timeout - 5s
});
export const handler = async (event, context) => {
try {
const { limit = 20 } = JSON.parse(event.body || '{}');
const products = await ozonApi.product.getList({ limit });
return {
statusCode: 200,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
},
body: JSON.stringify(products)
};
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({ error: error.message })
};
}
};
🐳Docker
Контейнеризация приложений для изоляции и портируемости
# Dockerfile
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:18-alpine
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY --chown=nextjs:nodejs . .
USER nextjs
EXPOSE 3000
ENV NODE_ENV=production
CMD ["npm", "start"]
🎯 Рекомендации по выбору
⚠️ Важные моменты
- Переменные окружения: Никогда не храните API ключи в коде
- Rate limiting: Соблюдайте лимиты OZON API (1000 запросов/мин)
- Error handling: Всегда обрабатывайте ошибки API
- Timeout: Устанавливайте разумные таймауты запросов