Beispiele rest json: Unterschied zwischen den Versionen
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 | + | #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" } }
- 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).