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.