Abbastanza confuso su ciò che costituisce lo stato corrente di una risorsa

1

Da REST in pratica: Hypermedia and Systems Architecture:

The current state of a resource is a combination of:

  • The values of information items belonging to that resource
  • Links to related resources
  • Links that represent a transition to a possible future state of the current resource
  • The results of evaluating any business rules that relate the resource to other local resources

a) perché i " collegamenti alle risorse correlate " rappresentano anche lo stato corrente di una risorsa?

b) Inoltre non capisco perché " I collegamenti che rappresentano una transizione verso un possibile stato futuro della risorsa corrente " rappresentano anche lo stato corrente.

Vale a dire, quei collegamenti rappresentano la possibilità, non lo stato attuale. Analogia sarebbe una variabile int impostata sul valore 10. È possibile che in futuro questa variabile venga elaborata e impostata sul valore 100, ma non rivendichiamo che il suo stato corrente includa anche il possibile stato futuro di 100 ?!

RISPOSTA:

1)

links to related resources: imagine a "chat_room" resource. The links to people in that room will change as they come and go. In other words, a resource's relationships to other resources may change.

a) Ho anche iniziato a imparare la progettazione basata sul dominio e lì un'entità E potrebbe avere entità figlio (quindi E è un genitore in una relazione) e la relazione E con le sue entità figlio può cambiare (ad esempio alcune entità figlio possono essere assegnate a diversi genitori o potrebbe essere cancellato).

Ma anche se E ha una relazione uno-a-molti con le sue entità figlio , non consideriamo tale relazione come rappresentante lo stato corrente di E . Questo è il motivo per cui sono perplesso sul motivo per cui in REST i link alle risorse correlate rappresentano anche lo stato attuale ?!

b)

imagine a university has a "student" resource. There might be a link to "register" in a class, a link to "apply for housing", and links to "tune in", "turn on" and "drop out". Each link may change the state of the object, or may yield appropriate information for the resource state. For example, the correct Student Housing application for that student.

È logico che lo stato della risorsa corrente costituisca anche quei collegamenti alle risorse correlate , che possono indicare la modifica dello stato della risorsa corrente . Ma non ha senso che lo stato della risorsa corrente costituisca anche i link a quelle risorse correlate che non modificano lo stato della risorsa corrente ?!

2)

But the resource may be a sort of state machine. So a "car" resource might have links to "start_engine" if it's stopped. It might links to "speed_up", "slow_down", and if the speed is slow enough, "stop_engine". In other words, links to transition to other valid states based on the current state.

a)

links to transition to other valid states based on the current state.

Suppongo che tu abbia fatto un refuso e che cosa intendi scrivere sia " link per la transizione ad altri stati validi è in base allo stato corrente "?

b) Quindi possiamo dire che il motivo per cui i link che rappresentano le transizioni verso altri stati rappresentano anche lo stato corrente di una risorsa perché < em> ogni risorsa con tali collegamenti potrebbe essere considerata una macchina di stato , e con macchina di stato , collegamenti ad altri stati validi fare rappresenta stato attuale (spero che le mie divagazioni abbiano un senso)?!

2. RISPOSTA:

1)

But it seems more natural in handling structured data to just bundle the "chat_room" and "chat_room_person" information together.

Immagino tecnicamente che le risorse correlate non rappresentino lo stato attuale di una risorsa . Invece, solo i link a queste risorse correlate rappresentano lo stato corrente di una risorsa ?!

2)

In REST, the goal is to eliminate all out-of-band communication. So we supplement the state (ON) with links that represent all the valid transitions for that state. So we want to avoid more documentation. The resource representation can tell us, "This is where I am, and this is where I can go next."

In REST i link che rappresentano le transizioni verso altri stati rappresentano anche lo stato corrente di una risorsa , ma potremmo sostenerlo logicamente (quindi non nel contesto di REST questi collegamenti non rappresentano in realtà lo stato corrente di una risorsa , e quindi solo il motivo per cui in REST rappresentano lo stato corrente di una risorsa è perché REST è costruito attorno a questo assunto (o almeno in questo modo è più efficiente)?

grazie

    
posta bckpwrld 04.06.2014 - 20:33
fonte

2 risposte

2
  • links to related resources : immagina una risorsa "chat_room". I link alle persone in quella stanza cambieranno man mano che vanno e vengono.

In altre parole, le relazioni di una risorsa con altre risorse possono cambiare.

  • links that represent a transition... : un esempio è l'impaginazione. La risorsa potrebbe avere un link "successivo" che rimanda alla pagina 2 dalla pagina 1, pagina 3 dalla pagina 2, ecc.

Ma la risorsa potrebbe essere una sorta di macchina a stati. Quindi una risorsa "auto" potrebbe avere collegamenti a "start_engine" se è stata interrotta. Potrebbe link a "speed_up", "slow_down" e se la velocità è abbastanza lenta, "stop_engine".

In altre parole, link per la transizione ad altri stati validi, in base allo stato corrente.

(Questo non è l'esempio più REST-ful, ma per trasmettere l'idea ...)

  • The results of evaluating business rules : immagina che un'università abbia una risorsa "studente". Potrebbe esserci un collegamento a "register" in una classe, un link a "apply for housing" e link a "tune in", "turn on" e "drop out". Ogni collegamento può cambiare lo stato dell'oggetto o può fornire informazioni appropriate per lo stato della risorsa. Ad esempio, il modulo di domanda per gli alloggi per studenti è adatto in modo specifico per la situazione dello studente.

...

But even though E has one-to-many relationship with its child entities, we don't consider that relationship as also representing the current state of E.

Penso che sia solo una differenza nelle metodologie. Ad esempio, in una tabella di database, non includerei record relativi a una tabella nella tabella stessa; avresti chiavi esterne nell'altra tabella, oppure un array di associazioni. Quindi, proprio come il tuo esempio, lo stato di un record in una tabella di database non include riferimenti ad altre cose (di solito).

In una vista orientata alle risorse, il libro dice che puoi contenere quei link nella risorsa stessa, come parte della definizione della risorsa.

Si noti che non hanno per farlo in quel modo. Potresti ancora avere una risorsa "chat_room", una risorsa "persona" e una risorsa "chat_room_person". Ma sembra più naturale gestire i dati strutturati per raggruppare insieme le informazioni "chat_room" e "chat_room_person".

...

Mi spiace, ho appena aggiunto una virgola per chiarezza: "transizione ad altri stati validi, in base allo stato corrente"

...

Di solito quando rappresentiamo una macchina a stati, diciamo semplicemente "Questo è lo stato: ON". Il cliente deve sapere quali transizioni sono disponibili ora che la cosa è attiva.

In REST, l'obiettivo è eliminare la comunicazione all out-of-band. Quindi integriamo lo stato (ON) con i collegamenti che rappresentano tutte le transizioni valide per quello stato.

Quindi vogliamo evitare più documentazione. La rappresentazione delle risorse può dirci: "Questo è il posto in cui mi trovo, ed è qui che posso andare dopo".

...

related resources themselves don't represent the current state of a resource. Instead, only links to these related resources represent the current state of a resource

Questa è una domanda complicata, perché il significato di "Risorsa" in REST è così straordinariamente ampio. La risposta è, sì, se definisci la tua risorsa in questo modo. E no se non lo fai.

Ad esempio, la "chat_room" potrebbe avere un elenco di link a "persone" nella chat room. Oppure potrebbe includere solo il JSON per ciascuna di queste persone. Se la tua risorsa include i dati nidificati, significa che i dati fanno parte dello stato?

È giusto dire che lo stato della chat non include lo stato delle persone in esso. Ma si trasforma in un tipo di "Uno, ma non lo stesso", che dipende da come lo definisci.

...

in REST they do represent the current state of a resource is because REST is build around that assumption

Penso che sia una dichiarazione giusta. Non ho mai individuato le implicazioni filosofiche di questo, ma in pratica funziona in questo modo.

Ancora una volta, l'idea è di rappresentare il più possibile, in modo che non sia necessaria alcuna comunicazione fuori banda. Questa è la motivazione per far rotolare tutto questo in una Risorsa.

    
risposta data 04.06.2014 - 21:46
fonte
1

Proverò a rispondere con un altro esempio e ad usare del codice per spiegare.

a) why would "links to related resources" also represent the current state of a resource?

Considera questa classe e supponiamo che si tratti dell'implementazione della risorsa REST /Human , che si astragga da vero live (pseudo-codice Python-ish):

class Human:
  offsprings = [] # array of links (e.g. object id) to other Humans
  age = 20
  def is_adult():
     return age >= 20
  def is_parent():
     return len(offsprings) > 0 

peter = Human()
print peter.is_parent()
=> False

kate = Human()
peter.offsprings.append(kate.id)
print peter.is_parent()
=> True

Ora chiaramente is_parent rappresenta un'informazione di stato. Ma questo stato è uno che può essere risolto solo conoscendo i link agli oggetti correlati .

b) I also don't quite understand why "Links that represent a transition to a possible future state of the current resource" also represent the the current state.

Considera un'estensione della risorsa precedente:

class Human:
  offsprings = [] # array of links (e.g. resource id) to other Humans
  avg_expected = [...] # array of statistic resources by birth date
  age = 20
  year_of_birth=1994
  def is_adult():
     return age >= 20
  def is_parent():
     return len(offsprings) > 0
  def live_expectancy():
     # consider the [ ] operator to look up the respective resource
     return avg_expected[year_of_birth] - age 

Ancora, live_expectancy è un'informazione di stato per questa risorsa. E rappresenta un possibile stato futuro, vale a dire la fine della vita. Ma senza il link alla risorsa statistics , è impossibile dirlo.

    
risposta data 05.06.2014 - 23:49
fonte

Leggi altre domande sui tag