Przejdź do głównej zawartości

Obsługa błędów w przepływie NextPDF Connect

Buduj odporne przepływy Connect. Sprawdzaj każdy wynik narzędzia, zamykaj nieudaną sesję i ponawiaj próbę z nowego stanu. Narzędzie zakończone niepowodzeniem zwraca ustrukturyzowany wynik błędu. Traktuj ten wynik jako normalną odpowiedź, a nie awarię transportu. PHP Standards Recommendation (PSR)-18 wprowadza to samo rozróżnienie: odpowiedź jest zwracana nawet wtedy, gdy status sygnalizuje błąd (PSR-18 §3).

Okno terminala
composer require nextpdf/server

Skonfiguruj transport. Ten przepis wykorzystuje create_pdf, add_text oraz output_pdf. Wszystkie trzy narzędzia należą do edycji Core.

Nieudane wywołanie narzędzia zwraca wynik błędu. Wynik zawiera flagę błędu, czytelny dla człowieka komunikat oraz kod, jeśli ma zastosowanie. Pomyślny wynik nie ma flagi błędu i zawiera standardowe dane wyjściowe narzędzia. W obu przypadkach transport wysłał żądanie i otrzymał odpowiedź (PSR-18 §p2).

Utrzymuj krótką pętlę obronną. Wyślij wywołanie, a następnie odczytaj wynik. Jeśli wynikiem jest błąd, zarejestruj go, sklasyfikuj, zastosuj strategię odzyskiwania i przestań używać nieaktualnego stanu. W przeciwnym razie wyodrębnij potrzebne pola i kontynuuj.

NarzędzieRolaPoziom ryzyka
create_pdfOtwiera sesjęBezpieczne
add_textZapisuje tekstOstrożność
output_pdfRenderuje i zwraca plik PDFWymagane zatwierdzenie / Przegląd (base64)

Katalog narzędzi jest źródłem prawdy. Dostępne narzędzia zależą od zainstalowanej edycji.

Uruchom ścieżkę pozytywną (create_pdfadd_textoutput_pdf) i sprawdź każdy wynik. Następnie celowo użyj ponownie unieważnionego document_id w add_text, aby wywołać błąd sesji. Przywróć działanie, tworząc nową sesję i odtwarzając zawartość.

Klasyfikuj błędy według kategorii, a następnie reaguj odpowiednio:

  • Walidacja danych wejściowych — deterministyczna. Popraw argumenty, a następnie ponów to samo wywołanie. Przykłady: pusty tekst, nieprawidłowe wyrównanie, niedodatni rozmiar, nieznany rozmiar strony, nieznana rodzina czcionek.
  • Sesjadocument_id już nie istnieje. Utwórz nową sesję, a następnie odtwórz całą zawartość.
  • System — ograniczenie zasobów serwera, takie jak limit sesji. Odczekaj, a następnie ponów próbę.
  • Zatwierdzenie — zapis output_pdf do pliku może zostać wstrzymany w oczekiwaniu na zatwierdzenie przez człowieka. To wstrzymanie przepływu pracy, a nie awaria. Przekaż wyzwanie i poczekaj, a następnie wywołaj ponownie z tokenem potwierdzenia.

Nigdy nie zakładaj powodzenia. Nigdy nie używaj ponownie document_id po błędzie sesji. Nigdy nie wysyłaj output_pdf, dopóki każdy krok dotyczący zawartości nie zakończy się powodzeniem.

  • Zatwierdzenie nie jest błędem. Wyzwanie z udziałem człowieka (HITL) oznacza wstrzymanie. Nie ponawiaj prób w ciasnej pętli. Przekaż je człowiekowi.
  • Ponowne uruchomienie serwera. Wszystkie sesje w pamięci są czyszczone, a każdy wcześniejszy document_id staje się nieprawidłowy.
  • Częściowy przepływ pracy. Jeśli add_text zawiedzie w środku dokumentu, sesja może być niespójna. Bezpiecznym sposobem odzyskania jest utworzenie nowej sesji, a nie częściowa naprawa.

Pomijalna. Ten przepis dotyczy przepływu sterowania, a nie renderowania. Profil dla każdego wytworzonego wyniku to structural.

Komunikaty o błędach są przeznaczone dla agenta wywołującego i operatora. Nie przekazuj niezaufanym użytkownikom końcowym surowego tekstu błędu serwera w dosłownym brzmieniu. Zamiast tego pokaż sklasyfikowany, oczyszczony komunikat.

TwierdzenieSpecyfikacjaKlauzulareference_id
Transport zwraca odpowiedź niezależnie od wyniku.PSR-18§p2
Odpowiedź jest zwracana nawet przy statusie błędu.PSR-18§3

Nie dotyczy — wszystkie narzędzia należą do edycji Core.

TransportDostępnyUwagi
MCP (stdio)TakBłędy przychodzą jako wynik narzędzia z flagą błędu.
RESTTakStatus inny niż 2xx zawiera to samo sklasyfikowane ciało błędu.
gRPCTakKod statusu wraz z komunikatem o wyniku błędu.

W każdym transporcie analizuj błąd na poziomie narzędzia jako normalną odpowiedź, a nie przerwane wywołanie (PSR-18 §3).

create_pdf jest oznaczone jako Safe, add_text jako Caution, a output_pdf jako Approval Required, obniżone do Review w trybie base64. Oczekujący zapis pliku pojawia się jako wyzwanie zatwierdzenia. Pętla obsługi błędów musi traktować je jako wstrzymanie, a nie awarię (poziomy ryzyka HITL).

Oczekujące zatwierdzenie zwraca:

{ "allowed": false, "challenge": "<human-readable challenge text>", "token": "confirm_<single-use-hex>" }

Wywołaj ponownie to samo narzędzie z _confirmation_token ustawionym na ten token. Narzędzie zwraca { "allowed": true }. Pełny przebieg opisano w output-approval.