Posts

ChatGPT Chatbot in Java Web-Anwendung integrieren

Bild
Wie integrierst Du eine künstliche Intelligenz als Chatbot in Deine Web-Anwendung? Am einfachsten indem Du die GPT-3 API benutzt. Hier zeige ich, wie es mit Java funktioniert. OpenAI Account und API Key OpenAI bietet die GPT-3 API an, die auch ChatGPT verwendet. Willst Du sie nutzen? Dann geht es vor dem eigentlichen Programmieren in Java so los: Eigenen Account auf  https://openai.com/ erstellen. Einloggen und eigenen API Key erstellen: https://beta.openai.com/account/api-keys Der API Key berechtigt Deine Anwendung die GPT-3 API zu nutzen. Bei YouTube findet ihr ein englisches und deutsches Video passend zu diesem Blog-Artikel. How-To use GPT-3 API video in English GPT-3 API mit Java HttpClient aufrufen Die GPT-3 API kann mit jeder Programmiersprache bzw. jedem HTTP Client verwendet werden. Ich zeige euch hier, wie es mit dem HttpClient von Java funktioniert. String postBody =       """      {          " prompt": "Code ...

Asynchroner, gepufferter Nachrichten-Austausch mit RabbitMQ und Spring

Bild
RabbitMQ ist ein Nachrichten-Broker mit integrierter Queue zur asynchronen Kommunikation zwischen Services. Der Produzenten-Service übergibt Nachrichten an RabbitMQ ohne auf den Konsumenten-Service zu warten. Der Konsument holt sich Nachrichten aus der RabbitMQ Queue nach Bedarf und kann so nicht vom Produzent mit Nachrichten überflutet werden. Hier zeige ich die Spring AMQP Implementierung zur RabbitMQ Integration. Vorteile des asynchronen, gepufferten Nachrichten-Austauschs Nachrichten Produzent und Konsument müssen nicht aufeinander warten. Wenn der Produzent z. B. für den Benutzer einen Auftrag erstellt, muss der Benutzer nicht warten bis der Konsument den Auftrag erfolgreich verarbeitet hat. Der Produzent übergibt die Nachricht an die RabbitMQ Queue und kann dem Benutzer danach eine Erfolgsmeldung anzeigen. Das ist insbesondere bei lang andauernden Auftragsverarbeitungen im Backend (Konsument) angenehm für den Benutzer, da er nicht warten muss. Der Konsument könnte den Benutzer sp...

REST-API mit OpenAPI Spezifikation und Swagger generieren

Bild
REST-APIs können als OpenAPI Spezifikation menschen- und maschinenlesbar beschrieben werden. Die maschinenlesbare OpenAPI Spezifikation (vormals bekannt als Swagger Spezifikation) dient Code-Generatoren als Vorlage zum Generieren von Client- oder Server-Code in viele verschiedenen Programmiersprachen. Neben den Basics zeige ich euch hier, wie man den Code-Generator mit Maven verwendet, um API Implementierung und Spezifikation immer synchron zu halten. API first & Code Generatoren Beim API first Konzept geht es darum, dass man von Anfang an, die API im Scope der Entwicklung hat. Die API wird vor der Implementierung definiert und kann auch schon mit anderen Teams ausgetauscht werden, welche den Service über die API nutzen. Wird die API als OpenAPI Spezifikation im json oder yaml Format definiert, können mehrere Teams den Client-Code zeitgleich mit der Service-Implementierung entwickeln. Als Unterstützung für den API first Ansatz gibt es Code Generatoren, die für euch ein Client SDK ...

Spring Security 6: Login, Logout & Rollen

Bild
Spring Security ermöglicht Login und Logout für Web-Anwendungen in  wenigen Konfigurationsschritten . Mit Spring Security sichern wir einzelne  Webseiten oder API-Endpunkte  so ab, dass nur authentifizierte Benutzer mit festgelegten Rollen zugreifen können. Wie funktioniert das? Lest weiter! Hinweis: Für einen ersten Einblick zu Spring Security, schaut euch gerne meinen Einsteiger-Artikel an. Dort seht ihr wie Spring Security zum Spring Boot hinzugefügt wird und wie Benutzer mit Rollen definiert werden. Abgesicherte und frei zugängliche Seiten Die Spring Security Starter Dependency ist ohne weitere Konfiguration produktionsbereit, da sie alles absichert. Nur eingeloggte Benutzer haben Zugang. Um anonymen Benutzern bestimmte Seiten zugänglich zu machen, müssen wir die Authentifizierung und den Default Login anpassen. @Configuration @EnableWebSecurity public class SecurityConfiguration {      @Bean      SecurityFilterChain authentic...

Java 17: Sprach-Freatures der neuen Langzeit-Support-Version

Bild
Welche Java Features helfen uns künftig besseren Code zu schreiben? In den Java Versionen 12 bis 17 gibt es spannende, neue Features - ich zeige euch diese hier: Text Blöcke Erweiterungen bei instanceof Neuerungen bei switch Records Versiegelte Klassen RandomGenerator 🎓 Auf Udemy findet ihr meinen kostenloses Online-Kurs zu diesem Blog-Artikel:  Java 17 @ Udemy Neue Java Versionen Seit Java 9 gibt es halbjährlich ein neues Release. Java 11 ist aufgrund des verlängerten Supports bis September 2026 ein wichtiges Release. Daher wird Java 11 aktuell häufig im Berufsumfeld eingesetzt. Seit September 2021 gibt es mit Java 17 ein neues Release mit verlängertem Support (LTS). Dieses wird Java 11 im Berufsumfeld mit der Zeit ablösen. Hier zeige ich Features der Java Versionen 12-17, welche direkten Einfluss auf die Code-Qualität haben und somit zum Thema Clean Code passen. Einen guten Überblick über Java Versionen, Erscheinungsdaten und Feature-Listen findet ihr bei Wikipedia:  https:...

Spring 6: ProblemDetail die Standardisierung von Fehlern in REST APIs

Der RFC 7807 standardisiert das Format von Fehlern in HTTP Responses. Spring 6 liefert die Umsetzung mit der Klasse ProblemDetail ! In der täglichen Arbeit nutzen wir viele Services über ihre REST APIs. Ein klassisches Problem ist, dass verschiedene APIs die gleichen Datenmodelle auf unterschiedliche Weise modellieren. Dann sind wir als Nutzer dieser APIs genötigt Mapper zwischen den API-Modellen zu schreiben. Dieses Problem gibt es auch bei Fehlern, welche beim Nutzen einer API auftreten können. Viele APIs verwenden hier unterschiedliche Formate. Der RFC 7807 standardisiert das Fehler-Format, siehe: https://www.rfc-editor.org/rfc/rfc7807.html   Ein sinnvolles Feature von Spring 6 ist die Umsetzung des RFC 7807 durch die Klasse ProblemDetail . Im Folgenden zeige ich euch wie einfach ihr das in eurer API nutzen könnt. Dann bekommt ihr standardisierte Fehlerbeschreibungen wie diese: {      "type" :  "about:blank" ,      "title" :  "It...