Налаштування 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 днів.