Ich erstelle eine REST-Web-API mit dem Django REST Framework. Die Dinge laufen gut, aber ich bin auf ein Problem mit verschachtelten Ressourcen gestoßen. Zunächst wurden alle Beziehungen in der REST-API durch Hyperlinks verknüpft. Ein Post, zum Beispiel, sah wie folgt aus:Django REST Framework: wann eine verlinkte Ressource und wann eine verschachtelte Ressource erstellen? Wie verschicken Sie eine verschachtelte Ressource?
{
"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
}
Die Beziehung zwischen dem Pfosten und dem Autor (Benutzer) mittels Hyperlink verwiesen wird. Wenn Sie einen neuen Beitrag erstellen möchten, müssen Sie einen korrekten Hyperlink zu einem bestimmten Benutzer angeben. Dies funktioniert einwandfrei.
Wenn Sie eine Liste von Posts aufrufen, werden die Dinge ineffizient, weil Sie für jeden Autor einen extra API-Aufruf für jeden Post machen müssen. Ich löste das, indem ich NESTED-Ressourcen anstelle von HYPERLINKED-Ressourcen einsetzte, sodass jeder Beitrag nun alle Informationen über den Autor enthält.
{
"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
}
Meine erste Frage ist: Haben Sie einen Leitfaden haben, ob ich eine verschachtelte Datenstruktur oder einen separaten Endpunkt mit Hyperlink es schaffen sollte.
Meine zweite Frage ist: Wenn ich Autor als verschachtelte Ressource verwenden und einen neuen Beitrag erstellen möchte, möchte ich nicht alle Informationen über den Autor angeben (Benutzername, E-Mail, ...). Gibt es eine Möglichkeit, einen Link zu einem Benutzer für die Operation CREATE/UPDATE einfach zu verwenden? Oder ändern Sie etwas, so dass die Benutzer-ID ausreicht, um dieses Feld auszufüllen?