Ho una domanda sul modo in cui sto architettando un'API.
Struttura
La mia struttura API è così così ( ci sono circa 10 classi in totale, ma molte sono simili, quindi ho ridotto a queste classi e rimosso campi che non sono rilevanti per la domanda ):
Profilo
- id (identificatore univoco per questo profilo)
- Allergie
- raggi X
Allergie
- id (ID univoco per questa allergia)
- Profilo (questo rimanda al profilo che possiede queste allergie)
- nome (a cosa sono allergici)
raggi X
- id (ID univoco per questa radiografia)
- Profilo (punta al profilo che possiede questi raggi X)
- miniatura (una versione compressa dell'immagine a raggi X)
- fullImage (l'immagine radiografica completa non compressa)
Use Case
-
I profili vengono inviati per intero al filo, tranne che nella classe X-Rays, la miniatura viene inviata al posto dell'immagine intera. Quando l'utente desidera vedere l'immagine a raggi X completa, quindi effettua un'altra chiamata per scaricare l'immagine completa (questo è fatto per risparmiare larghezza di banda, è possibile che un utente abbia 100 raggi X a 10 MB ciascuno!).
-
Un utente può apportare modifiche a Allergies o X-Rays e queste modifiche dovrebbero essere inviate al server. Sarebbe inutile mandare indietro l'intero oggetto del profilo, quindi vorrei inviare solo il singolo oggetto X-Ray o Allergies al server.
Le preoccupazioni
Cosa deve restituire la mia API (il formato della risposta sarà JSON) quando un utente scarica un profilo completo?
{
"Profile": {
"id": "1234",
"Allergies": {
"id": "5678",
"Profile": {
"What goes here? This is a circular reference!
I need to include a reference back to the profile
so I can edit this Allergy client side and push the changes.
Maybe it should be the User ID of the profile,
but I'm not so sure that is a good idea"
},
"name": "peanuts"
},
"X-Rays": {
"id": "3456",
"Profile"{
...
},
"thumbnail": "Base 64 encode of the thumbnail image"
}
}
}