Contenuto

    Risposta del server 428 Precondition Required

    HTTP Status Code 428 (Precondition Required)

    Il codice di stato HTTP 428 viene utilizzato per indicare che il server richiede il soddisfacimento di determinate condizioni prima di procedere con l'elaborazione della richiesta. Questo codice è particolarmente rilevante nelle interazioni con API, dove è essenziale tenere in considerazione gli stati precedenti delle risorse.

    428 - Precondition Required

    Esempi di utilizzo e di occorrenza del codice 428

    • Modifica delle risorse
      • Esempio: Un cliente tenta di aggiornare una risorsa senza specificare le condizioni necessarie per tale aggiornamento.
      • Spiegazione: Il server potrebbe rifiutare la richiesta se il cliente non fornisce le condizioni necessarie, come nel caso in cui la risorsa sia stata modificata da un altro cliente.
    • Controllo delle versioni
      • Esempio: Quando si cerca di eliminare o modificare una risorsa, il cliente deve specificare di lavorare con la versione attuale della risorsa (ad esempio, utilizzando l'intestazione If-Match).
      • Spiegazione: Il codice 428 può essere restituito se il cliente non ha fornito l'intestazione necessaria per la verifica della versione della risorsa.
    • Cache e stati
      • Esempio: Un cliente richiede dati che potrebbero essere modificati, ma non specifica di essere disposto a lavorare solo con dati aggiornati (ad esempio, utilizzando l'intestazione If-None-Match).
      • Spiegazione: Il server può richiedere condizioni per evitare di fornire informazioni obsolete.

    Esempi pratici di gestione dell'errore 428 in vari linguaggi di programmazione

    1. JavaScript (utilizzando Fetch API)
      
      const url = 'https://api.example.com/resource';
      const headers = new Headers({
          'If-Match': 'etag_value' // Specificare l'ETag per il controllo della versione
      });
      
      fetch(url, {
          method: 'PUT',
          headers: headers,
          body: JSON.stringify({ data: 'new data' })
      })
      .then(response => {
          if (response.status === 428) {
              console.error('Condizioni necessarie per l\'elaborazione della richiesta.');
          }
      });
              
    2. Python (utilizzando requests)
      
      import requests
      
      url = 'https://api.example.com/resource'
      headers = {
          'If-Match': 'etag_value'  # Specificare l'ETag per il controllo della versione
      }
      
      response = requests.put(url, headers=headers, json={'data': 'new data'})
      if response.status_code == 428:
          print('Condizioni necessarie per l\'elaborazione della richiesta.')
              
    3. PHP
      
      $url = 'https://api.example.com/resource';
      $options = [
          'http' => [
              'header' => "If-Match: etag_value\r\n", // Specificare l'ETag per il controllo della versione
              'method' => 'PUT',
              'content' => json_encode(['data' => 'new data']),
          ],
      ];
      
      $context = stream_context_create($options);
      $result = file_get_contents($url, false, $context);
      if ($http_response_header[0] === 'HTTP/1.1 428 Precondition Required') {
          echo 'Condizioni necessarie per l\'elaborazione della richiesta.';
      }
              

    Tabella riepilogativa delle condizioni necessarie

    Tipo di Condizione Descrizione Esempio di Intestazione
    Controllo Versione Verifica che il cliente stia utilizzando l'ultima versione della risorsa. If-Match
    Cache Assicura che i dati forniti siano aggiornati. If-None-Match
    Modifiche Concurrenti Prevenire conflitti durante la modifica di risorse. N/A

    In sintesi, il codice di stato HTTP 428 serve come meccanismo di protezione per garantire che le operazioni su risorse siano eseguite solo quando le condizioni specificate dai clienti sono soddisfatte. Questo approccio aiuta a mantenere l'integrità dei dati e a evitare conflitti durante le modifiche concorrenti.