Interfejs Calendar API zwraca 2 poziomy informacji o błędach:
- Kody i komunikaty o błędach HTTP w nagłówku
- Obiekt JSON w ciele odpowiedzi z dodatkowymi szczegółami, które mogą pomóc w określeniu sposobu postępowania z błędem.
W pozostałej części tej strony znajdziesz informacje o błędach w Kalendarzu oraz wskazówki dotyczące ich obsługi w aplikacji.
Wdrażanie wzrastającego czasu do ponowienia
W dokumentacji interfejsów API w chmurze znajdziesz dobre wyjaśnienie ujemnego wykładniczego wygładzania i sposobu jego stosowania w interfejsach API Google.
Błędy i sugerowane działania
Ta sekcja zawiera pełny zapis w formacie JSON każdego z wymienionych błędów oraz sugerowane działania, które możesz podjąć, aby go naprawić.
400: Nieprawidłowe żądanie
Błąd użytkownika. Może to oznaczać, że nie zostało podane wymagane pole lub parametr, podana wartość jest nieprawidłowa albo nieprawidłowa jest kombinacja podanych pól.
{
"error": {
"errors": [
{
"domain": "calendar",
"reason": "timeRangeEmpty",
"message": "The specified time range is empty.",
"locationType": "parameter",
"location": "timeMax",
}
],
"code": 400,
"message": "The specified time range is empty."
}
}
Sugerowane działanie: ponieważ jest to błąd trwały, nie próbuj ponownie. Zamiast tego przeczytaj komunikat o błędzie i odpowiednio zmień prośbę.
401: Nieprawidłowe dane logowania
Nieprawidłowy nagłówek autoryzacji. Używany token dostępu wygasł lub jest nieprawidłowy.
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization",
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
Sugerowane działania:
- Uzyskaj nowy token dostępu, używając długotrwałego tokena odświeżania.
- Jeśli to nie zadziała, przeprowadź użytkownika przez proces OAuth, jak opisano w artykule Autoryzowanie żądań za pomocą protokołu OAuth 2.0.
- Jeśli widzisz ten komunikat na koncie usługi, sprawdź, czy wszystkie czynności opisane na stronie konta usługi zostały wykonane.
403: Przekroczony limit częstotliwości
Osiągnięto jeden z limitów określonych w Konsoli Play.
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "userRateLimitExceeded",
"message": "User Rate Limit Exceeded"
}
],
"code": 403,
"message": "User Rate Limit Exceeded"
}
}
Sugerowane działania:
- Upewnij się, że Twoja aplikacja jest zgodna ze sprawdzonymi metodami dotyczącymi zarządzania limitami.
- Zwiększ limit na użytkownika w projekcie w Konsoli programisty.
- Jeśli jeden użytkownik wysyła dużo żądań w imieniu wielu użytkowników konta Google Workspace, rozważ użycie konta usługi z upoważnieniem na całą domenę i ustawienie parametru
quotaUser
. - Używaj wzrastającego czasu do ponowienia.
403: Przekroczono limit częstotliwości
Użytkownik osiągnął maksymalną częstotliwość żądań interfejsu Google Calendar API na kalendarz lub na uwierzytelnionego użytkownika.
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "rateLimitExceeded",
"message": "Rate Limit Exceeded"
}
],
"code": 403,
"message": "Rate Limit Exceeded"
}
}
Sugerowane działanie: błędy rateLimitExceeded
mogą zwracać kody błędów 403 lub 429. Obecnie są one pod względem funkcjonalności podobne i należy na nie odpowiadać w taki sam sposób, używając wykładniczego zmniejszania.
Dodatkowo sprawdź, czy aplikacja jest zgodna ze sprawdzonymi metodami dotyczącymi zarządzania limitami.
403: Przekroczono limity korzystania z Kalendarza
Użytkownik osiągnął jeden z limitów Kalendarza Google, który ma chronić użytkowników i infrastrukturę Google przed nadużyciami.
{
"error": {
"errors": [
{
"domain": "usageLimits",
"message": "Calendar usage limits exceeded.",
"reason": "quotaExceeded"
}
],
"code": 403,
"message": "Calendar usage limits exceeded."
}
}
Sugerowane działania:
- Więcej informacji o limitach korzystania z Kalendarza znajdziesz w Centrum pomocy Google Workspace dla administratorów.
403: dostęp zabroniony dla osób, które nie są organizatorami
Prośba o zaktualizowanie wydarzenia próbuje ustawić jedną z udostępnionych właściwości wydarzenia w kopii, która nie należy do organizatora. Właściwości współdzielone (na przykład guestsCanInviteOthers
, guestsCanModify
lub guestsCanSeeOtherGuests
) może ustawiać tylko organizator.
{
"error": {
"errors": [
{
"domain": "calendar",
"reason": "forbiddenForNonOrganizer",
"message": "Shared properties can only be changed by the organizer of the event."
}
],
"code": 403,
"message": "Shared properties can only be changed by the organizer of the event."
}
}
Sugerowane działania:
- Jeśli używasz wywołania Zdarzenia: wstaw, Zdarzenia: importuj lub Zdarzenia: aktualizuj, a Twoje żądanie nie zawiera żadnych właściwości współdzielonych, jest to równoznaczne z próbą ustawienia ich domyślnych wartości. Zamiast tego użyj kolumny Zdarzenia: poprawka.
- Jeśli Twoja prośba zawiera właściwości wspólne, upewnij się, że próbujesz zmienić tylko te właściwości, jeśli aktualizujesz kopię organizatora.
404: nie znaleziono
Nie znaleziono podanego zasobu. Może się tak zdarzyć w kilku przypadkach. Oto przykłady:
- gdy żądany zasób (z podanym identyfikatorem) nigdy nie istniał;
podczas otwierania kalendarza, do którego użytkownik nie ma dostępu
{ "error": { "errors": [ { "domain": "global", "reason": "notFound", "message": "Not Found" } ], "code": 404, "message": "Not Found" } }
Sugerowane działanie: użyj wzrastającego czasu do ponowienia.
409: żądany identyfikator już istnieje
instancja o podanym identyfikatorze już istnieje w magazynie;
{
"error": {
"errors": [
{
"domain": "global",
"reason": "duplicate",
"message": "The requested identifier already exists."
}
],
"code": 409,
"message": "The requested identifier already exists."
}
}
Sugestie dotyczące działania: wygeneruj nowy identyfikator, jeśli chcesz utworzyć nową instancję, w przeciwnym razie użyj wywołania metody update.
409: Konflikt
Element zbiorczy w ramach operacji events.batch
nie może zostać wykonany z powodu konfliktu operacyjnego z innymi żądanymi elementami zbiorczymi.
{
"error": {
"errors": [
{
"domain": "global",
"reason": "conflict",
"message": "Conflict"
}
],
"code": 409,
"message": "Conflict"
}
}
Sugerowane działanie: wyklucz wszystkie ukończone i zdecydowanie nieudane elementy zbiorcze, a następnie ponownie przeprowadź próbę z pozostałymi elementami w innym pliku events.batch
lub w odpowiednich operacjach pojedynczego zdarzenia.
410: Już nie istnieje
Parametry syncToken
lub updatedMin
nie są już prawidłowe. Ten błąd może też wystąpić, jeśli żądanie próbuje usunąć zdarzenie, które zostało już usunięte.
{
"error": {
"errors": [
{
"domain": "calendar",
"reason": "fullSyncRequired",
"message": "Sync token is no longer valid, a full sync is required.",
"locationType": "parameter",
"location": "syncToken",
}
],
"code": 410,
"message": "Sync token is no longer valid, a full sync is required."
}
}
lub
{
"error": {
"errors": [
{
"domain": "calendar",
"reason": "updatedMinTooLongAgo",
"message": "The requested minimum modification time lies too far in the past.",
"locationType": "parameter",
"location": "updatedMin",
}
],
"code": 410,
"message": "The requested minimum modification time lies too far in the past."
}
}
lub
{
"error": {
"errors": [
{
"domain": "global",
"reason": "deleted",
"message": "Resource has been deleted"
}
],
"code": 410,
"message": "Resource has been deleted"
}
}
Sugerowane działanie: w przypadku parametrów syncToken
lub updatedMin
wyczyść pamięć podręczną i ponownie zsynchronizuj. Więcej informacji znajdziesz w artykule Efektywne synchronizowanie zasobów.
W przypadku już usuniętych zdarzeń nie musisz wykonywać żadnych dodatkowych czynności.
412: Nie spełniono warunku wstępnego
Etag podany w nagłówku If-Match nie odpowiada już aktualnemu etagowi zasobu.
{
"error": {
"errors": [
{
"domain": "global",
"reason": "conditionNotMet",
"message": "Precondition Failed",
"locationType": "header",
"location": "If-Match",
}
],
"code": 412,
"message": "Precondition Failed"
}
}
Sugerowane działanie: ponownie pobierz element i zastosuj zmiany. Więcej informacji znajdziesz w artykule Pobieranie określonych wersji zasobów.
429: Zbyt wiele żądań
Błąd rateLimitExceeded
występuje, gdy użytkownik wysyła zbyt wiele żądań w danym przedziale czasu.
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "rateLimitExceeded",
"message": "Rate Limit Exceeded"
}
],
"code": 429,
"message": "Rate Limit Exceeded"
}
}
Sugerowane działanie: błędy rateLimitExceeded
mogą zwracać kody błędów 403 lub 429. Obecnie są one pod względem funkcjonalności podobne i należy na nie odpowiadać w taki sam sposób, korzystając z wykładniczego zmniejszania.
Dodatkowo sprawdź, czy aplikacja jest zgodna ze sprawdzonymi metodami dotyczącymi zarządzania limitami.
500: błąd backendu
Podczas przetwarzania żądania wystąpił nieoczekiwany błąd.
{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "Backend Error",
}
],
"code": 500,
"message": "Backend Error"
}
}
Sugerowane działanie: użyj wzrastającego czasu do ponowienia.