Sto costruendo un'API Web REST utilizzando il framework Rango di Django. Le cose stanno andando alla grande, ma io, comunque, mi sono imbattuto in un problema con le risorse annidate. All'inizio, tutte le relazioni nell'API REST erano collegate tramite hyperlink. Un post, per esempio, si presentava così:Django REST Framework: quando creare una risorsa con collegamenti ipertestuali e una risorsa nidificata? Come postare una risorsa nidificata?
{
"path": "http://api.myproject.com/posts/1.json",
"id": 1,
"author": "http://api.myproject.com/users/broak.json",
"image": "/images/posts/cxyUzlPo.jpg",
"header": "Who am I?",
"footer": "I am a champion!",
"date": "2014-11-09 15:16",
"likes": "http://api.myproject.com/posts/1/likes.json",
"comments": "http://api.myproject.com/posts/1/comments.json",
"likes_count": 0,
"comments_count": 0
}
Il rapporto tra il palo e l'autore (utente) si è stati rinviati. Quando si desidera creare un nuovo post, è necessario specificare un collegamento ipertestuale corretto per un utente specifico: questo funziona correttamente.
Quando si chiama un elenco di post, le cose diventano inefficienti, perché è necessario effettuare una chiamata API aggiuntiva per ogni autore per ogni post. Ho risolto questo problema utilizzando risorse NESTED anziché risorse HYPERLINKED, quindi ogni post contiene ora tutte le informazioni sull'autore.
{
"path": "http://api.myproject.com/posts/1.json",
"id": 1,
"author": {
"email": "[email protected]"
"username": "broak",
"first_name: "John",
"last_name": "Broak",
"is_staff": False,
"is_active": True,
"last_login": "02-26-2016"
},
"image": "/images/posts/cxyUzlPo.jpg",
"header": "Who am I?",
"footer": "I am a champion!",
"date": "2014-11-09 15:16",
"likes": "http://api.myproject.com/posts/1/likes.json",
"comments": "http://api.myproject.com/posts/1/comments.json",
"likes_count": 0,
"comments_count": 0
}
mia prima domanda è: avete una linea guida, se devo creare una struttura dati nidificato o un endpoint separato con collegamento ipertestuale ad esso.
La mia seconda domanda è: quando uso autore come risorsa nidificata e voglio creare un nuovo post, non voglio specificare tutte le informazioni sull'autore (nome utente, e-mail, ...). Esiste un modo per utilizzare semplicemente un collegamento a un utente per l'operazione CREATE/UPDATE? O modificare qualcosa in modo che l'ID utente sia sufficiente per compilare questo campo?