Aller au contenu

Gérer les erreurs dans un flux de travail NextPDF Connect

Construis des flux de travail Connect résilients. Valide chaque résultat d’outil, mets fin à toute session en échec et réessaie avec un état neuf. Un outil qui échoue renvoie un résultat d’erreur structuré : il s’agit d’une réponse normale, pas d’une défaillance du transport. PSR-18 opère la même distinction : une réponse est renvoyée même lorsque le statut indique une erreur (PSR-18 §3).

Fenêtre de terminal
composer require nextpdf/server

Configure un transport. Cette recette utilise create_pdf, add_text et output_pdf, qui relèvent tous de Core.

Un appel d’outil en échec renvoie un résultat d’erreur. Il contient un indicateur d’erreur et un message lisible par un humain, avec, le cas échéant, un code. Un résultat réussi n’a aucun indicateur d’erreur et contient la sortie normale de l’outil. Dans les deux cas, le transport a envoyé la requête et reçu la réponse (PSR-18 §p2).

Le schéma défensif est simple. Envoie l’appel et lis le résultat. S’il s’agit d’une erreur, journalise-la, classe-la, applique la stratégie de récupération et ne continue pas avec un état périmé. Sinon, extrais les champs dont tu as besoin et poursuis.

OutilRôleNiveau de risque
create_pdfOuvrir la sessionSûr
add_textÉcrire du textePrudence
output_pdfEffectuer le rendu et renvoyer le PDFApprobation requise / Examen (base64)

Le catalogue d’outils constitue la référence. Les outils disponibles dépendent du palier installé.

Exécute le chemin nominal (create_pdfadd_textoutput_pdf) et vérifie chaque résultat. Réutilise ensuite volontairement un document_id détruit avec add_text pour déclencher une erreur de session. Reprends en créant une nouvelle session et en rejouant le contenu.

Classe les erreurs par catégorie et réagis en conséquence :

  • Validation des entrées — déterministe. Corrige les arguments et réessaie le même appel. Exemples : texte vide, alignement non valide, taille non positive, format de page inconnu, famille de police inconnue.
  • Session — le document_id n’existe plus. Crée une nouvelle session et rejoue tout le contenu.
  • Système — une contrainte de ressource serveur, comme la limite de sessions. Patiente, puis réessaie.
  • Approbationoutput_pdf vers un fichier peut être mis en pause pour une approbation humaine. C’est une pause du flux de travail, pas une défaillance. Transmets le défi et attends, puis rappelle avec le jeton de confirmation.

Ne pars jamais du principe que l’appel a réussi ; ne réutilise jamais un document_id après une erreur de session ; n’envoie jamais output_pdf tant que chaque étape de contenu n’a pas réussi.

  • L’approbation n’est pas une erreur. Le défi HITL est une pause. Ne réessaie pas dans une boucle serrée. Transmets-le à l’humain.
  • Redémarrage du serveur. Toutes les sessions en mémoire sont effacées, et chaque document_id antérieur devient non valide.
  • Flux de travail partiel. Si add_text échoue en milieu de document, la session peut être incohérente. La récupération sûre consiste à repartir d’une nouvelle session, pas à tenter une réparation partielle.

L’impact est négligeable. Cette recette porte sur le flux de contrôle, pas sur le rendu. Le profil est structural pour toute sortie produite.

Les messages d’erreur sont destinés à l’agent appelant et à l’opérateur. Ne renvoie pas tel quel le message d’erreur brut du serveur à des utilisateurs finaux non fiables. Présente plutôt un message classé et assaini.

ÉnoncéSpécificationClausereference_id
Le transport renvoie une réponse quel que soit le résultat.PSR-18§p2
Une réponse est renvoyée même en cas de statut d’erreur.PSR-18§3

Sans objet — tous les outils relèvent de Core.

TransportDisponibleNotes
MCP (stdio)OuiLes erreurs arrivent sous la forme d’un résultat d’outil avec un indicateur d’erreur.
RESTOuiUn statut non 2xx transporte le même corps d’erreur classé.
gRPCOuiUn code de statut accompagné d’un message de résultat d’erreur.

Quel que soit le transport, une erreur au niveau de l’outil est une réponse normale à inspecter, pas un appel perdu (PSR-18 §3).

create_pdf est Sûr, add_text est Prudence, et output_pdf est Approbation requise, rétrogradé à Examen en mode base64. Une écriture de fichier en attente se présente comme un défi d’approbation, que la boucle de gestion des erreurs doit traiter comme une pause, pas comme une défaillance (niveaux de risque HITL).

Une approbation en attente renvoie :

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

Rappelle le même outil avec _confirmation_token défini sur ce jeton, et il renvoie { "allowed": true }. Pour le déroulé complet, consulte output-approval.