<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Programmierung Archives - Nerd Corner</title>
	<atom:link href="https://nerd-corner.com/de/tag/programmierung/feed/" rel="self" type="application/rss+xml" />
	<link>https://nerd-corner.com/de/tag/programmierung/</link>
	<description>Craft your dreams!</description>
	<lastBuildDate>Thu, 18 May 2023 13:48:21 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://nerd-corner.com/wp-content/uploads/2019/10/cropped-LogoNerdCorner-2-32x32.png</url>
	<title>Programmierung Archives - Nerd Corner</title>
	<link>https://nerd-corner.com/de/tag/programmierung/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Tensorflow.js oder Tensorflow nutzen?</title>
		<link>https://nerd-corner.com/de/tensorflow-js-oder-tensorflow-nutzen/</link>
					<comments>https://nerd-corner.com/de/tensorflow-js-oder-tensorflow-nutzen/#comments</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Thu, 18 May 2023 13:48:21 +0000</pubDate>
				<category><![CDATA[Software-DE]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[Deep Learning]]></category>
		<category><![CDATA[GPU]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Natural Language Processing]]></category>
		<category><![CDATA[NLP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Software Vergleich]]></category>
		<category><![CDATA[Tensorflow]]></category>
		<category><![CDATA[Tensorflow Anleitung]]></category>
		<category><![CDATA[TensorFlow GPU]]></category>
		<category><![CDATA[Tensorflow python]]></category>
		<category><![CDATA[Tensorflow.js]]></category>
		<category><![CDATA[Tensorflow.js vs Tensorflow]]></category>
		<category><![CDATA[TPU]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=1380</guid>

					<description><![CDATA[<p>In der Welt des maschinellen Lernens und des Deep Learnings gibt es eine Vielzahl von Tools und Bibliotheken, die Entwicklern dabei helfen, fortschrittliche Modelle zu &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/tensorflow-js-oder-tensorflow-nutzen/">Tensorflow.js oder Tensorflow nutzen?</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In der Welt des maschinellen Lernens und des Deep Learnings gibt es eine Vielzahl von Tools und Bibliotheken, die Entwicklern dabei helfen, fortschrittliche Modelle zu erstellen und trainieren. Zwei beliebte Optionen sind Tensorflow.js und das ursprüngliche Tensorflow, die jeweils für JavaScript und Python entwickelt wurden. Auf Grund eines Projekts bei dem ich mittels NLP (Natural Language Processing) automatisiert Standardsprachtexte in Dialekt umwandeln will habe ich mich näher mit den beiden Optionen beschäftigt. In diesem Blogartikel werde ich die Unterschiede und Vorzüge von Tensorflow.js und Tensorflow (Python) beleuchten. Anschließend sollte jeder in der Lage sein um entscheiden zu können, ob er Tensorflow.js oder Tensorflow (Python) nutzen möchte.</p>
<p><em><strong>Das könnte dich auch interessieren:</strong> <a href="https://nerd-corner.com/de/tensorflow-gpu-aktivieren-unter-windows/">Wie man in Windows die GPU für TensorFlow aktiviert</a></em></p>
<h2>Sprache und Umgebung</h2>
<p>Tensorflow.js wurde speziell für JavaScript entwickelt, was bedeutet, dass sich Modelle direkt in JavaScript-Code implementieren lassen. Dies ermöglicht die nahtlose Integration in Webanwendungen und die Ausführung der Modelle im Browser ohne zusätzliche Serverinfrastruktur.</p>
<p>Tensorflow Python bietet eine umfassende Python-Bibliothek für maschinelles Lernen. Python ist eine weit verbreitete Programmiersprache im Bereich des maschinellen Lernens und bietet eine Vielzahl von Bibliotheken und Frameworks, die die Entwicklung und den Einsatz von Modellen erleichtern.</p>
<h2>Zielplattform</h2>
<p>Eine der größten Stärken von Tensorflow.js ist die Möglichkeit, Modelle direkt im Browser auszuführen. Dies ermöglicht es Entwicklern, interaktive Webanwendungen mit maschinellem Lernen zu erstellen, ohne dass der Nutzer zusätzliche Software installieren oder externe Serveranfragen senden muss.</p>
<p>Tensorflow Python hingegen ermöglicht die Entwicklung und Ausführung von Modellen auf verschiedenen Plattformen, einschließlich Desktop-Computern, Servern und mobilen Geräten. Es bietet eine breite Palette an Funktionen und unterstützt fortschrittliche Techniken wie das Trainieren von Modellen auf GPUs oder TPUs. TPU steht für „Tensor Processing Unit“. Das sind anwendungsspezifische Chips um Anwendungen im Rahmen von maschinellem Lernen zu beschleunigen</p>
<h2>Community</h2>
<p>Wenn man ehrlich ist die Tensorflow.js Community einfach zu klein. Bei vielen Fragen hat man das Gefühl man leistet hier „Pioniersarbeit“, was gerade für Anfänger nicht zu empfehlen ist. Zur Verdeutlichung: Es gibt 80 Mal mehr StackOverflow Fragen zu TensorFlow als zu TensorFlow.js. Je nach Anwendungsfall existieren aber mittlerweile auch für TensorFlow.js eine Reihe von Ressourcen, Tutorials und Beispielen, die bei der Entwicklung mit Tensorflow.js helfen können. Da JavaScript eine weit verbreitete Sprache ist, kann man auch auf eine große Menge an generellen Webentwicklungsressourcen zurückgreifen, die bei der Arbeit mit Tensorflow.js helfen können.</p>
<p>Tensorflow Python dagegen profitiert von einer großen und aktiven Community, die regelmäßig neue Modelle, Techniken und Ressourcen entwickelt und veröffentlicht. Es gibt eine Vielzahl von Tutorials, Foren und Open-Source-Projekten, die Ihnen helfen können, Ihre maschinellen Lernprojekte voranzutreiben. Die Python-Community ist für ihre Unterstützung und Zusammenarbeit bekannt, was den Einstieg in Tensorflow Python erleichtern kann.</p>
<h2>Bibliotheken</h2>
<p>In vielen Fällen und speziell bei meinem NLP Projekt ein K.O Kriterium für Tensorflow.js waren die Bibliotheken. Tensorflow.js hat im Vergleich zu Tensorflow Python viel weniger Bibliotheken. Das liegt aus meiner Sicht an folgenden 3 Punkten:</p>
<ol>
<li>Entwicklungsstand: Tensorflow Python existiert seit mehreren Jahren und hat eine lange Entwicklungszeit hinter sich. Während dieser Zeit wurden zahlreiche Erweiterungen, Module und zusätzliche Bibliotheken entwickelt, die speziell für Tensorflow Python entwickelt wurden. Tensorflow.js hingegen ist eine vergleichsweise neuere Technologie und befindet sich möglicherweise noch in einem früheren Entwicklungsstadium. Daher hat Tensorflow.js möglicherweise weniger Bibliotheken und Erweiterungen, die speziell für diese Plattform entwickelt wurden.</li>
</ol>
<p>&nbsp;</p>
<ol start="2">
<li>Zielplattform: Tensorflow Python richtet sich an eine breite Palette von Plattformen, einschließlich Desktop-Computern, Servern und mobilen Geräten. Daher gibt es eine Vielzahl von spezialisierten Bibliotheken und Erweiterungen für verschiedene Anwendungsfälle und Hardwarekonfigurationen. Tensorflow.js hingegen zielt darauf ab, Modelle direkt im Browser auszuführen. Daher sind die Funktionen und Bibliotheken von Tensorflow.js auf die Anforderungen von Webanwendungen und die begrenzte Ressourcenverfügbarkeit im Browser optimiert.</li>
</ol>
<p>&nbsp;</p>
<ol start="3">
<li>Kompatibilität: Tensorflow.js basiert auf JavaScript, einer Sprache, die in erster Linie für Webentwicklung verwendet wird. Obwohl JavaScript eine große Entwicklergemeinschaft und viele bestehende Bibliotheken und Frameworks hat, sind nicht alle davon direkt mit Tensorflow.js kompatibel. Daher kann es sein, dass nicht alle verfügbaren Bibliotheken und Erweiterungen für Tensorflow Python auch für Tensorflow.js zur Verfügung stehen.</li>
</ol>
<p>Es ist jedoch wichtig anzumerken, dass Tensorflow.js stetig weiterentwickelt wird und die Bibliothek und die verfügbaren Erweiterungen mit der Zeit wachsen können. Die Community rund um Tensorflow.js arbeitet daran, das Ökosystem zu erweitern und neue Bibliotheken sowie Tools bereitzustellen, um den Funktionsumfang zu verbessern und die Möglichkeiten von Tensorflow.js zu erweitern.</p>
<h2>Plattformunterstützung</h2>
<p>TensorFlow, das in C++ geschrieben wurde, ist eine plattformübergreifende Bibliothek, die auf verschiedenen Betriebssystemen wie Windows, macOS und Linux unterstützt wird. Es kann sowohl für die Entwicklung und Ausführung von Modellen auf Servern als auch auf Desktop-Computern verwendet werden.</p>
<p>TensorFlow<span style="font-size: 1.125rem;"> </span><span style="font-size: 1.125rem;">unterstützt</span><span style="font-size: 1.125rem;"> daher </span><span style="font-size: 1.125rem;">eine breitere Palette von Plattformen als TensorFlow.js, da TensorFlow.js hauptsächlich auf JavaScript-Umgebungen wie dem Browser und Node.js ausgerichtet ist.</span></p>
<h2>Trainieren großer Modelle</h2>
<p>TensorFlow kann sehr große Modelle trainieren und verarbeiten, während TensorFlow.js aufgrund der Leistungseinschränkungen von JavaScript-Engines auf kleinere Modelle beschränkt ist.</p>
<p>JavaScript-Engines sind im Vergleich zu spezialisierten Machine-Learning-Frameworks und Hardwarebeschleunigern wie GPUs oder TPUs weniger leistungsstark. Dies bedeutet, dass TensorFlow.js aufgrund der begrenzten Rechenleistung und des begrenzten Speichers von JavaScript-Engines in der Regel für kleinere Modelle geeignet ist.</p>
<p>Daher wird TensorFlow für Projekte empfohlen, bei denen große Modelle trainiert oder komplexe Berechnungen durchgeführt werden müssen, während TensorFlow.js besser für Anwendungen geeignet ist, die kleinere Modelle verwenden und in Webbrowsern oder JavaScript-Umgebungen ausgeführt werden sollen.</p>
<h2>Warum TensorFlow.js clientseitig im Browser nutzen?</h2>
<p>Da wäre das Thema Geschwindigkeit. Da man keine Daten an einen entfernten Server senden muss, erfolgt die Klassifizierung schneller. Zudem hat man direkten Zugriff auf die Sensoren wie Kamera, Mikrofon, GPS usw.</p>
<p>Außerdem ist in vielen Ländern der Datenschutz ein wichtiger Punkt. Man kann Daten auf dem eigenen Rechner trainieren und klassifizieren, ohne sie an einen externen Webserver senden zu müssen. Das kann erforderlich sein, um Datenschutzgesetze wie die DSGVO einzuhalten oder wenn man die Daten nicht an Dritte weitergeben möchte.</p>
<p>Mit einem Klick kann jeder auf der Welt über einen Link auf die Anwendung zugreifen und sie nutzen ohne, dass ein komplexes Setup mit Servern und spezieller Hardware wie Grafikkarten erforderlich ist.</p>
<p>Abschließend sollte man bei ML auch die Kosten im Blick behalten. Man muss lediglich für das hosten des Clients zahlen. Das ist deutlich günstiger als die dauerhafte Aufrechterhaltung eines eigenen Servers.</p>
<h2>Fazit Tensorflow.js oder Tensorflow nutzen?</h2>
<p>Insgesamt kann man die Frage Tensorflow.js oder Tensorflow vereinfacht dadurch beantworten, dass Tensorflow mit Python aufgrund seiner breiten Akzeptanz und großen <a href="https://www.tensorflow.org/community" target="_blank" rel="noopener">Community</a> nahezu IMMER die bessere Wahl ist. Nichtsdestotrotz gewinnt Tensorflow.js zunehmend an Bedeutung und wird überwiegend von Entwicklern genutzt, die Webanwendungen mit maschinellem Lernen clientseitig entwickeln möchten.</p>
<p>Das heißt, wenn du Anwendungen erstellen möchtest, die im Webbrowser laufen sollen, ist TensorFlow.js eigentlich die bessere Wahl. Wenn du jedoch Anwendungen erstellen möchtest, die auf einem Server oder einem Desktop-Computer laufen sollen, ist TensorFlow die bessere Option. Außerdem ist die Python Version viel besser geeignet, wenn du mit leistungsstarken Geräten wie GPUs arbeiten möchtest.</p>
<p>&nbsp;</p>
<p>The post <a href="https://nerd-corner.com/de/tensorflow-js-oder-tensorflow-nutzen/">Tensorflow.js oder Tensorflow nutzen?</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/tensorflow-js-oder-tensorflow-nutzen/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Swagger Api Doku zu Node Server hinzufügen</title>
		<link>https://nerd-corner.com/de/swagger-api-doku-zu-node-server-hinzufuegen/</link>
					<comments>https://nerd-corner.com/de/swagger-api-doku-zu-node-server-hinzufuegen/#comments</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Wed, 26 Oct 2022 17:07:59 +0000</pubDate>
				<category><![CDATA[Software-DE]]></category>
		<category><![CDATA[angular]]></category>
		<category><![CDATA[Api]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Backend mit Swagger]]></category>
		<category><![CDATA[Backend Server]]></category>
		<category><![CDATA[CRUD]]></category>
		<category><![CDATA[Endpoints]]></category>
		<category><![CDATA[Endpunkte]]></category>
		<category><![CDATA[express.js]]></category>
		<category><![CDATA[Github]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Node]]></category>
		<category><![CDATA[Node mit Swagger und Typescript]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Schritt für Schritt Anweisung]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Swagger]]></category>
		<category><![CDATA[Swagger dokumentation]]></category>
		<category><![CDATA[Swagger express]]></category>
		<category><![CDATA[Swagger.json]]></category>
		<category><![CDATA[typescript]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=1266</guid>

					<description><![CDATA[<p>Ich habe vor kurzem einen Node Server mit express.js in Typescript programmiert. Das ist eine typische Kombination für Backend Entwicklung. Das ist besonders vorteilhaft wenn &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/swagger-api-doku-zu-node-server-hinzufuegen/">Swagger Api Doku zu Node Server hinzufügen</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Ich habe vor kurzem einen Node Server mit express.js in Typescript programmiert. Das ist eine typische Kombination für Backend Entwicklung. Das ist besonders vorteilhaft wenn bereits Erfahrung mit Frontend Entwicklung in Typescript vorhanden ist. Generell würde ich sowohl im Frontend als auch im Backend empfehlen lieber Typescript anstelle von Javascript zu nutzen. Typescript nutzt Javascript ist aber typbasiert und daher nicht so fehleranfällig!</p>
<p>Auch sollte der Fokus stehts auf clean Code legen und dieser ordentlich dokumentiert sein, besonders wenn ein Projekt größer wird zahlt sich ordentlich dokumentierte Arbeit aus. Um beispielsweise REST Endpunkte zu dokumentieren empfiehlt es sich Swagger zu benutzen. Die Swagger API Dokumentation bietet eine Übersicht über alle Endpunkte und sogar die Möglichkeit mit diesen zu interagieren.</p>
<p><strong><em>Das könnte Sie auch interessieren: </em></strong><em><a href="https://nerd-corner.com/de/wie-man-eine-reactive-angular-form-svg-mit-klickbaren-elementen-erstellt/" target="_blank" rel="noopener">Angular Form SVG mit clickbaren Elementen</a></em></p>
<h2>Liste der Komponenten</h2>
<ul>
<li>Entwicklungsumgebung (z.B. VS Code)</li>
<li>Node.js</li>
</ul>
<h2>Dokumentation mit Swagger</h2>
<p>Obwohl Swagger recht bekannt ist, konnte ich keine detaillierte Anleitung für die Implementation finden. Ich möchte daher 2 Wege zur Implementierung von Swagger in einen bestehenden Node Server erklären. Die erste Möglichkeit besteht darin direkt zu jedem Endpunkt Swagger Parameter hinzuzufügen. Das ist wohl die schnellere Variante, kann allerdings abhängig von der Anzahl der Endpunkte unübersichtlich werden. In der zweiten Variante wird eine „swagger.json“ Datei erstellt, die die  Parameter der Endpunkte zusammenfasst.</p>
<p>Um Swagger nutzen zu können wird folgende Bibliothek bzw. deren Typerweiterung genutzt:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">npm install --save  swagger-ui-express
npm install --save-dev @types/swagger-ui-express</pre>
<p>Swagger erstellt eine Dokumentation der Endpunkte:</p>
<p><img fetchpriority="high" decoding="async" class="zoooom aligncenter wp-image-1271" src="https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerDocu.jpg" alt="Example Swagger Docu" width="1647" height="853" srcset="https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerDocu.jpg 1847w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerDocu-300x155.jpg 300w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerDocu-1024x531.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerDocu-768x398.jpg 768w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerDocu-1536x796.jpg 1536w" sizes="(max-width: 1647px) 100vw, 1647px" /></p>
<p>Diese können geöffnet werden und man sieht einen beispielhaften Request und einen beispielhaften Response:</p>
<p><img decoding="async" class="aligncenter wp-image-1273 zoooom" style="font-size: 1.125rem;" src="https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint.jpg" alt="Example Swagger Endpoint 1" width="1657" height="840" srcset="https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint.jpg 1757w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint-300x152.jpg 300w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint-1024x519.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint-768x389.jpg 768w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint-1536x779.jpg 1536w" sizes="(max-width: 1657px) 100vw, 1657px" /><img decoding="async" class="aligncenter wp-image-1272 zoooom" src="https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint2.png" alt="Example Swagger Endpoint 2" width="1657" height="803" srcset="https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint2.png 1757w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint2-300x145.png 300w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint2-1024x496.png 1024w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint2-768x372.png 768w, https://nerd-corner.com/wp-content/uploads/2022/10/exampleSwaggerEndpoint2-1536x744.png 1536w" sizes="(max-width: 1657px) 100vw, 1657px" /></p>
<p>Über den Button &#8222;Try it out&#8220; kann direkt mit dem Endpunkt interagiert werden.</p>
<h2>Swagger API Dokumentation mit Parametern</h2>
<p>Diese Variante empfiehlt sich eher für kleinere Projekte. Zunächst müssen diese beiden Swagger Bibliotheken in das Projekt eingebunden werden:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">npm install --save-dev @types/swagger-jsdoc 
npm install --save swagger-jsdoc</pre>
<p>Die Bibliotheken werden in app.ts bzw. für nicht Typescript Nutzer app.js konfiguriert. Aufgrund der hier festgelegten Konfiguration befindet sich die Dokumentation unter „/api-docs“:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-title="app.ts">import express from "express";
import bodyParser from "body-parser";
import exampleRoutes from "./routes/example-route";
import swaggerJSDoc from "swagger-jsdoc";
import swaggerUi from "swagger-ui-express";

const app = express();

const options = {
  definition: {
    openapi: "3.0.1",
    info: {
      title: "REST API for Swagger Documentation",
      version: "1.0.0",
    },
    schemes: ["http", "https"],
    servers: [{ url: "http://localhost:3000/" }],
  },
  apis: [
    `${__dirname}/routes/example-route.ts`,
    "./dist/routes/example-route.js",
  ],
};

const swaggerSpec = swaggerJSDoc(options);

app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerSpec));
app.use(bodyParser.json());
app.use(exampleRoutes);

app.listen(3000);</pre>
<p>Der Endpunkt wird mit den Parametern folgendermaßen beschrieben:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-title="example-route.ts">import { Router } from "express";
import { exampleFunction } from "../controller/example";

const router = Router();

/**
 * @swagger
 * /example:
 *      post:
 *          summary: Send the text to the server
 *          tags:
 *              - ExampleEndpoints
 *          description: Send a message to the server and get a response added to the original text.
 *          requestBody:
 *              required: true
 *              content:
 *                  application/json:
 *                      schema:
 *                          type: object
 *                          properties:
 *                              responseText:
 *                                  type: string
 *                                  example: This is some example string! This is an endpoint
 *          responses:
 *              201:
 *                  description: Success
 *                  content:
 *                      application/json:
 *                          schema:
 *                              type: object
 *                              properties:
 *                                  text:
 *                                      type: string
 *                                      example: This is some example string!
 *              404:
 *                  description: Not found
 *              500:
 *                  description: Internal server error
 */
router.post("/example", exampleFunction);

export default router;
</pre>
<h2>Swagger API Dokumentation mit swagger.json</h2>
<p>Um eine bessere Übersicht zu haben und um die Dokumentation nicht mit dem eigentlichen Code zu vermischen empfiehlt sich die Nutzung einer, oder gar mehrerer json Dateien. Bei der Nutzung von TypeScript muss die Swagger.json Datei in die rootDirectory:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1276 zoooom" src="https://nerd-corner.com/wp-content/uploads/2022/10/foulderStructureOfSwaggerJson.jpg" alt="Foulder Structure with Swagger.json" width="170" height="344" srcset="https://nerd-corner.com/wp-content/uploads/2022/10/foulderStructureOfSwaggerJson.jpg 199w, https://nerd-corner.com/wp-content/uploads/2022/10/foulderStructureOfSwaggerJson-148x300.jpg 148w" sizes="auto, (max-width: 170px) 100vw, 170px" /></p>
<p>Auch hier wirdzunächst die Konfiguration in app.ts bzw. für nicht Typescript Nutzer in app.js festgelegt. Hier wird ebenfalls der Domainpfad „/api-docs“ für die Dokumentation gewählt:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-title="app.ts">import express from "express";
import bodyParser from "body-parser";
import exampleRoutes from "./routes/example-route";
import swaggerUi from "swagger-ui-express";

import * as swaggerDocument from "./swagger.json";

const app = express();

app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument));

app.use(bodyParser.json());

app.use(exampleRoutes);

app.listen(3000);</pre>
<p>Wichtiger Hinweis: Um JSON Dateien in ein Typescript Projekt zu importieren muss dies in der tsconfig.json erlaubt werden. Außerdem muss die JSON Datei sich in der root directory befinden:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="json" data-enlighter-title="tsconfig.json">{
  "compilerOptions": {
    "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
    "module": "commonjs" /* Specify what module code is generated. */,
    "rootDir": "./src" /* Specify the root folder within your source files. */,
    "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
    "resolveJsonModule": true /* Enable importing .json files. */,
    "outDir": "./dist" /* Specify an output folder for all emitted files. */,
    "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
    "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
    "strict": true /* Enable all strict type-checking options. */,
    "skipLibCheck": true /* Skip type checking all .d.ts files. */
  }
}</pre>
<p>Die vorherige Swagger Dokumentation mit Parametern würde somit in der swagger.json folgendermaßen aussehen:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="json">{
  "openapi": "3.0.1",
  "info": {
    "title": "REST API for Swagger Documentation",
    "version": "1.0.0"
  },
  "schemes": ["http"],
  "servers": [{ "url": "http://localhost:3000/" }],
  "paths": {
    "/example": {
      "post": {
        "tags": ["ExampleEndpoints"],
        "summary": "Send a text to the server",
        "description": "Send a message to the server and get a response added to the original text.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExampleSchemaHeader"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExampleSchemaBody"
                }
              }
            }
          },
          "404": { "description": "Not found" },
          "500": { "description": "Internal server error" }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ExampleSchemaBody": {
        "properties": {
          "responseText": {
            "type": "string",
            "example": "This is some example string! This is an endpoint"
          }
        }
      },
      "ExampleSchemaHeader": {
        "required": ["text"],
        "properties": {
          "text": {
            "type": "string",
            "example": "This is some example string!"
          }
        }
      }
    }
  }
}
</pre>
<h2>Dateien zum Herunterladen</h2>
<ul>
<li><a href="https://github.com/hanneslim/Node-with-swagger-params" target="_blank" rel="noopener">Github Beispielprojekt für swagger Parameter</a></li>
<li><a href="https://github.com/hanneslim/node-with-swagger-json" target="_blank" rel="noopener">Github Beispielprojekt für swagger.json</a></li>
</ul>
<p>The post <a href="https://nerd-corner.com/de/swagger-api-doku-zu-node-server-hinzufuegen/">Swagger Api Doku zu Node Server hinzufügen</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/swagger-api-doku-zu-node-server-hinzufuegen/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
