{"id":20258,"date":"2023-07-04T02:08:34","date_gmt":"2023-07-04T00:08:34","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=20258"},"modified":"2023-07-03T20:57:47","modified_gmt":"2023-07-03T18:57:47","slug":"node-npm-auf-dem-raspberry-pi-zero-installieren-und-eine-einfache-loesung-fuer-das-mocking-von-api-endpunkten-mit-json-rest-server","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=20258","title":{"rendered":"Node (npm) auf dem Raspberry PI Zero installieren und eine einfache L\u00f6sung f\u00fcr das Mocking von API-Endpunkten mit JSON-REST-Server"},"content":{"rendered":"<p>In der Welt der Webentwicklung ist es oft notwendig, mit Daten zu arbeiten, die \u00fcber eine REST-API bereitgestellt werden. Bei der Entwicklung von Frontend-Anwendungen m\u00fcssen Entwickler h\u00e4ufig mit Mock-APIs arbeiten, um ihre Anwendungen unabh\u00e4ngig von der tats\u00e4chlichen Backend-Implementierung zu testen. JSON-Server ist eine gro\u00dfartige L\u00f6sung f\u00fcr dieses Problem. In diesem Artikel werden wir uns mit JSON-Server befassen und erfahren, wie er verwendet werden kann, um einen einfachen Mock-Server f\u00fcr die Entwicklung von Webanwendungen bereitzustellen. Zuerst zeige ich, wie Node und NPM auf dem PI Zero installiert werden kann.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/gehirn.webp\" alt=\"\" width=\"1920\" height=\"1080\" class=\"aligncenter size-full wp-image-20260\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/gehirn.webp 1920w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/gehirn-300x169.webp 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/gehirn-1024x576.webp 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/gehirn-768x432.webp 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/gehirn-1536x864.webp 1536w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Was ist JSON-Server?<\/p>\n<p>JSON-Server ist ein einfaches, aber leistungsstarkes Werkzeug, mit dem Entwickler in k\u00fcrzester Zeit einen voll funktionsf\u00e4higen RESTful-API-Mock-Server erstellen k\u00f6nnen. Es basiert auf Node.js und verwendet eine JSON-Datei als Datenquelle. Mit JSON-Server k\u00f6nnen Entwickler API-Endpunkte erstellen, Daten hinzuf\u00fcgen, aktualisieren, l\u00f6schen und abfragen, ohne eine eigentliche Backend-Implementierung schreiben zu m\u00fcssen.<\/p>\n<p>Dann mal los &#8230; <!--more--><\/p>\n<pre class=\"lang:default decode:true \" >\r\n# Lade das tar von https:\/\/unofficial-builds.nodejs.org\/download\/release\/  (Achtung: es muss armv6l und .xz f\u00fcr den Zero sein)\r\nwget https:\/\/unofficial-builds.nodejs.org\/download\/release\/v20.3.1\/node-v20.3.1-linux-armv6l.tar.xz\r\n# Auspacken des geladenen tar\r\ntar xvfJ node-v20.3.1-linux-armv6l.tar.xz\r\n# Das ausgepackte Archive nach \/usr\/local kopieren\r\nsudo cp -R node-v20.3.1-linux-armv6l\/* \/usr\/local\r\n# Optional: Verzeichnis und tar l\u00f6schen\r\nrm -rf node-*\r\n\r\n# Datei ~\/.profile um Path erweitern\r\nsudo vi ~\/.profile\r\n# ganz am Ende anf\u00fcgen\r\nPATH=$PATH:\/usr\/local\/bin\r\n\r\n# reboot\r\nsudo reboot\r\n\r\n\r\n# Check der Versionen\r\nnode -v &amp;&amp; npm -v\r\n# Ergebnis, ok:\r\nv20.3.1\r\n9.6.7\r\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/glass.webp\" alt=\"\" width=\"1920\" height=\"1080\" class=\"aligncenter size-full wp-image-20259\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/glass.webp 1920w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/glass-300x169.webp 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/glass-1024x576.webp 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/glass-768x432.webp 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/07\/glass-1536x864.webp 1536w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Nun installieren wir einen <a href=\"https:\/\/github.com\/typicode\/json-server\" rel=\"noopener\" target=\"_blank\">JSon-Test-REST-Server<\/a> in 10 Minuten.<\/p>\n<pre class=\"lang:default decode:true \" >\r\n\r\nsudo npm install -g json-server\r\n\r\n# dann legen wir eine JSon Datei an, die der Server zur\u00fcckliefert\r\nvi db.json \r\n# mit dem Inhalt:\r\n\r\n{\r\n  \"posts\": [\r\n    { \"id\": 1, \"title\": \"Beispiel json-server\", \"author\": \"Thomas Wenzlaff\" }\r\n  ],\r\n  \"comments\": [\r\n    { \"id\": 1, \"body\": \"some comment\", \"postId\": 1 }\r\n  ],\r\n  \"profile\": { \"name\": \"typicode\" }\r\n}\r\n\r\n# nun starten wir den Server mit\r\njson-server --watch db.json\r\n# es kommt dann diese Startmeldung:\r\n  \\{^_^}\/ hi!\r\n\r\n  Loading db.json\r\n  Done\r\n\r\n  Resources\r\n  http:\/\/localhost:3000\/posts\r\n  http:\/\/localhost:3000\/comments\r\n  http:\/\/localhost:3000\/profile\r\n\r\n  Home\r\n  http:\/\/localhost:3000\r\n\r\n  Type s + enter at any time to create a snapshot of the database\r\n  Watching...\r\n\r\nGET \/posts 200 104.908 ms - 77\r\nGET \/posts\/1 200 33.546 ms - 63\r\n\r\n# 1. Abfrage in neuer Konsole mit lynx Browser\r\nlynx http:\/\/localhost:3000\/posts\/1\r\n\r\n# und speichern des Ergebnis\r\n{\r\n  \"id\": 1,\r\n  \"title\": \"Beispiel json-server\",\r\n  \"author\": \"Thomas Wenzlaff\"\r\n}\r\n<\/pre>\n<p>Oder auch ein weiteres Beispiel mit einer users.json Beispiel Datei:<\/p>\n<pre class=\"lang:default decode:true \" >{\r\n  \"users\": [\r\n    { \"id\": 1, \"name\": \"Thomas Wenzlaff\" },\r\n    { \"id\": 2, \"name\": \"Jane Smith\" },\r\n    { \"id\": 3, \"name\": \"Alice Johnson\" }\r\n  ]\r\n}<\/pre>\n<p>Start dann mit<br \/>\n<strong>json-server &#8211;watch users.json<\/strong><br \/>\nAbfrage dann<br \/>\n<strong>http:\/\/localhost:3000\/users<\/strong><\/p>\n<p>Verwendung von JSON-Server<\/p>\n<p>Sobald der JSON-Server l\u00e4uft, k\u00f6nnen Sie auf die API-Endpunkte zugreifen und mit den Daten interagieren. Hier sind einige Beispiele f\u00fcr die Verwendung von JSON-Server:<\/p>\n<p>    GET-Anfrage: Um alle Benutzer abzurufen, senden Sie eine GET-Anfrage an http:\/\/localhost:3000\/users. Sie erhalten eine JSON-Antwort mit allen Benutzerdaten.<\/p>\n<p>    POST-Anfrage: Um einen neuen Benutzer hinzuzuf\u00fcgen, senden Sie eine POST-Anfrage an http:\/\/localhost:3000\/users mit den entsprechenden Daten im Anfragek\u00f6rper.<\/p>\n<p>    PUT-Anfrage: Um einen vorhandenen Benutzer zu aktualisieren, senden Sie eine PUT-Anfrage an http:\/\/localhost:3000\/users\/:id, wobei :id die ID des Benutzers ist, den Sie aktualisieren m\u00f6chten.<\/p>\n<p>    DELETE-Anfrage: Um einen Benutzer zu l\u00f6schen, senden Sie eine DELETE-Anfrage an http:\/\/localhost:3000\/users\/:id, wobei :id die<\/p>\n<p>Noch besser ist, man kann leicht Testdaten automatisch erzeugen. Z.B. 1000 User. Daf\u00fcr eine index.js Datei mit diesen Inhalt anlegen:<\/p>\n<pre class=\"lang:js decode:true \" >\r\n\r\n\/\/ index.js\r\nmodule.exports = () =&gt; {\r\n  const data = { users: [] }\r\n  \/\/ Erzeuge 1000 users\r\n  for (let i = 0; i &lt; 1000; i++) {\r\n    data.users.push({ id: i, name: `user${i}` })\r\n  }\r\n  return data\r\n}<\/pre>\n<p>Start dann mit<br \/>\n<strong>json-server &#8211;watch index.js<\/strong><br \/>\nAbfrage dann aller User<br \/>\n<strong>http:\/\/localhost:3000\/users<\/strong><br \/>\noder den mit der Nummer 998<br \/>\n<strong>lynx http:\/\/localhost:3000\/users\/998<\/strong><\/p>\n<p>Es k\u00f6nnen auch <strong>statische Webseiten<\/strong> ausgeliefert werden.<\/p>\n<p>Weitere Infos, siehe <a href=\"https:\/\/github.com\/typicode\/json-server\" rel=\"noopener\" target=\"_blank\">auf der typicode JSON-Server Seite<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In der Welt der Webentwicklung ist es oft notwendig, mit Daten zu arbeiten, die \u00fcber eine REST-API bereitgestellt werden. Bei der Entwicklung von Frontend-Anwendungen m\u00fcssen Entwickler h\u00e4ufig mit Mock-APIs arbeiten, um ihre Anwendungen unabh\u00e4ngig von der tats\u00e4chlichen Backend-Implementierung zu testen. JSON-Server ist eine gro\u00dfartige L\u00f6sung f\u00fcr dieses Problem. In diesem Artikel werden wir uns mit &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=20258\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eNode (npm) auf dem Raspberry PI Zero installieren und eine einfache L\u00f6sung f\u00fcr das Mocking von API-Endpunkten mit JSON-REST-Server\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,2173,566,808,1023,2752],"tags":[5429,503,2475,5430,1531,2789],"class_list":["post-20258","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-debian","category-hardware","category-linux-2","category-raspberry-pi","category-raspberry-pi-zero-w","tag-armv6l","tag-install","tag-node","tag-nodejs","tag-npm","tag-zero"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/20258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=20258"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/20258\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=20258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=20258"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=20258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}