Come comunicare gli effetti collaterali in un'API RESTful sul server al client?

0

Ho riflettuto molto sulle API REST di Hypermedia per le ultime due settimane. Una cosa di cui non sono abbastanza sicuro è come voglio modellare gli effetti collaterali sul lato server.

Nel mio progetto attuale, sto usando JSON + HAL come tipo di contenuto e sto facendo uso di collegamenti e risorse incorporate.

Ad esempio: supponiamo che alcune risorse A vengano PATCHed dal client, ad es. perché un valore monetario viene aggiornato. Supponiamo che questa risorsa sia utilizzata da un'altra risorsa B. Questa risorsa B rappresenta la somma di tutte le risorse di tipo A. Quindi la risorsa B avrebbe fornito un nuovo valore dopo che A è stato aggiornato. Qual è il modo migliore per comunicarlo al cliente? Le seguenti opzioni mi vengono in mente:

  1. Restituisce tutti i link eventualmente aggiornati nella risposta PATH, in particolare un collegamento a B. Il client proverà quindi a OTTENERE tutti i collegamenti forniti.
  2. Incorpora quelle risorse che potrebbero essere state aggiornate e fornire collegamenti a tutte le altre risorse pertinenti.
  3. Restituisce un link a una risorsa genitore di entrambi A e B, perché l'intero stato di A e B è stato modificato, e forse anche di più.

L'opzione 1) sembra non essere corretta, perché posso fornire collegamenti a risorse che non sono realmente nelle vicinanze di A. Inoltre, non riesco a distinguere tra le risorse che dovrei ottenere perché sono state aggiornate e le risorse che possono essere utili in altri modi (per navigare, manipolare lo stato dell'applicazione, creare nuove risorse, ...)

L'opzione 2) è fondamentalmente la stessa di 1), ma con il vantaggio che una risorsa incorporata mi dice direttamente lo stato della risorsa, che è utile quando incorporo B.

Opzione 3) mi sembra il migliore finora. In questo esempio potrei avere un "foglio di calcolo" di risorse parent, che contiene risorse di riga, come A, e una risorsa somma, come B. Se cambio una delle righe, ottengo un link al foglio di calcolo, che il client può quindi OTTIENI e ottieni tutte le righe e le somme incorporate o come link.

Forse mi mancano alcune altre opzioni. Non sono davvero sicuro di quale sia la migliore pratica qui.

    
posta Arne 25.07.2014 - 12:13
fonte

1 risposta

0

Quindi ora ho scoperto che puoi effettivamente segnalare i cambiamenti nei tipi di relazione di collegamento. La RFC per link rels consente di specificare più di una relazione di collegamento per collegamento:

{
    _links : {
        "sum-of-rows has-changed" : { "href" : "http://..." },
        "some-other-link" : { "href" : "http://..." }
    }
    "value" : 5000.0
}

In questo caso, has-change rel notifica al client che la risorsa dietro quel collegamento è cambiata e dovrebbe essere aggiornata.

    
risposta data 28.07.2014 - 16:34
fonte

Leggi altre domande sui tag