Schwerpunktthema

Web, REST und HTTP

Fachartikel, Podcasts, Vorträge und mehr zum Thema Web, REST und HTTP.
Blog-Post

Type-safe SQL queries in Java and Rust

In recent years, our industry has been in favour of strong typing and build-time verification to make certain classes of bugs impossible. How much influence has this trend had on how we can write SQL queries in Java? Let’s look at how typesafe SQL queries can be in Java, how this compares to what you can do in Rust, and consider the benefits and drawbacks of these different approaches.

Blog-Post

Type-safe HTML templates in Java and Rust

The current fashion in our industry is to use static and strong typing wherever possible. How fashion-conscious is the Java community when it comes to HTML templating, though? Let’s have a look at what approaches at type-safe or build-time verified HTML templating are available in the Java ecosystem, how they compare to what’s available in Rust, and whether the benefits outweigh the costs.

Blog-Post

gRPC

What, Why and How

Blog-Post

Type-safe HTTP routing in Java and Rust

In recent years, the trend in our pop-culture industry has been to favour static and strong typing as well as build-time checks over dynamic typing and techniques like late binding. Where possible, you are expected to use the compiler for correctness checks instead of unit tests. Even though the Java language is statically typed, its type system is often considered to be not very helpful. Web applications written in Java are traditionally bristling with weakly typed APIs, heavy use of reflection, and lots of annotations that are interpreted at runtime. Let’s see how far the trend towards build-time checks has been adopted in the Java ecosystem when it comes to writing web applications, how it compares to what’s done in the Rust community, and what benefits and weak points these techniques have.

Blog-Post

Compacted State Feeds

Event notification vs. Event-carried State Transfer vs. Delta loads. How to design good event architectures for mutable data?

Blog-Post

Offline with redux

A different approach to Web applications that work offline

Podcast

Kompression

Einpacken, auspacken

Podcast

Switching Protocols

Schnell, schnell!

Blog-Post

CORS extension “Private Network Access”

Understanding the new preflight requests

Artikel

Java-HTTP-Clients im Vergleich

Neben der Einbindung von Datenbanken findet sich die Kommunikation per HTTP zu anderen Diensten mittlerweile in fast jedem Projekt wieder. Innerhalb von Java hat sich hierzu mittlerweile eine große Menge an Bibliotheken gebildet, die wir einsetzen können. In dieser Kolumne wollen wir uns darum vier dieser Kandidaten anschauen und sehen, in welchen Aspekten sich diese unterscheiden.

Artikel

HTTP-Feeds

Für asynchrone Schnittstellen braucht es nicht immer Apache Kafka oder RabbitMQ. Sie lassen sich auch ohne Middleware einfach über HTTP-APIs gestalten.

Podcast

Cookies

„Nein, ich will!“

Podcast

API-Stile

Wie und womit baut man ein gutes API?

Podcast

Das technologische Rückgrat des Webs

Der Kern des Pudels

Blog-Post

Persistente fachliche Validierungen mit Rails

Teil 1 von 2: MVP

Podcast

Digital Sovereignty

Für mehr Kreativität und Diversität im Web

Podcast

Responsible Web Apps

Responsive + Accessible

Blog-Post

Progressive Enhancement mit Hotwire

Die endgültige Renaissance von Server-side Rendering?

Blog-Post

Innovation in the web without sacrificing accessibility

We’ve truly stretched the boundaries of what is possible on the web. However, to do this we’ve sacrificed semantic HTML and made our applications inaccessible to a huge amount of different users. Instead of breaking the foundation of the web, we should consider this as an opportunity: how can we implement applications in a way that works for any user who might come along and want to interact with it?

Artikel

RESTful HAL APIs

Die Hypertext Application Language ist als Medientyp-Erweiterung zu Plain JSON/XML nicht neu und kommt in vielen Projekten mit Hypermedia-APIs zum Einsatz.

Artikel

React: Lessons Learned

Podcast

Intrinsic Design

Responsive Design weitergedacht

Artikel

Design- und Entwicklungs­prinzipien für ein besseres Frontend

Moderne Frontends sollen wartbar und zukunftsfreundlich sein, unabhängig vom Gerät oder Browser gut aussehen und performant sein. Es gibt eine Reihe von Design- und Entwicklungsprinzipien, die dabei helfen, diese Ziele besser zu erreichen. Im folgenden Artikel sollen einige Prinzipien vorgestellt werden, die sich in der Praxis als tragfähig erwiesen haben. Dabei treffen wir neben alten Bekannten wie Responsive Web Design und Mobile First auch auf neuere Ansätze wie Atomic Design und Pattern Libraries.

Blog-Post

Cross-platform testing of TypeScript code with Jasmine and Karma

Blog-Post

Don’t tell me I’m not building a web application

How do we decide what technology stack that we want to use for any given project? Is it really based on how perfectly well suited the technology is to the problem at hand or do we really just want to use the technologies that we like and are comfortable with? I’m happy in my filter bubble, rendering web applications on the server and progressively enhancing them on the client. But I also recognize my bias. Do you?

Podcast

Distributed Web

Die Demokratisierung des Webs?

Artikel

Optionen der Frontend-Integration

Blog-Post

Ruby on Rails ist einfach am besten

Ein Loblied auf Ruby on Rails.

Blog-Post

Faking Surrogate Cache-Keys for Nginx Plus

Sometimes you also need to use Nginx as caching layer. Purging the cache for a resource and its variants is often a very tedious task. Surrogate Keys of other caching solutions are a better alternative but are not supported by Nginx yet. Alternatively, you can create something as powerful by combining the different dynamic dimensions of a resource to a cache key variable which then is appended to a custom cache key. This way, the * -wildcard purging of Nginx can be used to purge all cache entries related to a certain resource with a couple of map directives.

Artikel

Wider die SPA-Fixierung

Ein Plädoyer für eine klassische Frontend-Architektur

Artikel

Was sind eigentlich Web Components?

Für die Erstellung von Benutzeroberflächen im Web sind HTML, CSS und JavaScript gesetzt. Doch die Wiederverwendung und Kapselung von so erstellten Komponenten lässt zu wünschen übrig. Um eine fertige Komponente zu nutzen, muss man das HTML übernehmen und passendes CSS und JavaScript separat einbinden. Web Components versprechen, hier zu helfen. In dieser Kolumne schauen wir uns gemeinsam an, was Web Components sind und wie diese funktionieren.

Podcast

Microfrontends

Unabhängige Teams im Frontend

Blog-Post

Building a Load Test with Tsung for a Login and Post Session with dynamic url-encoded variables

Podcast

Transklusion

Frontendintegration im Web

Blog-Post

dprox – Declarative Reverse Proxy

Reverse proxies don’t have to be a pain when it comes to local development.

Blog-Post

Taking Screenshots of DOM Elements

Blog-Post

Have YOU been pwned?

With the V2 release of the “pwned passwords” database came a new feature called range search, which allows to securely check passwords with only minor efforts. Here’s how to use it.

Blog-Post

Enforce strong passwords!

Frequent leaks of large user databases highlight how important it is to enforce strong passwords. Let’s discuss what makes a strong password and why it is a good idea to additionally check it against a dictionary.

Blog-Post

ROCA-Compliant Table Sorting

Podcast

Entwicklung im Feierabendmodus

Wie man neben dem Beruf ein Produkt entwickelt

Artikel

Tooling für JavaScript-Frontends

Nahezu jede Webanwendung besitzt einen Anteil an JavaScript im Frontend. Im Vergleich zu früher haben sich jedoch viele Dinge geändert. So sind heute zahlreiche Tools üblich, die den Entwickler unterstützen. Dieser Artikel gibt einen Überblick über aktuell genutzte Entwicklungswerkzeuge für die Entwicklung von JavaScript-Frontends.

Blog-Post

Remain resilient, fail fast

Blog-Post

Marrying Rails, Turbolinks and JavaScript Custom Elements

Rails 5.1 just arrived and brought with it a curated setup for webpack. Think what you want about webpack, but it’s the new default for JavaScript module loading and bundling in Rails and therefore here to stay. So here’s a quick post on how to get the new JavaScript goodness up and running with your existing Turbolinks setup.

Blog-Post

Rendering Self-Contained Custom Elements

This is a response to Paul Kinlan’s post on creating custom elements, explaining how JSX can be used for declarative templating.

Blog-Post

The Power of the HTML Form

Blog-Post

Progressive Web Components

This is a write-up of the “Progressive Web Components” presentation at GOTO Berlin.

Blog-Post

The perils of shared code

In this blog article, I want to examine why using a sharing code between microservices may sound attractive in the first place and why it can cause bigger problems than the ones you try to solve.

Blog-Post

Content Security Policy

Schutz vor XSS mit dem CSP-Header

Artikel

Web Components mit Polymer

Wie im ersten Teil dieses Artikels bereits angekündigt wurde, beschäftigt sich dieser zweite Teil mit der technischen Anwendung von Polymer 1.0. Wo der erste Teil die Spezifikation und den Einsatz der Technologie aus einer Vogel-Perspektive zeigt, werden wir hier die konkreten APIs vorstellen.

Artikel

Nachhaltige Webarchitekturen

Heutzutage gewinnt man leicht den Eindruck, dass es für moderne Webanwendungen nur einen einzig wahren Architekturansatz gibt: REST und Single-Page-Anwendungen (SPAs). Doch ist alles, was REST genannt wird, wirklich REST? Sind REST und SPAs immer die beste Lösung? Um diese Fragen beantworten zu können, sollte man sich anschauen, was REST eigentlich ist, wofür es gedacht ist und ob es möglicherweise auch Alternativen zu SPAs gibt; insbesondere mit dem Blick auf Nachhaltigkeit, also Wartbarkeit und Erweiterbarkeit.

Blog-Post

ROCA vs. SPA

Comparing two architectural styles with a concrete example

Artikel

Web Components mit Polymer

Die vom W3C standardisierten Web Components erleichtern die komponentenbasierte Entwicklung von Benutzungsoberflächen für Webanwendungen. 2013 hat Google die Open-Source-Bibliothek Polymer initiiert, die Entwicklern beim Einsatz von Web Components Unterstützung an die Hand gibt. Mit der Vorstellung von Version 1.0 dieses Frameworks stellt sich die Frage, ob Polymer nun produktionsreif ist und in realen Projekte eingesetzt werden kann. Im ersten Teil der Serie stellen wir die Version 1.x vor und prüfen die Möglichkeit der Nutzung für Geschäftsanwendungen.

Blog-Post

Solving the wrong problems

Instead of rushing to an engineering solution to a problem, we would often be better off by lying back and determining the root cause of our engineering problem, which is often an architectural one.

Artikel

Java-Web-Frameworks von innen?

Im Maschinenraum

Blog-Post

Transclusion in self-contained systems

Frontend integration in the web is a huge topic. This post deals with the aspect of transclusion of other systems' content in the DOM of a web page.

Blog-Post

Transklusion in Self-Contained Systems

Frontend-Integration im Web ist ein riesiges Themengebiet. Dieser Post befasst sich mit dem Teilaspekt der Transklusion “fremder” Inhalte in den DOM einer anderen Seite.

Blog-Post

Why RESTful communication between microservices can be perfectly fine

Blog-Post

Kriterien zur Bewertung von ROCA Komponenten

Mal angenommen, jemand wollte ROCA machen. Wie müssten dann JavaScript-Komponenten aussehen, die zu diesem Zweck benutzbar wären?

Blog-Post

Play 2.4 with Guice and MyBatis

The Play Framework is getting more popular and Version 2.4 finally includes Dependency Injection as the default mechanism to access central resources instead of singletons. This blog post explores what is necessary to combine MyBatis with Play using its default DI Framework: Guice. Batteries (code sample) included!

Blog-Post

Praktikumsbericht „Web Discoverable Hypermedia“

Podcast

REST und HTTP

Die dritte Auflage ist endlich da!

Blog-Post

Reliable Web Clients

Microservices can make teams and systems more independent but also more vulnerable to the fallacies of distributed systems. Initially I thought this blog post is going to be about how to build reliable web clients with Akka and Akka Persistence. While this is an interesting topic by itself, I now think it is more crucial to first understand the underlying problems and trade-offs before we learn how to get around them.

Artikel

Bessere Web-Apps mit HTML5-APIs

Pimp my Browser

Blog-Post

Declarative HTTP API Testing with gabbi

While HTTP APIs are ubiquitous these days, testing and documenting such APIs remains somewhat awkward: Tests usually consist of procedural code that is specific to the respective language or even framework - which is neither very expressive nor easy to maintain.

Artikel

Artenvielfalt

Durch Node.js hält das vielerorts als nur unzulängliche Programmiersprache belächelte JavaScript heute Einzug in die professionelle Serverprogrammierung. Doch welche Möglichkeiten die Plattform bietet und welche Entscheidungen bei ihrem Einsatz zu treffen sind, ist nicht immer einfach zu ermitteln.

Artikel

Apache Cassandra

Für Daten ohne Grenzen

Blog-Post

Per request debugging with Log4j 2 filters

Customers quite regularly call on me to support them when an application is not behaving as expected. On a development machine there are a lot of ways and utilities to analyse the situation. But troubleshooting the erroneous application behaviour in production environments quite often limits your tool belt to a minimum.

Artikel

Rails gegen Grails

Das Angebot an Webframeworks ist üppig, allerdings durch natürliche Selektion und veränderte Ansprüche kleiner als noch vor ein paar Jahren. Die Optionen verringern sich, wenn eine dynamisch typisierte JVM-Sprache zum Einsatz kommen soll.

Blog-Post

Frontend Dependency-Management in Rails

Blog-Post

Frontend Dependency-Management mit Bower

Paket Management hat sich in so ziemlich jedem populären Ökosystem der Softwareentwicklung in irgendeiner Form breit gemacht. Und das nicht zu Unrecht: In den seltensten Fällen wird in einem Software-Projekt bei null angefangen. Ob Frameworks oder kleinere Bibliotheken, ein Software-Projekt besteht in der Regel aus vielen einzelnen Bausteinen, die zu einem größeren Ganzen zusammen gesetzt werden. Die Abhängigkeiten von Bausteinen zu Anderen lassen sich bis zu einem bestimmten Grad zwar manuell verwalten, mit zunehmender Größe eines Projekts ist dies auf lange Sicht aber weder praktikabel noch wartbar. Genau an dieser Stelle helfen Dependency-Management Tools dabei Bausteine neu hinzuzufügen, bestehende zu aktualisieren oder deren Abhängigkeiten aufzulösen.

Podcast

Ruby on Rails

Das Full-Stack-Web-Framework

Podcast

Eine Website — viele Geräte

Mit Responsive Web-Design Ordnung schaffen

Podcast

Sicherheit von IT-Systemen

Allgemeine Aspekte der IT-Sicherheit und der Web-Sicherheit im Speziellen

Artikel

ROCA: Keine Angst vor HTML und JavaScript

ROCA ist ein Architekturstil zur Entwicklung anständiger und zukunftsfähiger Web-Frontends. Er umfasst eine Reihe von Empfehlungen sowohl für die Client- als auch für die Serverseite. Der ROCA-Stil erfordert von vielen Java-Entwicklern ein gewisses Umdenken. Grund genug, sich den Stil genauer anzuschauen.

Podcast

CSS-Präprozessoren

Effektives und wartbares CSS programmieren

Artikel

Hypermedia as the Engine of Application State – Spring Hateoas

Das kürzlich veröffentlichte Spring Hateoas vereinfacht das Verlinken von Ressource-Repräsentationen und bietet Mechanismen zur Link-Erzeugung und zum Reverse-Routing. Dieser Artikel stellt vor, wie diese Konzepte mit Spring MVC zusammen arbeiten und die Entwicklung von Webanwendungen erleichtern.

Podcast

CSS-Architektur

Architekturaspekte von Cascading Style Sheets

Podcast

Frontend-Optimierung von Webanwendungen

Techniken für schnelle Frontends

Artikel

Im Web zu Hause

Die Resource-oriented Client Architecture stellt einen Gegenpol zum Trend dar, Logik auf den Client zu verlagern. Zum Einsatz kommen dabei vertraute Webtechniken, welche die Entwicklung zeitgemäßer, ergonomischer, robuster, skalierbarer und wartbarer Webanwendungen unterstützen.

Artikel

ROCA

Eingezwängt zwischen statusbehafteten, serverseitigen Komponenten-Frameworks auf der einen und Single-Page-Apps auf der anderen Seite könnte man meinen, die klassische Architektur von Webanwendungen hätte ausgedient. Das stimmt jedoch keineswegs: Schöpft man das Potenzial des Webs vernünftig aus, so stellt man fest, dass es gerade ohne ein Verbiegen der Grundprinzipien möglich ist, skalierbare und ergonomische Anwendungen zu entwickeln. ROCA (Resource-oriented Client Architecture) ist der Name für einen Ansatz, der diesem Muster folgt und sich vor allem durch den richtigen Einsatz von JavaScript sowie die Einhaltung von REST-Prinzipien auszeichnet.

Artikel

Webanwendungen mit dem Play!-Framework

Wie man in Java Webanwendungen bauen sollte

Artikel

NoSQL - Einsatzgebiete für die neue Datenbank-Generation

NoSQL ist derzeit in aller Munde, obwohl manche Konzepte und Technologien schon seit Jahrzehnten bestehen. Der Begriff umspannt inzwischen derart viele Datenbank-Kategorien und -Produkte, dass es oft zu Verwirrungen und falschen Annahmen über den geeigneten Einsatz kommt. Dieser Artikel betrachtet anhand konkreter Beispielszenarien die Kriterien, die bei der Entscheidung für ein klassisches relationales Datenbanksystem oder eine der NoSQL-Varianten eine Rolle spielen.

Vortrag
Vortrag

Everything is not OK: Representing Errors in API Designs

JAX London

News

Lucas Dohmen veröffentlicht als Co-Autor das Buch „The Rails 7 Way“

Case Study

In 8 Wochen zum MVP: eine Versicherungsplattform für E-Sportler

Technische Realisierung eines InsurTech-Start-Ups für E-Sportler
Case Study

Userfreundlich und mobile first: Unsere SaaS-Lösung für die Reisekostenabrechnung

News

Voxxed Days Berlin 2016

News

W-JAX 2015 mit Web-Anwendungen, Microservices und REST 2015

News

ECSA 2015 - Neue Notation für REST-konforme APIs vorgestellt

News

Berlin Expert Days 2015

News

Neue Trainingstermine im Herbst: Microservices-Praxis-Workshop und Skalierbare Webarchitekturen