Passa al contenuto principale

5. Request/Response Semantics (Semantica Richiesta/Risposta)

CoAP opera secondo un modello richiesta/risposta simile a HTTP: un endpoint CoAP nel ruolo "client" invia una o più richieste CoAP a un "server", che elabora le richieste inviando risposte CoAP. A differenza di HTTP, le richieste e le risposte non vengono inviate su una connessione precedentemente stabilita, ma vengono scambiate in modo asincrono tramite datagrammi CoAP.

5.1. Requests (Richieste)

Una richiesta CoAP consiste nel metodo da applicare alla risorsa, nell'identificatore della risorsa, in un payload e tipo di media Internet (se presente), e metadati opzionali sulla richiesta.

CoAP supporta i metodi di richiesta di base GET, POST, PUT e DELETE, che sono facilmente mappati su HTTP. Hanno anche le proprietà di sicurezza (Safe) e idempotenza (Idempotent) definite in HTTP.

5.1.1. Method Definitions (Definizioni dei Metodi)

In questa sezione, definiamo i metodi CoAP.

  • GET: Il metodo GET recupera una rappresentazione delle informazioni che corrisponde attualmente alla risorsa identificata dall'URI della richiesta.
  • POST: Il metodo POST richiede che la rappresentazione inclusa nella richiesta sia elaborata dalla risorsa identificata dall'URI della richiesta.
  • PUT: Il metodo PUT richiede che la risorsa identificata dall'URI della richiesta sia aggiornata o creata con la rappresentazione inclusa nella richiesta.
  • DELETE: Il metodo DELETE richiede che la risorsa identificata dall'URI della richiesta sia eliminata.

5.2. Responses (Risposte)

Dopo aver ricevuto e interpretato una richiesta, un server risponde con una risposta CoAP che è abbinata alla richiesta tramite un token generato dal client.

Una risposta è identificata da un Codice di Risposta (Response Code), che è analogo al Codice di Stato HTTP. I codici di risposta indicano il risultato del tentativo di comprendere e soddisfare la richiesta.

5.2.1. Response Code Definitions (Definizioni dei Codici di Risposta)

I codici di risposta sono raggruppati in classi:

  • 2.xx (Successo): La richiesta è stata ricevuta, compresa e accettata con successo.
  • 4.xx (Errore Client): La richiesta contiene una sintassi errata o non può essere soddisfatta.
  • 5.xx (Errore Server): Il server non è riuscito a soddisfare una richiesta apparentemente valida.

5.3. Request/Response Matching (Corrispondenza Richiesta/Risposta)

Indipendentemente da come viene inviata una risposta (ad esempio, in un messaggio di riconoscimento o in un messaggio confermabile separato), viene abbinata alla richiesta tramite il Token incluso dal client nella richiesta. Il token deve essere unico per la coppia sorgente/destinazione data durante la durata dello scambio.

5.4. Options (Opzioni)

CoAP definisce una serie di opzioni che possono essere incluse in una richiesta o risposta. Le opzioni forniscono metadati aggiuntivi, come il formato del contenuto, l'host di destinazione o i tag di entità (ETag) per la convalida della cache.

5.5. Payload (Payload)

Le richieste e le risposte CoAP possono includere un payload. Il payload è la rappresentazione della risorsa (per una risposta GET o una richiesta PUT) o i dati da elaborare (per una richiesta POST). Il formato del payload è specificato dall'opzione Content-Format.

5.6. Caching (Caching)

CoAP supporta il caching delle risposte per ridurre il traffico di rete e la latenza. Il modello di caching è simile a quello di HTTP, utilizzando indicatori di freschezza (Max-Age) e di convalida (ETag).

5.7. Proxying (Proxying)

CoAP è progettato per consentire un proxying efficiente. I proxy possono essere utilizzati per memorizzare nella cache le risposte, eseguire la traduzione del protocollo (ad esempio, CoAP a HTTP) o inoltrare i messaggi ad altre reti.

5.8. Method Definitions (Definizioni dei Metodi) - Dettagli

  • GET: Sicuro e idempotente.
  • POST: Né sicuro né idempotente.
  • PUT: Idempotente ma non sicuro.
  • DELETE: Idempotente ma non sicuro.

5.9. Response Code Definitions (Definizioni dei Codici di Risposta) - Dettagli

  • Created (2.01): Come HTTP 201 Created.
  • Deleted (2.02): Come HTTP 204 No Content (ma specifico per DELETE).
  • Valid (2.03): Come HTTP 304 Not Modified.
  • Changed (2.04): Come HTTP 204 No Content (ma specifico per POST/PUT).
  • Content (2.05): Come HTTP 200 OK.
  • Bad Request (4.00): Come HTTP 400 Bad Request.
  • Unauthorized (4.01): Come HTTP 401 Unauthorized.
  • Bad Option (4.02): Una delle opzioni nella richiesta non è supportata.
  • Forbidden (4.03): Come HTTP 403 Forbidden.
  • Not Found (4.04): Come HTTP 404 Not Found.
  • Method Not Allowed (4.05): Come HTTP 405 Method Not Allowed.
  • Not Acceptable (4.06): Come HTTP 406 Not Acceptable.
  • Precondition Failed (4.12): Come HTTP 412 Precondition Failed.
  • Request Entity Too Large (4.13): Come HTTP 413 Request Entity Too Large.
  • Unsupported Content-Format (4.15): Come HTTP 415 Unsupported Media Type.
  • Internal Server Error (5.00): Come HTTP 500 Internal Server Error.
  • Not Implemented (5.01): Come HTTP 501 Not Implemented.
  • Bad Gateway (5.02): Come HTTP 502 Bad Gateway.
  • Service Unavailable (5.03): Come HTTP 503 Service Unavailable.
  • Gateway Timeout (5.04): Come HTTP 504 Gateway Timeout.
  • Proxying Not Supported (5.05): Il server è un proxy ma non supporta l'URI proxy richiesto.