Dlaczego ograniczanie szybkości na podstawie złożoności?
Tradycyjne interfejsy API REST używają ograniczania szybkości na podstawie liczby żądań, gdzie każde żądanie zużywa takie same kredyty, niezależnie od tego, czy pobierasz jedno pole czy setki, czy odczytujesz czy modyfikujesz dane — pomimo znacznej różnicy w obciążeniu serwera.
Podejście GraphQL oparte na złożoności zapytań rozwiązuje ten problem, obliczając koszty na podstawie faktycznie żądanych danych i wykonywanych operacji. To daje Ci większą elastyczność w żądaniu potrzebnych informacji, jednocześnie zapewniając przewidywalne obciążenie serwera.
Limit szybkości
Zonos używa systemu opartego na punktach, gdzie każde zapytanie odejmuje punkty na podstawie jego złożoności. Masz pulę dostępnych punktów, które:
- Są uzupełniane z szybkością 3 000 punktów na sekundę (30 000 punktów na 10 sekund)
- Mają maksymalną pojemność 300 000 punktów
To pozwala Ci na okazjonalne skoki liczby złożonych zapytań przy jednoczesnym utrzymaniu zrównoważonego tempa żądań.
Jak obliczany jest koszt zapytania
Każde żądanie GraphQL ma koszt obliczony przed wykonaniem:
Koszty podstawowe
- Query: 5 punktów
- Mutation: 10 punktów
- Object: 1 punkt na zwrócony obiekt
- Scalar fields: 0 punktów (bezpłatnie)
Pola skalarne takie jak ciągi znaków, liczby całkowite, identyfikatory i wartości logiczne nie zwiększają kosztu. Płacisz tylko za operację podstawową i zwrócone obiekty.
Przykład: Proste zapytanie
query { landedCost(id: "123") { id createdBy shipToCountry }}Podział kosztów: 5 (podstawowe zapytanie) + 1 (obiekt kosztu dostawy) = 6 punktów
Pola skalarne (id, name, currency) są bezpłatne.
Przykład: Zapytanie z wieloma obiektami
{ orders(first: 10, filter: { status: COMPLETED }) { edges { cursor node { id } } }}Podział kosztów: 5 (podstawowe zapytanie) + 10 (10 zamówień × 1 punkt każde) = 15 punktów
Przykład: Mutacja
mutation { landedCostCalculate(input: { ... }) { id }}Podział kosztów: 10 (mutacja podstawowa) + około 50 (zwrócone obiekty) = 60 punktów
Typowe obliczenie kosztu dostawy kosztuje około 60 punktów w złożoności.
Wyświetlanie złożoności zapytania
Każda odpowiedź API zawiera nagłówek zonos-query-complexity pokazujący koszt Twojego zapytania:
zonos-query-complexity: 58Ten nagłówek mówi Ci dokładnie ile punktów zapytanie zużyło. Użyj go do monitorowania użytkowania API i optymalizacji kosztownych zapytań.
Obsługa limitów szybkości
Jeśli przekroczysz limit szybkości, otrzymasz komunikat o błędzie. Aby efektywnie obsługiwać limity szybkości:
Monitoruj swoją złożoność
Sprawdź nagłówek zonos-query-complexity w odpowiedziach, aby zrozumieć koszty zapytań i zidentyfikować kosztowne wzorce.
Wdróż logikę ponowienia
Jeśli osiągniesz limity szybkości, wdróż logikę exponential backoff i ponowienia. Ponieważ pula punktów uzupełnia się z szybkością 3 000 punktów na sekundę, oblicz odpowiednie czasy oczekiwania na podstawie złożoności zapytania.
Grupuj efektywnie
GraphQL pozwala Ci na żądanie wielu zapytań w jednym żądaniu:
{ landedCost(id: "landed_cost_123") { id createdAt } order(orderId: "order_123") { id status createdAt }}Najlepsze praktyki
Żądaj tylko to, czego potrzebujesz
Złożoność zapytania jest proporcjonalna do danych, które żądasz. Strukturuj swoje zapytania, aby pobrać tylko pola i obiekty, które faktycznie będziesz używać.
query { order(orderId: "order_123") { id status createdAt updatedAt items { id name quantity amount } shipments { id } }}Paginacja dużych zbiorów danych
Kiedy żądasz wielu obiektów, używaj rozsądnych rozmiarów stron:
{ orders(first: 100, filter: { status: COMPLETED }) { edges { cursor node { id } } }}Żądaj 10-50 elementów na raz i przechodź przez wyniki w miarę potrzeby, zamiast żądać setek obiektów w jednym zapytaniu.
Unikaj niepotrzebnego zagnieżdżenia
Każdy zagnieżdżony obiekt zwiększa Twoją złożoność. Żądaj tylko zagnieżdżonych danych, gdy ich rzeczywiście potrzebujesz.
Ograniczanie szybkości GraphQL API
Dowiedz się, jak Zonos oblicza koszty zapytań na podstawie złożoności.
Zonos ogranicza żądania GraphQL API na podstawie złożoności zapytania, a nie liczby żądań. To zapewnia uczciwe użytkowanie, jednocześnie pozwalając Ci zażądać dokładnie potrzebnych danych.