Rest Api und komplexe Objekte

DrPils

Bekanntes Mitglied
Moin,

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?
 

Oneixee5

Top Contributor
Es fehlen noch einige Informationen um konkret zu antworten, z.B.: Datenmenge
@see https://restfulapi.net/rest-api-design-tutorial-with-example/
Die Vorgehensweisen mit der URL dürften am langsamsten und ressourcenintensiven sein, da immer wieder Anfragen an den Server erfolgen müssen und diese immer wieder vom Server einzeln beantwortet werden. Es spricht erst mal nichts dagegen. dass man einzelne Objekte abrufen kann. Wenn der Client aber sowieso eine große Datenmenge benötigt, kann es effektiver sein die Daten entsprechend in einem Rutsch zu laden.
Ich mache mir in meinen Projekten eigentlich gar nicht so viele Gedanken dazu wie das JSON aussehen könnte. Ich überlege mir wie die Anforderungen an meine Objekte sind und diese aufgebaut sein müssen, die Serialisierung und Deserialisierung erledigt i.d.R. das Framework.
 

DrPils

Bekanntes Mitglied
Es fehlen noch einige Informationen um konkret zu antworten, z.B.: Datenmenge
@see https://restfulapi.net/rest-api-design-tutorial-with-example/
Die Vorgehensweisen mit der URL dürften am langsamsten und ressourcenintensiven sein, da immer wieder Anfragen an den Server erfolgen müssen und diese immer wieder vom Server einzeln beantwortet werden. Es spricht erst mal nichts dagegen. dass man einzelne Objekte abrufen kann. Wenn der Client aber sowieso eine große Datenmenge benötigt, kann es effektiver sein die Daten entsprechend in einem Rutsch zu laden.
Ich mache mir in meinen Projekten eigentlich gar nicht so viele Gedanken dazu wie das JSON aussehen könnte. Ich überlege mir wie die Anforderungen an meine Objekte sind und diese aufgebaut sein müssen, die Serialisierung und Deserialisierung erledigt i.d.R. das Framework.
Ja der Client bin ich :D
Ich schreibe mir gerade eine Rest API zur Übung und möchte ein gutes Rest Design umsetzen.
Vielleicht ist HATEOAS etwas für dich.
Ja Hateoas ist mir bekannt. Finde es auch gut, ich sah da nur dass Problem dass beim Post request irgendwelche links im Body erwartet werden. Aber so wie ich es jetzt verstanden habe, können die Objekte beim Post durchaus eine andere Struktur haben als die von Get requests
 

Ähnliche Java Themen

Neue Themen


Oben