Co to jest ograniczanie szybkości?

Ograniczanie szybkości to mechanizm kontroli używany przez interfejsy API chmury do regulowania liczby żądań, które użytkownik może wykonać w określonym czasie. Producenci interfejsów API w chmurze używają ograniczania szybkości, aby upewnić się, że przepływ żądań nie przeciąża usługi. Ograniczanie szybkości ustawia limit szybkości i liczby wywołań interfejsu API. Limity szybkości są zwykle definiowane pod kątem liczby żądań w określonym czasie.

Dlaczego interfejsy API w chmurze używają ograniczania szybkości

  • Zapobiegaj przeciążeniu. Ograniczanie szybkości zapewnia, że serwer interfejsu API pozostaje stabilny i dynamiczny, uniemożliwiając każdemu jednemu użytkownikowi lub usłudze zalanie go zbyt wieloma żądaniami.
  • Zadbaj o sprawiedliwe użycie. Ograniczanie szybkości wymusza zasady sprawiedliwego użycia, zapewniając, że żaden pojedynczy użytkownik nie monopolizuje zasobów interfejsu API. Ograniczanie szybkości umożliwia sprawiedliwy dostęp do wszystkich użytkowników.
  • Zwiększ bezpieczeństwo. Ograniczanie szybkości pomaga w ograniczeniu ataków rozproszonej odmowy usługi i innych obraźliwych zachowań przez ograniczenie liczby żądań z potencjalnie złośliwych źródeł.
  • Zarządzanie kosztami. W przypadku dostawców usług w chmurze ograniczanie szybkości pomaga w zarządzaniu kosztami operacyjnymi, zapobiegając nieprzewidywalnemu lub nadmiernemu wykorzystaniu zasobów.
  • Zachowaj jakość usług. Ograniczanie szybkości zapewnia spójną jakość usług dla wszystkich użytkowników, uniemożliwiając skoki ruchu.

Jak występuje ograniczanie szybkości w aplikacjach

Podczas tworzenia aplikacji, które integrują interfejsy API w chmurze, sprawdź ich dokumentację, aby sprawdzić, czy obsługują one ograniczanie szybkości. Jeśli tak, otrzymasz RateLimit-... lub X-RateLimit-... nagłówki odpowiedzi z informacjami o limitach szybkości. Te informacje można użyć w aplikacji, aby upewnić się, że nie przekraczasz limitów szybkości interfejsu API. Na przykład RateLimit-Remaining nagłówek wskazuje liczbę żądań pozostałych w bieżącym oknie. Jeśli otrzymasz odpowiedź z tym nagłówkiem ustawionym na 0, wiesz, że osiągnięto limit liczby żądań i należy poczekać na następne okno przed wysłaniem kolejnego żądania. Nagłówek RateLimit-Reset wskazuje czas resetowania limitu szybkości. Niektóre API wysyłają RateLimit-... nagłówki dopiero po osiągnięciu progu. Przykładem jest, gdy masz 10% pozostałych żądań.

Po przekroczeniu limitu szybkości interfejs API ogranicza żądania i zwraca kod stanu HTTP 429 Too Many Requests . Niektóre interfejsy API mogą również wysyłać Retry-After nagłówek, aby wskazać, jak długo należy poczekać przed wysłaniem innego żądania. Nie każde API jest zgodne z tym wzorcem. GitHub, na przykład, może odpowiedzieć za pomocą 403 zamiast 429.

Aby uniknąć ograniczania przepustowości i upewnić się, że aplikacja pozostaje elastyczna, zaimplementuj ograniczanie szybkości w aplikacji. W zależności od stosu technologii różne biblioteki mogą pomóc w obsłudze ograniczania szybkości w aplikacji. Po zaimplementowaniu ograniczania szybkości w aplikacji przetestuj, aby sprawdzić, czy obsługuje ona prawidłowe ograniczanie szybkości.

Jak ograniczenie szybkości wpływa na aplikację?

Gdy interfejs API zacznie zwracać 429 odpowiedzi, aplikacja, która nie obsługuje takich odpowiedzi, ulega awarii, pokazuje ogólny błąd, ponawia próbę tak szybko, że pozostaje ograniczona lub po cichu gubi dane. Podczas opracowywania rzadko widzisz nic z tego, ponieważ interfejs API jest szybki, jesteś jedynym użytkownikiem, a dane testowe są małe.

Jak przetestować, czy aplikacja obsługuje limity szybkości

Approach Co znajdziesz Co tracisz
Poczekaj na produkcję Rzeczywiste limity żądań Wszystko, dopóki użytkownik tego nie kliknie
Mockuj interfejs API w testach lub pozwól agentowi kodowania napisać mock Czy gałąź ponawiania jest wykonywana Rzeczywiste kody stanu interfejsu API, nagłówki limitu żądań i treści błędów oraz zasady ponawiania prób zestawu SDK. Aplikacja wymaga również przełącznika tylko do testowania, aby połączyć się z mockiem.
Wywołuj rzeczywiste API, aż API zacznie ograniczać żądania Rzeczywiste zachowanie Nie możesz osiągnąć limitu od ręki, wykorzystujesz swój rzeczywisty przydział, a niektóre limity są resetowane dopiero po godzinie
Przechwytuj rzeczywisty ruch aplikacji i symuluj limit Rzeczywiste adresy URL, prawdziwy zestaw SDK i zasady ponawiania prób oraz własne nagłówki interfejsu API z wybranym limitem Twój kod w izolacji. Do tego służą testy jednostkowe.

Wypróbuj w aplikacji

Dev Proxy zlicza żądania aplikacji do wybranych interfejsów API, dodaje do odpowiedzi nagłówki limitu szybkości i zwraca 429, gdy aplikacja przekroczy limit, podczas gdy aplikacja nadal wywołuje rzeczywiste adresy URL. Informuje również, kiedy aplikacja ponownie wywołuje interfejs API przed zresetowaniem limitu.

Pobierz predefiniowaną konfigurację interfejsu API, który wywołuje Twoja aplikacja, i uruchom Dev Proxy przy jej użyciu:

devproxy config get github-rate-limiting
devproxy --config-file "~dataFolder/configs/github-rate-limiting/.devproxy/devproxyrc.json"

W przypadku wywołań Microsoft Graph do OneDrive i SharePoint (/drive, /shares, /sites) użyj wstępnego ustawienia microsoft-graph-rate-limiting. Aby ustawić własny limit dla dowolnego interfejsu API, zobacz Symulowanie odpowiedzi API dla limitu żądań. Aby zainstalować Dev Proxy, zobacz Konfigurowanie Dev Proxy.

Następne kroki