JSON-Daten im Web

💡

Dauer: 20 Minuten

Themen:

  • JSON als Datenaustauschformat
  • my-json-server als API für statische JSON-Daten

Ziel: Eigene Datenquellen im Web erstellen

👨🏻‍💻

Durch das LiveCoding werden die folgenden Konzepte ausführlicher erläutert und vorgeführt.

JSON

Wenn Webanwendungen Daten von anderen Webservices laden, dann geschieht dies meistens im JSON-Format. JSON steht für JavaScript Object Notation und ist stark an die Syntax von JavaScript-Objekte angelehnt.

Betrachten wir nochmals ein JavaScript-Array:

const temperatures = [
  { name: 'Hamburg', temp: 2 },
  { name: 'Paris', temp: 4 },
  { name: 'New York', temp: -1 },
  { name: 'Sydney', temp: 20 },
];

In JSON hat dieses Array folgende Form:

[
  {"name":"Hamburg","temp":2},
  {"name":"Paris","temp":4},
  {"name":"New York","temp":-1},
  {"name":"Sydney","temp":20}
]

Die JSON-Datenstruktur stellt alle Eigenschaften (hier name und temp) als Strings dar und kann somit auch als ganzes durch einen String zur Datenübertragung repräsentiert werden.

JSON-Strings lassen sich leicht in JavaScript-Objekte umwandeln, weshalb sich dieses Datenformat sehr gut für den Datenaustausch in Webanwendungen eignet.

my-json-server als API für statische JSON-Daten

Mit Hilfe von my-json-server können statische JSON-Datenquellen als einfache Webservices bereitgestellt werden. Dazu ist lediglich eine Datei namens db.json nötig, welche die JSON-Daten enthält:

{ 
  "locations": [
    { "id": 1, "name": "Hamburg", "temp": 2 },
    { "id": 2, "name": "Paris", "temp": 4 },
    { "id": 3, "name": "New York", "temp": -1 },
    { "id": 4, "name": "Sydney", "temp": 20 }
  ]
}

Hier wurden zusätzlich id-Eigenschaften erstellt, die den eindeutigen Zugriff auf einzelnen Datensätze für die Orte erleichtern. Mit der Eigenschaft locations werden die Daten in einer „Ressource“ zusammengefasst.

Wenn die Datei db.json im Hauptverzeichnis eines GitHub-Repositories gespeichert wird, dann kann auf die Daten via my-json.server.typicode.com zugegriffen werden, z.B.:

https://my-json-server.typicode.com/behrends/workshops/locations/3

⟶ Siehe dazu db.json in github.com/behrends/workshops

Durch die Datei db.json in einem GitHub-Repository (GITHUB-REPO) eines dort registrierten Accounts (GITHUB-USER) kann also auf einzelne Datensätze mit einer bestimmten ID (oben 3) in einem Ressource (RESOURCE, oben locations) dynamisch zugegriffen werden:

https://my-json-server.typicode.com/GITHUB-USER/GITHUB-REPO/RESOURCE/ID

In den JSON-Daten bzw. db.json werden „äußere“ Schlüssel als „Ressource“ (siehe locations oben) und id-Attribute benötigt, damit die eindeutige Adressierung einzelner Datensätze in einer URL gelingt.

Somit ist es also möglich, mit relativ wenig Aufwand eine statische JSON-Datenquelle im Web bereitzustellen.

👨🏻‍💻

Daten via my-json-server z.B. direkt im Browser laden.

👨🏻‍💻

ggf. Übung: eigene Datei db.json mit anderer Datenstruktur erstellen und bei GitHub veröffentlichen und die URL für den zweiten Eintrag erstellen (burger):

{
  "food": [
    {"id":1,"name":"pizza"},
    {"id":2,"name":"burger"},
    {"id":3,"name":"schnitzel"}
  ]
}

Wir werden diese Datenquelle nutzen, um auf diese mit fetch aus der Webanwendung zuzugreifen.