Настройка Magento 2 REST/GraphQL API

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка Magento 2 REST/GraphQL API
Сложная
~3-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

Настройка Magento 2 REST/GraphQL API

Magento 2 имеет мощный API из коробки. REST API охватывает все сущности: товары, заказы, клиентов, корзины. GraphQL API (Magento 2.3+) — для фронтенда и PWA. Оба требуют настройки аутентификации и понимания структуры ресурсов.

REST API: аутентификация

Token-based (клиент/пользователь):

# Получить токен администратора
curl -X POST https://shop.com/rest/V1/integration/admin/token \
    -H "Content-Type: application/json" \
    -d '{"username": "admin", "password": "admin_pass"}'
# Ответ: "abc123token..."

# Получить токен клиента
curl -X POST https://shop.com/rest/V1/integration/customer/token \
    -H "Content-Type: application/json" \
    -d '{"username": "[email protected]", "password": "pass"}'

OAuth 1.0a (для интеграций): Магазин → System → Integrations → Add New Integration → Resource Access: выбрать нужные ресурсы → получить Consumer Key/Secret, Access Token/Secret.

REST API: работа с товарами

# Получить список товаров с фильтрацией
curl -X GET "https://shop.com/rest/V1/products?searchCriteria[filter_groups][0][filters][0][field]=price&searchCriteria[filter_groups][0][filters][0][value]=100&searchCriteria[filter_groups][0][filters][0][condition_type]=gt&searchCriteria[pageSize]=20" \
    -H "Authorization: Bearer ADMIN_TOKEN"

# Создать товар
curl -X POST https://shop.com/rest/V1/products \
    -H "Authorization: Bearer ADMIN_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
        "product": {
            "sku": "LAPTOP-001",
            "name": "Ноутбук 15",
            "price": 75000,
            "status": 1,
            "type_id": "simple",
            "attribute_set_id": 4,
            "custom_attributes": [
                {"attribute_code": "description", "value": "<p>Описание</p>"},
                {"attribute_code": "short_description", "value": "Краткое описание"}
            ]
        }
    }'

# Обновить остаток
curl -X PUT "https://shop.com/rest/V1/products/LAPTOP-001/stockItems/1" \
    -H "Authorization: Bearer ADMIN_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"stockItem": {"qty": 50, "is_in_stock": true}}'

REST API: заказы

# Список заказов
curl "https://shop.com/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=status&searchCriteria[filter_groups][0][filters][0][value]=pending" \
    -H "Authorization: Bearer ADMIN_TOKEN"

# Изменить статус заказа
curl -X POST "https://shop.com/rest/V1/orders/123/comments" \
    -H "Authorization: Bearer ADMIN_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"statusHistory": {"comment": "Заказ отгружен", "is_customer_notified": 1, "is_visible_on_front": 1, "status": "complete"}}'

GraphQL API

GraphQL API Magento 2 оптимизирован для PWA/headless-фронтендов:

# Поиск товаров
query SearchProducts($search: String!, $pageSize: Int) {
    products(search: $search, pageSize: $pageSize) {
        total_count
        items {
            id
            sku
            name
            price_range {
                minimum_price {
                    regular_price { value currency }
                    final_price { value currency }
                }
            }
            image { url label }
            ... on ConfigurableProduct {
                configurable_options {
                    label
                    values { label value_index }
                }
            }
        }
    }
}

# Корзина
mutation CreateCart {
    createGuestCart
}

mutation AddToCart($cartId: String!, $sku: String!, $qty: Float!) {
    addSimpleProductsToCart(input: {
        cart_id: $cartId
        cart_items: [{
            data: { sku: $sku, quantity: $qty }
        }]
    }) {
        cart {
            items { id quantity product { sku name } prices { price { value } } }
            prices { grand_total { value currency } }
        }
    }
}

Кастомный REST API модуль

// Api/ProductStatsInterface.php
interface ProductStatsInterface {
    public function getStats(string $sku): array;
}

// registration.php + module.xml ...

// Model/ProductStats.php
class ProductStats implements ProductStatsInterface {
    public function __construct(
        private readonly ProductRepositoryInterface $productRepository,
        private readonly StockRegistryInterface $stockRegistry
    ) {}

    public function getStats(string $sku): array {
        $product = $this->productRepository->get($sku);
        $stock   = $this->stockRegistry->getStockItemBySku($sku);

        return [
            'sku'      => $sku,
            'name'     => $product->getName(),
            'price'    => $product->getFinalPrice(),
            'qty'      => $stock->getQty(),
            'in_stock' => $stock->getIsInStock(),
        ];
    }
}

// etc/webapi.xml
// <route url="/V1/products/:sku/stats" method="GET">
//   <service class="Vendor\Module\Api\ProductStatsInterface" method="getStats"/>
//   <resources><resource ref="Magento_Catalog::products"/></resources>
// </route>

Rate Limiting и производительность

Magento REST API без кэша нагружает сервер. Рекомендации:

  • Включить Varnish перед Magento (Full Page Cache)
  • Для публичных эндпоинтов — Nginx-кэш на уровне location
  • Использовать Async REST API (POST /async/V1/products) для массовых обновлений

Сроки

Настройка OAuth-интеграции + 5–10 REST-эндпоинтов — 5–7 дней. Разработка кастомного GraphQL-модуля — плюс 3–5 дней.