Progettazione dell'API RESTful - il PUT dovrebbe restituire dati relativi?

1

Ho un'API che consente a un utente di aggiornare il suo stato di sistema; e una chiamata separata per recuperare gli aggiornamenti dello stato del sistema da altri utenti. Avrebbe senso unificarli sotto una richiesta PUT in cui un utente richiederebbe un aggiornamento PUT con il proprio aggiornamento di stato e riceverebbe gli aggiornamenti di stato di altri utenti?

La mia soluzione consentirebbe alla richiesta PUT di chiamare internamente il metodo di richiesta GET. La ragione di questo è che quando un utente aggiorna il suo stato di sistema dovrebbe essere informato immediatamente dello stato di altri utenti, e non credo che avere 2 richieste separate sia necessario - e dovrebbe essere opzionale.

Intendo mantenere la richiesta GET per lo stato di altri utenti poiché un aggiornamento di stato per un utente non è necessariamente necessario per recuperare lo stato di altri utenti, ma una volta aggiornato il proprio stato è fondamentale che ottengano informazioni su altri utenti.

    
posta alexmcroberts 12.11.2012 - 01:49
fonte

1 risposta

3

Non penso che dovresti, per alcuni motivi:

  • Un PUT lo richiede esattamente. Vi stanno inviando informazioni e dovreste prenderlo. Non dovresti cambiare la semantica per "Prenderò i tuoi dati, se c'è un errore, ti darò un errore, ma ti darò anche altri dati che potresti volere o non volere o che non servono.
  • Quali garanzie hai che ogni chiamante della richiesta di PUT desideri i dati correlati?
    • Il chiamante desidera inviarti 1 aggiornamento al secondo e recuperare i record correlati ogni minuto. Perché sprecare banda e CPU dando loro dati che non vogliono?
    • Che cosa succede se la richiesta non riesce o viene respinta (ad esempio, stato vuoto / mancante)? Restituisci ancora i dati relativi
    • Come intendi separare i dati correlati dai messaggi di ritorno dalla richiesta PUT ? Questo è coerente con le altre API?
  • Che cosa c'è di speciale nell'aggiornarli quindi ottenendo aggiornamenti su altri utenti? I due non possono avvenire in parallelo (cioè attivano contemporaneamente GET e PUT ?)

Se lo vuoi assolutamente, dovresti renderlo un flag o una chiamata opzionale. Se specificano in modo specifico fetchMeTheRelatedData , allora darglielo, ma non assegnarglielo di default.

    
risposta data 12.11.2012 - 02:11
fonte

Leggi altre domande sui tag