Na tej stronie opisujemy niektóre typowe komunikaty o błędach, problemy i możliwe działania w interfejsie Google Classroom API w przypadku tych rodzajów błędów:
- HTTP 400:
FAILED_PRECONDITION - HTTP 403:
PERMISSION_DENIED - HTTP 429:
RESOURCE_EXHAUSTED - HTTP 500:
INTERNAL
HTTP 400: FAILED_PRECONDITION
Błąd FAILED_PRECONDITION jest zwracany, gdy użytkownik próbuje wykonać działanie, na które nie można zezwolić, ponieważ użytkownik osiągnął limit lub stan aplikacji, np. CourseNotModifiable. Aby naprawić błąd FAILED_PRECONDITION, poproś użytkownika o wykonanie określonej czynności, a następnie ponów próbę. W niektórych przypadkach możesz też użyć alternatywnych punktów końcowych, aby naprawić stan w imieniu użytkownika.
AttachmentNotVisible
Błąd AttachmentNotVisible oznacza, że co najmniej 1 z określonych załączników jest niewidoczny dla użytkownika, nie jest żądanego typu lub nie istnieje. Na przykład ten błąd będzie zwracany w przypadku elementów na Dysku, które nie zostały udostępnione użytkownikowi.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, aby ponownie sprawdził identyfikatory, np. identyfikatory plików na Dysku. Upewnij się też, że użytkownik ma odpowiednie uprawnienia do wyświetlania załącznika.
CannotRemoveCourseFolderOwner
Błąd CannotRemoveCourseFolderOwner oznacza, że nie można usunąć właściciela folderu kursu na Dysku.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, aby przeniósł własność folderu kursu na Dysku na innego użytkownika i spróbował ponownie.
CannotRemoveCourseOwner
Błąd CannotRemoveCourseOwner oznacza, że nie można usunąć właściciela kursu.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, że nie można usunąć właściciela kursu. W większości przypadków użytkownik próbuje usunąć siebie, co jest niedozwolone.
CannotRemoveCourseOwnerTransferIncomplete
Błąd CannotRemoveCourseOwnerTransferIncomplete oznacza, że nie można usunąć właściciela kursu, ponieważ przenoszenie własności tych zajęć jest w toku.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, aby poczekał kilka minut na zakończenie asynchronicznego działania polegającego na przeniesieniu własności zajęć, a następnie spróbował ponownie.
CannotRemoveTeacherWithNoCourseOwner
Błąd CannotRemoveTeacherWithNoCourseOwner oznacza, że nie można usunąć nauczyciela z kursu, który nie ma właściciela.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, że nie można usunąć nauczyciela. W większości przypadków konto użytkownika będącego właścicielem kursu zostało usunięte, co spowodowało nieprawidłowy stan kursu.
CourseMemberLimitReached
Błąd CourseMemberLimitReached oznacza, że próba wykonania działania spowodowałaby przekroczenie maksymalnej dozwolonej liczby uczestników kursu. Ten kod jest zwykle zwracany przez
students.create()
Więcej informacji znajdziesz w sekcji „Limity wielkości zajęć” w artykule Zapraszanie
uczniów na zajęcia w Centrum pomocy.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, aby usunął niepotrzebnych uczestników kursu.
CourseNotModifiable
Błąd CourseNotModifiable oznacza, że dany kurs jest w stanie, który nie pozwala na modyfikowanie jego właściwości (innych niż sam stan kursu).
Możliwe działanie: poproś użytkownika o zmianę stanu kursu na stan, w którym można go modyfikować. Aby zmienić
stan, użyj
courses.patch(). Stan kursu można zmienić w żądaniu, które zmienia inne właściwości.
CourseTeacherLimitReached
Błąd CourseTeacherLimitReached oznacza, że żądane działanie spowodowałoby przekroczenie maksymalnej dozwolonej liczby nauczycieli kursu. Ten kod jest zwykle zwracany przez
metodę teachers.create(). Więcej informacji znajdziesz w sekcji "Limity wielkości zajęć"
w artykule Dodawanie do zajęć nauczyciela współprowadzącego w Centrum pomocy.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, aby usunął niepotrzebnych nauczycieli kursu. Jeśli jest to możliwe w Twojej aplikacji, możesz użyć metody
teachers.delete()
do zarządzania listami nauczycieli w imieniu użytkownika.
CourseTitleCannotContainUrl
Błąd CourseTitleCannotContainUrl oznacza, że żądane działanie jest niedozwolone, ponieważ spowodowałoby wprowadzenie adresu URL w tytule kursu. Wzorców adresów URL nie można używać w tytułach kursów.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, aby
usunął wzorzec adresu URL z pola title. Adresy URL są dozwolone w polu description.
CourseTopicLimitReached
Błąd CourseTopicLimitReached oznacza, że żądane działanie spowodowałoby przekroczenie maksymalnej dozwolonej liczby tematów w kursie. Ten kod jest zwykle zwracany przez
metodę courses.topics.create().
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, aby usunął niepotrzebne tematy. Jeśli jest to możliwe w Twojej aplikacji, możesz użyć metody
courses.topics.delete()
do zarządzania tematami w imieniu użytkownika.
EmptyAssignees
Błąd EmptyAssignees oznacza, że żądane działanie spowodowałoby usunięcie wszystkich osób przypisanych do odpowiednich materiałów dydaktycznych. Materiały dydaktyczne bez przypisanych osób nie są obsługiwane.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, że właściciel kursu nie może usunąć wszystkich osób przypisanych.
InactiveCourseOwner
Błąd InactiveCourseOwner oznacza, że żądane działanie jest niedozwolone, ponieważ konto właściciela kursu zostało usunięte. Zanim wykonasz żądane działanie, administrator właściciela kursu musi przywrócić jego konto.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj, aby administrator przywrócił konto właściciela kursu, zanim ponowi próbę wykonania operacji.
IneligibleOwner
Błąd IneligibleOwner oznacza, że nie można dodać użytkownika jako właściciela kursu, ponieważ nie jest on nauczycielem współprowadzącym.
Możliwe działanie: opisz przyczynę niepowodzenia. Jeśli użytkownik wysyłający żądanie nie jest administratorem, zasugeruj mu, aby najpierw wysłał użytkownikowi zaproszenie do zostania nauczycielem w kursie, a potem zaktualizował właściciela. Jeśli użytkownik wysyłający żądanie jest administratorem, zasugeruj mu, aby najpierw dodał użytkownika jako nauczyciela współprowadzącego kurs.
ListCoursesStudentAndTeacherFilter
ListCoursesStudentAndTeacherFilter występuje, gdy wysyłasz żądanie
courses.list() z wypełnionymi polami
teacherId i studentId. W jednym żądaniu można ustawić tylko jedno z tych pól.
Nadal możesz uzyskać listę kursów z określonymi uczniami i nauczycielami, wysyłając 2 osobne żądania. Najpierw pobierz kursy nauczyciela, wysyłając żądanie courses.list() z wypełnionym polem teacherId, a potem wyślij kolejne żądanie courses.list() z wypełnionym polem studentId.
Oblicz przecięcie wyników, aby uzyskać listę kursów, które pasują do obu użytkowników.
PendingInvitationExists
Błąd PendingInvitationExists oznacza, że ktoś został już zaproszony do przejęcia własności kursu. Ten błąd występuje podczas przenoszenia własności kursu, gdy przeniesienie zostało wcześniej rozpoczęte, ale nie zostało jeszcze zaakceptowane przez nowego właściciela.
UserCannotOwnCourse
Błąd UserCannotOwnCourse oznacza, że nie można dodać użytkownika jako właściciela kursu.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, że kursu nie można utworzyć, w którym użytkownik jest właścicielem. Użytkownik wysyłający żądanie, który nie jest administratorem, może zobaczyć ten błąd, jeśli spróbuje utworzyć kurs, w którym właścicielem jest inny użytkownik. Użytkownik wysyłający żądanie, który jest administratorem, może zobaczyć ten błąd, jeśli konto użytkownika określone jako właściciel nie istnieje lub użytkownik nie należy do jego domeny.
UserGroupsMembershipLimitReached
Błąd UserGroupsMembershipLimitReached oznacza, że użytkownik jest już członkiem maksymalnej dozwolonej liczby grup i nie może dołączyć do żadnych kursów. Ten kod jest
zwykle zwracany przez
students.create()
lub
teachers.create().
Więcej informacji znajdziesz w sekcji „Limity wielkości zajęć” w artykule
Zapraszanie uczniów na zajęcia w Centrum pomocy.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, aby
opuścił wszystkie kursy, w których nie uczestniczy. Jeśli użytkownik chce uczestniczyć w większej liczbie kursów, może utworzyć dodatkowe konto. Jeśli
jest to możliwe w Twojej aplikacji, możesz użyć students.create() lub
teachers.delete()
do zarządzania listami w imieniu użytkownika.
HTTP 403: PERMISSION_DENIED
Wszystkie metody interfejsu Classroom API mogą zwracać błąd PERMISSION_DENIED (HTTP 403), jeśli użytkownik nie spełnia wymagań wstępnych dotyczących dostępu. Komunikat
towarzyszący błędowi zawiera komunikat o błędzie, który pomaga zidentyfikować
przyczynę i wskazać użytkownikom odpowiednie działanie.
W kolejnych sekcjach opisujemy typowe komunikaty o błędach w interfejsie Classroom API.
CannotDirectAddUser
Błąd CannotDirectAddUser oznacza, że nie można bezpośrednio dodać użytkownika do kursu. Ten kod występuje, gdy administrator domeny próbuje dodać użytkownika do kursu, a ten użytkownik nie ma adresu e-mail lub nie należy do domeny.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj administratorowi domeny , aby sprawdził, czy konto użytkownika istnieje i czy znajduje się w domenie administratora kursu.
CannotInviteUserInUntrustedDomain
CannotInviteUserInUntrustedDomain oznacza, że zapraszany lub
tworzony użytkownik nie znajduje się w tej samej domenie co wywołujący lub w zaufanej domenie
wywołującego. W przypadku wywołujących z licencją Google Workspace for Education Fundamentals
nie można bezpośrednio dodawać ani zapraszać do
kursu użytkowników spoza domeny, którzy nie są zaufani.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj wywołującemu, aby rozważył jedną z tych opcji:
- Dodaj domeny użytkowników wywołujących i odbierających do listy zaufanych domen i spróbuj ponownie.
- Zasugeruj wywołującemu, aby ręcznie udostępnił link z zaproszeniem na kurs lub kod zajęć. Pamiętaj, że wymaga to skonfigurowania zaproszeń spoza domeny przez administratora. Więcej informacji znajdziesz w artykule Zapraszanie uczniów na zajęcia.
- Zasugeruj wywołującemu, aby przeszedł na płatną licencję Google Workspace for Education , ponieważ ograniczenie dotyczy tylko licencji Fundamentals.
ClassroomApiDisabled
Błąd ClassroomApiDisabled oznacza, że użytkownik wysyłający żądanie nie ma dostępu do interfejsu Classroom API.
Możliwe działanie: przekieruj użytkownika do instrukcji włączania dostępu do danych w Classroom. Zapoznaj się też z informacjami o błędzie ClassroomDisabled, ponieważ użytkownik może używać nieprawidłowego konta.
ClassroomDisabled
Błąd ClassroomDisabled oznacza, że użytkownik wysyłający żądanie nie ma dostępu do Classroom.
Możliwe działanie: przekieruj użytkownika do instrukcji włączania dostępu do Classroom. Użytkownik może też używać nieprawidłowego konta, dlatego możesz też podać link do informacji o korzystaniu z wielu kont, aby użytkownik mógł wybrać właściwe konto.
ExpiredAddOnToken
Błąd ExpiredAddOnToken oznacza, że token dodatku używany do wywoływania interfejsu API wygasł.
Możliwe działanie: poproś użytkownika o odświeżenie strony lub ponowne zalogowanie się w dodatku
aby można było uzyskać nowy parametr zapytania addOnToken z
adresu URL żądania.
InvalidAddOnToken
Błąd InvalidAddOnToken oznacza, że token dodatku przekazany w żądaniu nie jest autoryzowany do utworzenia załącznika dodatku w zadaniu.
Możliwe działanie: ten błąd może wystąpić, jeśli użytkownik zaloguje się w dodatku na inne konto niż konto w Classroom. Poproś użytkownika o wylogowanie się ze wszystkich innych kont w przeglądarce lub otwarcie Classroom w oknie incognito w Chrome.
ProjectPermissionDenied
Błąd ProjectPermissionDenied oznacza, że żądanie próbowało zmodyfikować zasób powiązany z innym projektem w Konsoli dewelopera.
Możliwe działanie: poinformuj użytkownika, że Twoja aplikacja nie może wysłać zamierzonego żądania. Może to zrobić tylko projekt w Konsoli dewelopera, który utworzył zasób.
UserIneligibleToUpdateGradingPeriodSettings
Błąd UserIneligibleToUpdateGradingPeriodSettings oznacza, że żądanie próbowało zmodyfikować ustawienia okresu oceniania w kursie, w którym użytkownik wysyłający żądanie lub właściciel kursu nie ma odpowiedniej licencji Google Workspace for Education albo użytkownik wysyłający żądanie nie jest nauczycielem kursu ani administratorem domeny.
Możliwe działanie: poinformuj użytkownika, że Twoja aplikacja nie może wysłać zamierzonego żądania aktualizacji ustawień okresu oceniania z powodu licencji lub roli w kursie. Licencje można przypisywać w konsoli administracyjnej Google.
HTTP 429: RESOURCE_EXHAUSTED
Błąd RESOURCE_EXHAUSTED jest zwracany, gdy żądane działanie jest niedozwolone, ponieważ wyczerpały się zasoby, np. limit lub pojemność serwera. Te typy błędów żądań występują zwykle, ponieważ Twoja aplikacja spowodowała nadmierne obciążenie.
Aby uniknąć przekroczenia tych limitów i zwiększyć niezawodność aplikacji, użyj mechanizmów ponawiania. Prawidłowe mechanizmy ponawiania:
Użyj skróconego wzrastającego czasu do ponowienia, aby ponowić żądanie i zmaksymalizować przepustowość żądań w środowiskach współbieżnych.
Aby uniknąć kolizji, rozważ użycie skróconego algorytmu wzrastającego czasu do ponowienia z jitterem. Wprowadzenie jittera może przyspieszyć realizację żądań, ponieważ wprowadza losowe opóźnienie, które rozkłada skoki w żądaniach.
Jeśli Twoja aplikacja zwraca błędy RESOURCE_EXHAUSTED z powodu ograniczeń limitu, prześlij prośbę o zwiększenie limitu. Więcej informacji znajdziesz w
artykule Monitorowanie limitów interfejsu API w Centrum pomocy.
UserCourseJoinRateLimitReached
Błąd UserCourseJoinRateLimitReached oznacza, że użytkownik dołączył już do maksymalnej dozwolonej liczby kursów w ciągu 1 dnia. Więcej informacji znajdziesz w
sekcji „Zaproszenia do grup i ich rozmiar” w artykule Omówienie zasad i
ograniczeń obowiązujących w Grupach dyskusyjnych w Centrum pomocy.
Możliwe działanie: opisz przyczynę niepowodzenia i zasugeruj użytkownikowi, aby poczekał 1 dzień przed dołączeniem do kursu.
HTTP 500: INTERNAL
Błąd INTERNAL oznacza, że podczas przetwarzania żądania wystąpił nieoczekiwany błąd. Błędy żądań INTERNAL można często rozwiązać, używając algorytmu Exponential back-off do ponowienia żądania. Jeśli błąd INTERNAL będzie się powtarzał, możesz go
zgłosić, przesyłając zgłoszenie błędu w publicznym narzędziu do śledzenia błędów w interfejsie Classroom API.