Focus

Web, REST, and HTTP

Articles, podcasts, talks, and more about Web, REST, and HTTP.
Blog Post

REST Beats MCP

Instead of using dedicated APIs, agents can operate existing web applications directly. Like humans, they rely on the most consistent implementation of hypermedia and benefit from existing context, validation, and access controls. Using an expense report as an example, I show how agents can automate complex, context-dependent tasks—without having to implement new APIs.

Blog Post

A Brief History of HTTP

HTTP has continuously evolved since the founding of the Internet in 1989. The first RFC document published by the Internet Engineering Task Force (IETF) appeared in 1996. Let’s trace the history of HTTP over the years up to June 2022, when a new series of RFC documents was published standardizing HTTP/1.1, HTTP/2, and HTTP/3.

Blog Post

Type-safe SQL queries in Java and Rust

The Type-Safe Web Stack, Part 3

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

One of the main tasks that business sets for IT as an industry is the creation of effective software, according to criteria that clearly meet the needs of this business. On the other side, one of the main prerequisites for achieving the goals that a business sets for itself is the ability to hire specialists who can create a product in the shortest possible time and/or effectively maintain it. Accordingly, to achieve this, the technology stack used, i.e. tools, must be mature enough, and widely used in the market.

Blog Post

Type-safe HTTP routing in Java and Rust

The Type-Safe Web Stack, Part 1

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

We’ve been writing a web application that supports users being offline without using a service worker. We’d love to share how we’ve done that and what we think are the advantages.

Blog Post

CORS extension “Private Network Access”

Understanding the new preflight requests

Blog Post

A Comparison of Java HTTP Clients

In addition to databases, communication via HTTP to other services is nowadays found in almost every project. A large number of libraries have been built within Java that can be used for this purpose. In this article we will take a closer look at four of these candidates and see in which aspects they differ from one another.

Blog Post

HTTP Feeds

Asynchronous interfaces don’t always require the use of Apache Kafka or RabbitMQ. They can also be designed without middleware just by means of HTTP APIs.

Blog Post

Progressive Enhancement with Hotwire

The definitive renaissance of 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?

Blog Post

Pragmatic RESTful HAL APIs

The Hypertext Application Language (abbr. HAL) is a media type extension to plain JSON/XML – with its introduction in 2012 – no longer a newcomer and used already in many projects with Hypermedia APIs. A good time then to say a few words of praise, also to show obstacles and what solutions we found in daily work with HAL APIs - for implementing clients as well as for the server side.

Blog Post

React: Lessons Learned

Blog Post

Cross-platform testing of TypeScript code with Jasmine and Karma

I like TypeScript. Writing code that already underwent basic checks (i.e. typechecking) before it can even touch an execution engine is a big win in my book. In particular, TypeScript is nice because it integrates well into the broader JavaScript ecosystem and comes with batteries (i.e. types) included. Unfortunately, most test runners require extra setup to work with tests written in TypeScript. Some even require staggering amounts of configuration.

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?

Blog Post

Faking Surrogate Cache-Keys for Nginx Plus

Blog Post

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

If you want to test your website, app or API endpoint by simulating how it will perform when hundreds or more users visit it, you are probably writing a load test. This blogpost covers a step-by-step instruction on how to build a load test for a Ruby on Rails app with a login and post session and dynamic variables with Tsung, a distributed load testing tool.

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

Blog Post

Remain resilient, fail fast

Keep your systems resilient to broken connections and unreliable networks. Unless it’s start-up time.

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

Blog Post

The Power of the HTML Form

The HTML form is a powerful tool for telling a server what you want to do. But does everybody know how it works? With the multifarious JavaScript frameworks currently available today, software developers in the industry today often do not know how to create a web application without JavaScript. Is there an alternative? The web has been around for ages. What did people do before JavaScript?

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

Blog Post

ROCA vs. SPA

Currently, a lot of companies are migrating from Desktop applications (mostly written in Java) to Web applications for their products as well as for their internal tooling. When they start with this process they often ask themselves: Which technologies should we use to build our Web application? Should we use Angular.js or React? Or should we go with recommendations like ROCA instead of a Single Page Application?

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.

Blog Post

Transclusion in self-contained systems

Blog Post

Why RESTful communication between microservices can be perfectly fine

Recent debates about REST versus message passing in microservice communication have led to some confusion. What is meant with asynchronous communication in this context and why is REST a perfectly valid choice?

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

Reliable Web Clients

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.

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.

News

New Primer: Advanced IAM Patterns and Strategies

Case Study

User-friendly and mobile-first: Our SaaS solution for travel expense accounting

Case Study

From idea to MVP in 8 weeks: An insurance platform for e-sports players