Sto cercando di capire quale sia l'approccio migliore quando si gestiscono i riferimenti agli oggetti in un JSON da inviare al mio server per la deserializzazione.
Per chiarire, ciò che intendo è come fare riferimento ai dati contenuti nel corpo JSON stesso.
Per l'esempio, utilizziamo il seguente (non corretto) corpo JSON:
{
"players": [
{ "name": "Player 1" },
{ "name": "Player 2" },
{ "name": "Player 3" },
{ "name": "Player 4" }
],
"teams": [
{
"name": "Team 1",
"players": [ player1, player2 ],
},
{
"name": "Team 2",
"players": [ player3, player4 ],
},
]
}
Ho bisogno di alcuni mezzi per riferirsi a quei playerX , che rappresenterebbero i giocatori inviati nella lista giocatori (Giocatore 1, Giocatore 2, ecc ...), come puoi immaginare.
Posso pensare a tre diversi modi per farlo e nessuno mi soddisfa:
Il primo modo è semplicemente riferirsi al giocatore come alla sua posizione nell'elenco giocatori , in questo modo non sono necessarie ulteriori informazioni nel corpo JSON. Ad esempio, se avessimo "teams": [ [ 0, 1 ], [ 2, 3 ] ]
, vorremmo dire che abbiamo due squadre, la prima composta da P1 e P2 e la seconda da P3 e P4.
Gli altri due modi utilizzerebbero entrambi gli ID (avrei bisogno di implementare un sistema di ID per i miei giocatori, dal momento che finora non ho avuto bisogno di ID). Tuttavia, poiché i giocatori non esistono ancora nel sistema, i loro ID sono sconosciuti. Come vedo, possiamo fare due cose:
Possiamo inviare esplicitamente gli ID giocatore al server, ma dovremmo sviluppare modi per preservare l'unicità dell'ID. Preferirei che questi non venissero gestiti dall'utente, a dire il vero, oltre che essere autogenerati. Il modo in cui rappresenteremmo i giocatori nella lista squadre sembrerebbe lo stesso della prima scelta in formato, ma invece delle posizioni avremmo l'IDS:
{
"players": [
{ "id": 1, "name": "Player 1" },
{ "id": 2, "name": "Player 2" },
{ "id": 3, "name": "Player 3" },
{ "id": 4, "name": "Player 4" }
],
"teams": [
[ 1, 2 ], [ 3, 4 ]
]
}
La seconda opzione è più sicura in termini di generazione ID, ma richiede due passaggi. Per prima cosa inviamo i dati del giocatore al server, quindi l'utente può chiedere al server le informazioni sui giocatori e controllare i loro ID. In questo modo creano i team in modo sicuro perché l'ID è stato generato dal server.
Passaggio 1. Invia giocatori.
{
"players": [
{ "name": "Player 1" },
{ "name": "Player 2" },
{ "name": "Player 3" },
{ "name": "Player 4" }
]
}
Passaggio 2. Interrogare i giocatori. GET /players
{
"players": [
{ "id": 11, "name": "Player 1" },
{ "id": 12, "name": "Player 2" },
{ "id": 13, "name": "Player 3" },
{ "id": 14, "name": "Player 4" }
]
}
Passaggio 3. Invia team.
{
"teams": [
[ 11, 12 ], [ 13, 14 ]
]
}
Quindi, come viene solitamente trattato? In che modo gli sviluppatori di API JSON affrontano questo scenario?