Moin,
Was ist denn best Practice bei Rest Apis mit komplexen Objekten?
Angenommen ich habe folgende Struktur:
Wie wuerde jetzt im besten Falle das JSON Objekt der Rest API aussehen?
Erste alternative wäre ja 1:1 die Struktur übernehmen.
Zweite Alternative ist es nur die IDs der felder zu verwenden.
Dritte alternative wäre es mit Links zu arbeiten.
Dann gibt es noch eine vierte Alternative, welche eine Mischung aus den letzten zwei ist. Statt den ids aus der zweiten Alternative nehme ich wichtige Informationen wie zb den Titel oder Namen und fuer details biete ich die links aus Alternative 3 an.
Die letzte gefällt mir bis am besten. Die Daten sind relativ kompakt und durch die links ist die Navigation durch die api sehr einfach.
Aber wie sieht das in einer optimalen Rest Api aus? Was ist mit POST Requests, unterscheiden sich da die Json Struktur von der im GET Request?
Was ist denn best Practice bei Rest Apis mit komplexen Objekten?
Angenommen ich habe folgende Struktur:
Java:
class Cinema {
int id;
String name;
Person manager;
Set<MovieShowing> movieShowings;
}
class Person {
int id;
String name;
LocalDate dayOfBirth;
}
class MovieShowing {
int id;
Movie movie;
LocalDateTime begin;
}
class Movie {
int id;
String name;
int duration;
}
Wie wuerde jetzt im besten Falle das JSON Objekt der Rest API aussehen?
Erste alternative wäre ja 1:1 die Struktur übernehmen.
JSON:
{
"id": 1,
"name": "Super Kino",
"manager": {
"id": 1,
"name": "Walter",
"dayOfBirth": "2000-10-10"
},
"movieShowings": [
{
"id": 1,
"begin": "2022-01-01T18:45:00",
"movie": {
"id": 1,
"name": "Krieg der Sterne",
"duration": 121
}
},
{
"id": 2,
"begin": "2022-01-01T18:45:00",
"movie": {
"id": 2,
"name": "Das Imperium schlaegt zurueck",
"duration": 124
}
}
]
}
Zweite Alternative ist es nur die IDs der felder zu verwenden.
JSON:
{
"id": 1,
"name": "Super Kino",
"manager": 1,
"movieShowings": [1, 2]
}
Dritte alternative wäre es mit Links zu arbeiten.
JSON:
{
"id": 1,
"name": "Super Kino",
"links": {
"self": {
"href": "https://api.example.org/cinemas/1"
},
"manager": {
"href": "https://api.example.org/managers/1"
},
"showings": {
"href": "https://api.example.org/cinemas/1/showings"
}
}
}
Dann gibt es noch eine vierte Alternative, welche eine Mischung aus den letzten zwei ist. Statt den ids aus der zweiten Alternative nehme ich wichtige Informationen wie zb den Titel oder Namen und fuer details biete ich die links aus Alternative 3 an.
JSON:
{
"id": 1,
"name": "Super Kino",
"manager" : "Walter",
"showings" : ["Krieg der Sterne", "Das Imperium schlaegt zurueck"],
"links": {
"self": {
"href": "https://api.example.org/cinemas/1"
},
"manager": {
"href": "https://api.example.org/managers/1"
},
"showings": {
"href": "https://api.example.org/cinemas/1/showings"
}
}
}
Die letzte gefällt mir bis am besten. Die Daten sind relativ kompakt und durch die links ist die Navigation durch die api sehr einfach.
Aber wie sieht das in einer optimalen Rest Api aus? Was ist mit POST Requests, unterscheiden sich da die Json Struktur von der im GET Request?