GET /api/v0/PrintQueue/{jobId}/status – sprawdzenie statusu zadania

Opis mechanizmu

Endpoint służy do sprawdzania bieżącego stanu przetwarzania zadania wydruku zlecenia asynchronicznego, które zostało umieszczone w kolejce procesora tła (Hangfire).

Z punktu widzenia integracji, wywołanie tej metody pozwala systemowi zewnętrznemu na realizację mechanizmu odpytywania (Polling). Aplikacja kliencka może w pętli weryfikować status operacji i na tej podstawie podjąć decyzję o przejściu do kroku pobierania pliku binarnego za pomocą endpointu GET /api/v0/PrintQueue/{operationId}/result bądź wyświetleniu logu błędów użytkownikowi.

  • Wersja: v0
  • Metoda HTTP: GET
  • Format danych odpowiedzi: application/json

Szkielet żądania (Request URI)

Weryfikacja stanu realizowana jest poprzez proste żądanie typu GET, gdzie identyfikator zadania pobrany z kolejki przekazywany jest bezpośrednio w ścieżce adresu URL:

GET /api/v0/PrintQueue/{jobId}/status HTTP/1.1
Host: localhost:5000
Accept: application/json

Parametry ścieżki (Path Parameters)

  • {jobId} (string): Wymagany. Umieszczany bezpośrednio w ścieżce adresu URL. Jest to unikalny identyfikator techniczny zadania w tle nadany i zwrócony przez bramkę API sPrint w ciele odpowiedzi (payloadzie) podczas pierwotnego wywołania metody POST /enqueue.

Struktura odpowiedzi (Response Body)

Model zwrotny JSON udostępnia podstawowe parametry kontrolne oraz tablicę diagnostyczną:

{
  "status": "string",
  "operationId": "string",
  "errors": []
}
  • status (string): Definiuje obecny krok procesora Hangfire w odniesieniu do zadania. Przyjmuje jedną z wartości słownikowych:
    • "Enqueued" – Zadanie oczekuje w bazie danych kolejki na zwolnienie wątku roboczego.
    • "Processing" – Silnik sPrint API aktualnie pobiera dane z bazy i renderuje dokument.
    • "Succeeded" – Operacja zakończona sukcesem. Dokument został zapisany na dysku/S3 lub oczekuje na pobranie w pamięci bajtowej.
    • "Failed" – Przetwarzanie zostało przerwane z powodu krytycznego błędu.
  • operationId (string / GUID): Identyfikator biznesowy operacji powiązany z plikiem (wskazany pierwotnie przez system integrujący).
  • errors (array of strings): Lista komunikatów diagnostycznych i wyjątków systemowych, uzupełniana wyłącznie wtedy, gdy pole status przyjmuje wartość "Failed".

Kody odpowiedzi (Responses)

? HTTP 200 OK

Zapytanie zostało przetworzone pomyślnie. Serwer odnalazł zadanie w rejestrze i zwraca jego pełny profil statusowy.

Format odpowiedzi: application/json

{
  "status": "Succeeded",
  "operationId": "my-report-123",
  "errors": []
}

? HTTP 404 Not Found

Zwracany w sytuacji, gdy przekazany w ścieżce identyfikator techniczny zadania ({jobId}) nie istnieje w rejestrach kolejki procesora Hangfire (np. na skutek podania błędnego numeru lub wyczyszczenia historii zadań).

Format odpowiedzi: application/json (string)


Realne Przykłady Implementacji (Sprawdzenie statusu)

1. Przykład w języku Python ( requests )

import requests

job_id = "14"
url = f"http://localhost:5000/api/v0/PrintQueue/{job_id}/status"

response = requests.get(url, headers={"Accept": "application/json"})

if response.status_code == 200:
    data = response.json()
    status_zadania = data.get("status")
    operation_id = data.get("operationId")
    
    print(f"Zadanie {job_id} jest obecnie w stanie: {status_zadania}")
    
    if status_zadania == "Succeeded":
        print(f"Można pobrać plik używając Operation ID: {operation_id}")
    elif status_zadania == "Failed":
        print(f"Błędy silnika sPrint: {data.get('errors')}")
elif response.status_code == 404:
    print("Nie znaleziono takiego Job ID w bazie kolejki serwera.")

2. Przykład w języku C# ( HttpClient )

using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;

class Program
{
    public class StatusResponse
    {
        public string Status { get; set; }
        public string OperationId { get; set; }
        public string[] Errors { get; set; }
    }

    static async Task Main(string[] args)
    {
        var jobId = "14";
        var url = $"http://localhost:5000/api/v0/PrintQueue/{jobId}/status";

        using var client = new HttpClient();
        
        try
        {
            var response = await client.GetAsync(url);

            if (response.IsSuccessStatusCode)
            {
                var data = await response.Content.ReadFromJsonAsync<StatusResponse>();
                Console.WriteLine($"Status zadania: {data?.Status}");
                
                if (data?.Status == "Failed" && data.Errors != null)
                {
                    Console.WriteLine($"Wykryte błędy: {string.Join(", ", data.Errors)}");
                }
            }
            else if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
            {
                Console.WriteLine("Błąd 404: Zadanie o podanym Job ID nie istnieje w usłudze Hangfire.");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Wyjątek sieciowy: {ex.Message}");
        }
    }
}

Czy ten artykuł był pomocny?