Ce face notifications/progress și notifications/cancelled
Progres. Clientul care vrea actualizări pune progressToken (string sau întreg, unic între cererile active) în _meta-ul cererii. Serverul poate trimite apoi notifications/progress cu tokenul, valoarea progress (care trebuie să crească la fiecare notificare), total opțional și message opțional; valorile pot fi zecimale. Serverul poate alege să nu trimită nimic, frecvența îi aparține, iar notificările se opresc după încheierea operației.
Anulare. Pe stdio, clientul trimite notifications/cancelled cu requestId și un reason opțional. Pe Streamable HTTP, închiderea stream-ului SSE al răspunsului este semnalul de anulare și nu se așteaptă nicio notificare. Serverul care primește anularea ar trebui să oprească lucrul, să elibereze resursele și să nu mai trimită răspuns. Serverul trimite el însuși notifications/cancelled doar ca să închidă un stream subscriptions/listen.
Implementările ar trebui să aibă timeout pentru toate cererile trimise; la expirare, expeditorul anulează cererea. Ceasul se poate reseta la o notificare de progres, dar specificația recomandă oricum un timeout maxim. Anularea poate ajunge după ce răspunsul a fost trimis; ambele părți tratează această cursă fără erori, iar notificările invalide se ignoră.
Sintaxă și opțiuni
| Opțiune / Parametru | Descriere |
|---|---|
progressToken |
În _meta-ul cererii și în notificare. String sau întreg, unic între cererile active. |
progress |
Valoarea curentă; crește la fiecare notificare, chiar dacă totalul este necunoscut. |
total |
Opțional: valoarea finală, dacă se cunoaște. |
message |
Opțional: text lizibil despre progres. |
requestId |
În notifications/cancelled: id-ul cererii anulate. |
reason |
Opțional: motivul anulării, pentru jurnal sau afișare. |
Exemple practice
Exemplul 1: Cerere cu token de progres
{
"jsonrpc": "2.0",
"id": 1,
"method": "some_method",
"params": {
"_meta": {
"progressToken": "abc123"
}
}
}
Exemplul 2: Notificare de progres
{
"jsonrpc": "2.0",
"method": "notifications/progress",
"params": {
"progressToken": "abc123",
"progress": 50,
"total": 100,
"message": "Reticulating splines..."
}
}
Exemplul 3: Anulare pe stdio
{
"jsonrpc": "2.0",
"method": "notifications/cancelled",
"params": {
"requestId": "123",
"reason": "User requested cancellation"
}
}
Greșeli frecvente și bune practici
- Trimiți
notifications/cancelledpe Streamable HTTP. Acolo anularea înseamnă închiderea stream-ului răspunsului. - Reutilizezi același
progressTokenpentru două cereri active. Tokenul trebuie să fie unic. - Prelungești la nesfârșit timeout-ul la fiecare notificare de progres. Păstrează un timeout maxim pentru servere care se comportă greșit.