Skip to main content

Як рахуються запити

Кожне виконане кореневе поле операції — це один виклик API. GraphQL-запит, що запитує чотири кореневі поля, тарифікується як чотири виклики API, так само як якби ви зробили чотири REST-запити. Аліаси на кореневому рівні рахуються окремо, тому що кожен із них запускає операцію. Вкладені поля, вибрані з типізованої відповіді, не додають викликів API.
Один HTTP-запит, чотири виклики API з квоти та rate limit вашого плану. Це зроблено навмисно, і це чесна модель: кожне кореневе поле виконує на нашому боці ту саму роботу, що й відповідний REST-виклик, тому й коштує так само. GraphQL заощаджує вам обміни запитами й відповідями та дає змогу отримати саме те, що потрібно, в одному місці; це не спосіб отримати більше викликів API, ніж передбачає ваш план. Практичні наслідки:
  • Наявні ліміти вашого плану застосовуються без змін. Див. ліміти API, щоб дізнатися, що передбачає ваш план.
  • Запит кореневої операції, яка вам не потрібна, коштує стільки ж, скільки її виклик через REST. Вибір потрібних вам вкладених полів відповіді не додає викликів.
  • Запит може потрапити під rate limit посеред виконання. Кореневі поля, які завершилися, зберігають свої дані, і лише обмежені кореневі поля повертають помилки — див. Частковий успіх.

Ліміти запитів

Ендпоінт застосовує кілька лімітів до структури та розміру запиту. Вони існують для того, щоб один запит не міг споживати надмірну частку наших ресурсів, і встановлені значно вище, ніж потрібно для звичайного використання: якщо ви впираєтеся в один із них, зазвичай це ознака випадково згенерованого запиту, а не реальної потреби. Відхилений запит повертає HTTP 400, якщо ви надсилаєте Accept: application/graphql-response+json, і HTTP 200 в іншому разі; в обох випадках із масивом errors і без data. Див. Помилки.

Викликів API на запит

Найважливіший ліміт. Один запит може ініціювати щонайбільше 5 викликів API, тож наведений вище приклад із чотирма кореневими полями підходить, а приклад із двадцятьма — ні. Щойно запущено п’ять викликів, додаткові кореневі поля повертають 429 з поясненням ліміту; поля, які вже було запущено, все одно можуть повернути свої дані. Якщо вам потрібно більше, розділіть запит на кілька запитів. Якщо ви регулярно робите це для легітимного навантаження, зв’яжіться з нами: ліміт навмисно консервативний для запуску, і підвищити його просто, тоді як зниження згодом зламало б інтеграції, тому він починається з малого.

Глибина, поля, аліаси та директиви

Вони перевіряються ще до виконання, тож перевищення будь-якого з них не коштує вам жодного виклику API. Вони також із запасом покривають повний запит інтроспекції, який має близько 180 полів і 12 рівнів глибини без аліасів і директив, тож клієнт, що отримує всю схему під час запуску, працює нормально.

Розмір тіла запиту

64 KB — це щедро для запиту і занадто мало для файлу. Саме тому медіа не можна завантажувати через GraphQL — підтримуваний спосіб описано в розділі Завантаження медіа.

Тайм-аути

Загалом на запит відводиться до 120 секунд. Кореневі поля в query можуть виконуватися паралельно, тож його тривалість зазвичай визначається найповільнішою залежністю. Кореневі поля в mutation виконуються послідовно, тож кілька повільних mutations можуть у сумі наблизитися до тайм-ауту. Будь-яка з форм усе одно може створити на бекенді навантаження до п’яти паралельних або послідовних викликів; за потреби розділяйте відомо повільну роботу.

Що не обмежується

  • Читання схеми. Інтроспекція не потребує автентифікації та не тарифікується. Переглядати, що є в API, безкоштовно; виконання операції — ні.
  • Некоректні запити. Запит, який GraphQL відхиляє (невідоме поле, неправильний тип, некоректне значення enum), ніколи не доходить до нашого API і ніколи не тарифікується.
Ці ліміти переглядаються з урахуванням реального використання. Якщо якийсь із них не підходить для легітимної інтеграції, повідомте нам: такий відгук корисніший, ніж обхідний шлях.