Beispiele rest json: Unterschied zwischen den Versionen

Aus bafbal.de
Zur Navigation springen Zur Suche springen
Zeile 65: Zeile 65:
 
   
 
   
 
  #code  url=https://api.predic8.de/shop/products/
 
  #code  url=https://api.predic8.de/shop/products/
  #code  nurl="https://api.predic8.de/shop/products/$STREXTR($JSON_VALUE(1,meta.next_url),ffe,/shop/products/)"
+
  #code  nurl="https://api.predic8.de$JSON_VALUE(1,meta.next_url)"
 
  #code  ready=$EMPTY($JSON_VALUE(1,meta.next_url))
 
  #code  ready=$EMPTY($JSON_VALUE(1,meta.next_url))
 
  #http_loop_json  y=get    se=N  $CODE$  isc=Y  m=20
 
  #http_loop_json  y=get    se=N  $CODE$  isc=Y  m=20
Zeile 73: Zeile 73:
 
  #cout  c="c_test_json executed"
 
  #cout  c="c_test_json executed"
  
Die Prozedur #http_loop_json verwendet y=get als Method, wir wollen schließlich Daten abfragen. Als url verwenden wir die Seite https://api.predic8.de/shop/products/.
+
Die Prozedur #http_loop_json verwendet y=get als Method, wir wollen schließlich Daten abfragen. Als url verwenden wir die Seite https://api.predic8.de/shop/products/.
 +
 
 +
Sobald die erste Seite da ist, wird die nächste Seite aufgerufen, und deren URL wird mit nurl ("next URL") angegeben. Dazu wird aus dem Anwort-JSON das Feld meta-next_url extrahiert ($JSON_VALUE(1,meta.next_url), #http_loop_json arbeitet auf dem ersten JSON), davor wird der Rest der erforderlichen URL ergänzt. Daneben benötigt #http_loop_json auch noch einen Hinweis, wann die Schleife beendet werden soll, das ist dann der Fall, wenn meta.next_url leer ist. Sicherheitshalber setzt man bei #http_loop_json noch m=20, nach spätestens 20 Seiten wird also auch abgebrochen.
 +
 
 +
Da der Server ein abgelaufenes Zertifikat hat, setzen wir isc=Y. Anschließend wird mit #coutl $JSON_TEXT(1,frm) das Ergebnis formatiert ausgegeben:
 +
 
 +
{
 +
  "products": [
 +
    {
 +
      "name": "Bananas",
 +
      "product_url": "/shop/products/3"
 +
    },
 +
    {
 +
      "name": "Oranges",
 +
      "product_url": "/shop/products/10"
 +
    },
 +
    {
 +
      "name": "Pineapples",
 +
      "product_url": "/shop/products/33"
 +
    },
 +
      ...
 +
    {
 +
      "name": "Pistachio",
 +
      "product_url": "/shop/products/76"
 +
    }
 +
  ],
 +
  "meta": {
 +
    "count": 32,
 +
    "limit": 10,
 +
    "page": 4,
 +
    "previous_url": "/shop/products/?page=3&limit=10"
 +
  }
 +
}
 +
 
 +
#http_loop_json fügt bei Arrays auf der obersten Ebene (hier ''products'') weitere Array-Elemente hinzu (die Anzeige eben wurde an der Stelle ... gekürzt, die Liste wäre sonst deutlich länger), während Objekte überschrieben werden (hier ''meta'').

Version vom 31. Dezember 2022, 11:27 Uhr

Daten von einem REST-Server holen, anzeigen und bearbeiten

Der REST-Server

Unter https://api.predic8.de/shop/products/ ist ein REST-Server zu finden, der als Beispiel-Server der Allgemeinheit zur Verfügung steht. Der Aufruf der URL gibt die folgenden Daten zurück:

{
   "meta": {
       "count": 32,
       "limit": 10,
       "page": 1,
       "next_url": "/shop/products/?page=2&limit=10"
   },
   "products": [
       {
           "name": "Bananas",
           "product_url": "/shop/products/3"
       },
       {
           "name": "Oranges",
           "product_url": "/shop/products/10"
       },
       {
           "name": "Pineapples",
           "product_url": "/shop/products/33"
       },
       {
           "name": "Dried Pineapples",
           "product_url": "/shop/products/42"
       },
       {
           "name": "Cranberries",
           "product_url": "/shop/products/57"
       },
       {
           "name": "Mango fresh",
           "product_url": "/shop/products/62"
       },
       {
           "name": "Raspberries",
           "product_url": "/shop/products/90"
       },
       {
           "name": "Cherries",
           "product_url": "/shop/products/7"
       },
       {
           "name": "Apple",
           "product_url": "/shop/products/18"
       },
       {
           "name": "Green Grapes",
           "product_url": "/shop/products/11"
       }
   ]
}

Daten von mehreren Seiten zusammenfassen

Die Daten sind auf mehrere Seiten aufgeteilt. Für unsere Zwecke müssen wir sie zusammenfassen. Dazu eignet sich die Prozedur #http_loop_json.

In solchen Fällen hat es sich bewährt, das erst mal als Konsolen-Anwendung zu realisieren, und das dann in die konkrete Anwendung zu kopieren. Diese Konsolen-Anwendung würde wie folgt aussehen:

#frm  c="c_test_json"   y=console

#code   url=https://api.predic8.de/shop/products/
#code   nurl="https://api.predic8.de$JSON_VALUE(1,meta.next_url)"
#code   ready=$EMPTY($JSON_VALUE(1,meta.next_url))
#http_loop_json   y=get    se=N   $CODE$   isc=Y   m=20

#coutl $JSON_TEXT(1,frm)

#cout  c="c_test_json executed"

Die Prozedur #http_loop_json verwendet y=get als Method, wir wollen schließlich Daten abfragen. Als url verwenden wir die Seite https://api.predic8.de/shop/products/.

Sobald die erste Seite da ist, wird die nächste Seite aufgerufen, und deren URL wird mit nurl ("next URL") angegeben. Dazu wird aus dem Anwort-JSON das Feld meta-next_url extrahiert ($JSON_VALUE(1,meta.next_url), #http_loop_json arbeitet auf dem ersten JSON), davor wird der Rest der erforderlichen URL ergänzt. Daneben benötigt #http_loop_json auch noch einen Hinweis, wann die Schleife beendet werden soll, das ist dann der Fall, wenn meta.next_url leer ist. Sicherheitshalber setzt man bei #http_loop_json noch m=20, nach spätestens 20 Seiten wird also auch abgebrochen.

Da der Server ein abgelaufenes Zertifikat hat, setzen wir isc=Y. Anschließend wird mit #coutl $JSON_TEXT(1,frm) das Ergebnis formatiert ausgegeben:

{
 "products": [
   {
     "name": "Bananas",
     "product_url": "/shop/products/3"
   },
   {
     "name": "Oranges",
     "product_url": "/shop/products/10"
   },
   {
     "name": "Pineapples",
     "product_url": "/shop/products/33"
   },
     ...
   {
     "name": "Pistachio",
     "product_url": "/shop/products/76"
   }
 ],
 "meta": {
   "count": 32,
   "limit": 10,
   "page": 4,
   "previous_url": "/shop/products/?page=3&limit=10"
 }
}
  1. http_loop_json fügt bei Arrays auf der obersten Ebene (hier products) weitere Array-Elemente hinzu (die Anzeige eben wurde an der Stelle ... gekürzt, die Liste wäre sonst deutlich länger), während Objekte überschrieben werden (hier meta).