Jak obsługiwać ograniczanie przepustowości interfejsu API

Dławienie żądań API jest typowym wyzwaniem podczas tworzenia aplikacji opartych na interfejsach API w chmurze. Poniżej przedstawiono techniki, których można użyć, aby sobie z tym poradzić:

  • Użyj ograniczania szybkości. Jeśli używany interfejs API obsługuje ograniczanie szybkości, użyj informacji o ograniczaniu szybkości wysyłanych przez interfejs API, aby upewnić się, że aplikacja nie przekracza limitów interfejsu API.
  • Obsługa nagłówków Retry-After. Niektóre interfejsy API wysyłają nagłówek Retry-After w odpowiedzi, gdy żądanie jest ograniczone szybkościowo. Jeśli Twoje żądania zostaną ograniczone, a odpowiedź ma nagłówek Retry-After, zaczekaj określony czas, zanim wyślesz kolejne żądanie.
  • Zaimplementuj wycofywanie wykładnicze. Jeśli używany interfejs API nie wysyła nagłówka Retry-After, zaimplementuj algorytm wykładniczego wycofywania z losowym jitterem. Po każdym żądaniu, które zakończyło się niepowodzeniem, odczekaj dwukrotnie dłużej, zanim spróbujesz ponownie, i zatrzymaj się po kilku próbach. Oczekiwanie dłużej pomaga zmniejszyć obciążenie interfejsu API i zwiększa prawdopodobieństwo pomyślnego zakończenia kolejnych żądań.
  • Dowiedz się, kiedy nie należy ponowić próby. Niektóre błędy typu throttling oznaczają, że wyczerpał się limit przydziału lub kredyty, na przykład OpenAI credit_balance_exhausted. Ponawianie ich nie pomoże, więc zatrzymaj się i poinformuj użytkownika.
  • Buforuj wcześniej odebrane dane. Buforuj odpowiedzi z interfejsu API, szczególnie w przypadku żądań, które prawdopodobnie będą zwracać te same dane. Buforowanie pomaga zmniejszyć liczbę wywołań do interfejsu API i pozostać w granicach limitu szybkości.
  • Kolejkuj żądania. Zaimplementuj kolejkę dla wychodzących żądań interfejsu API w celu zarządzania szybkością żądań i upewnij się, że limity szybkości interfejsu API nie zostały przekroczone.
  • Optymalizowanie wywołań interfejsu API. Pobierz tylko potrzebne dane i użyj żądań wsadowych, jeśli interfejs API je obsługuje. Optymalizacja pomaga zmniejszyć liczbę żądań i pozostać w granicach limitów liczby żądań.
  • Pokaż użytkownikowi, co się dzieje. „Zajęty, ponawianie próby w ciągu 5 sekund” jest lepsze niż wskaźnik ładowania, który nigdy się nie kończy.

Po zaimplementowaniu tych technik w aplikacji przetestuj, czy obsługuje ona prawidłowo dławienie. Logika ponawiania, której działania nigdy nie widziałeś, to logika ponawiania prób, co do której nie wiesz, czy działa. Aby zapoznać się z porównaniem sposobów jego testowania, zobacz Jak przetestować, czy aplikacja obsługuje ograniczanie przepustowości.

Wypróbuj ją w swojej aplikacji

Dev Proxy zwraca odpowiedzi o ograniczaniu przepustowości dla wybranych interfejsów API, podczas gdy aplikacja nadal wywołuje rzeczywiste adresy URL i informuje, kiedy aplikacja ponawia próbę, zanim upłynie czas Retry-After. Ustawienia wstępne są dostępne dla punktów końcowych GitHub (github-rate-limiting), OpenAI (openai-throttling), Anthropic (anthropic-throttling) i Microsoft Graph OneDrive i SharePoint (microsoft-graph-rate-limiting):

devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"

Aby zainstalować Dev Proxy, zobacz Konfigurowanie Dev Proxy.

Następny krok