Definire le operazioni dell'utente su application / collection + json response?

3

Sono abbastanza nuovo per Collection + JSON . Ho un sacco di domande riguardanti la raccolta + JSON e le operazioni degli utenti.

Usa caso

Avere le autorizzazioni utente in una risposta Collection + JSON sarebbe utile per dire al cliente quali operazioni possono essere attivate su un particolare oggetto. Ad esempio, consentirebbe al client di sapere quali "pulsanti" visualizzare sull'interfaccia utente.

Domande

  1. Le autorizzazioni dell'utente devono essere raggruppate nella risposta Collection + JSON?
  2. Le autorizzazioni dell'utente devono essere raggruppate in una chiamata separata all'oggetto utente?
  3. È fuori dalla portata di Collection + JSON?

Pensieri

Il mio pensiero personale è che le autorizzazioni utente dovrebbero essere archiviate in un oggetto utente per una separazione dei compiti, tuttavia, se questo è il caso, allora ogni richiesta dovrebbe essere accoppiata con una richiesta per un oggetto utente. Questo non sembra una metodologia corretta.

Esempi

Negli esempi seguenti, le "autorizzazioni" sono rappresentate da un valore intero dove 1 rappresenta read, 2 rappresenta create, 3 rappresenta update e 4 rappresenta delete. Il server convaliderà sempre la richiesta dell'utente, ma ciò renderebbe più semplice per il client sapere quali operazioni possono essere eseguite sull'oggetto.

1. Incluso nella risposta

"Permessi" potrebbero essere aggiunti alla specifica Collection + JSON, ma questo sarebbe modificare le specifiche.

{
  "collection" :
    {
      "rel" : {string},
      "href" : {string},
      ... links, queries, items, etc... 
      "permissions" : { integer value }
    }
}

2. Incluso nell'oggetto Utente

Le autorizzazioni sono memorizzate nell'oggetto utente e cambiano in base all'URL per fornire al cliente informazioni su ciò che questo utente può fare in questo particolare stato nell'applicazione.

{
  "collection" : {
    items: [{
      ... name, username, etc...

      "permissions" : { integer value }
    }]
  }
}

3. Oltre l'ambito

In base alla bozza specifica:

The Collection+JSON hypermedia type is designed to support full read/write capability for simple lists.

Sospetto che fornendo una risposta Collection + JSON, si presuma che tutte le operazioni CRUD siano disponibili per il client e che il server fornirà la risposta appropriata quando viene effettuata una richiesta.

    
posta Pete 29.07.2014 - 16:22
fonte

1 risposta

2

Come @Bart van Ingen Schenau ha detto che se le tue autorizzazioni possono essere associate ai verbi http, puoi usare l'intestazione Consenti per indicare quali operazioni sono consentite su una risorsa.

Ma dal momento che hai parlato del caso d'uso per decidere se riprodurre o meno i pulsanti (come modifica, cancella ecc ...), scoprirai che l'intestazione Consenti non è sufficiente per le raccolte. Questo è se devi sapere se un'operazione è consentita per articolo. Un client può scorrere gli articoli nella raccolta ed eseguire una richiesta http OPTIONS su ciascuno, ma ...

L'altra opzione per le raccolte consiste nell'aggiungere i metodi consentiti da qualche parte negli oggetti oggetto. Tendo a metterli con i link (o _link se ti trovi in HAL ):

  GET / things
  Allow: GET, POST

  {
      comment: "Collection of things",
      items: [{
          name: "thing 1"
          links: {
              self: {
                  href: '/things/1',
                  allow: ['GET', 'PUT','DELETE']
              }
          }
      }, {
          name: "thing 2"
          links: {
              self: {
                  href: '/things/1',
                  allow: ['GET', 'PUT']
              }
          }
      }]
  }
    
risposta data 09.08.2016 - 11:37
fonte

Leggi altre domande sui tag