A Java Geek weekly 35

On metrics

There’s still an ongoing debate whether development in particular and IT, in general, are engineering practices. In all cases, there’s no denying that our industry is based on scientific foundations.

Your API Shouldn’t Redirect HTTP to HTTPS

TL;DR:

Instead of redirecting API calls from HTTP to HTTPS, make the failure visible. Either disable the HTTP interface altogether, or return a clear HTTP error response and revoke API keys sent over the unencrypted connection. Unfortunately, many well-known API providers don’t currently do so.

20 Years of Blogging

I started in 2008, I hope to celebrate my 20 years!

DuckDB Doesn’t Need Data To Be a Database

I must admit that I’ve no clue about DucksDB, but the use-case looks really nice.

Apache Doris for log and time series data analysis in NetEase, why not Elasticsearch and InfluxDB?

This is another advantage of Doris compared to Elasticsearch: it supports more flexible index management and allows easy addition and removal of indexes.

The KeePassXC kerfuffle

As a KeePassXC user, this is news to me. I’m not on Debian, though.

Don’t DRY Your Code Prematurely

DRY can be detrimental to the code if applied with too much zeal like any other similar principle. And don’t start me on shared libraries.

Chicory - a WebAssembly Interpreter Written Purely in Java With Zero Native Dependencies

I already mentioned Chicory in the #31 of the newsletter. Good news that it starts being mentioned.

The Arazzo Specification

The Arazzo Specification provides a mechanism that can define sequences of calls and their dependencies to be woven together and expressed in the context of delivering a particular outcome or set of outcomes when dealing with API descriptions (such as OpenAPI descriptions).

arazzo: 1.0.0
info:
  title: A pet purchasing workflow
  summary: This Arazzo Description showcases the workflow for how to purchase a pet through a sequence of API calls
  description: |
      This Arazzo Description walks you through the workflow and steps of `searching` for, `selecting`, and `purchasing` an available pet.
  version: 1.0.1
sourceDescriptions:
- name: petStoreDescription
  url: https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml
  type: openapi

workflows:
- workflowId: loginUserAndRetrievePet
  summary: Login User and then retrieve pets
  description: This workflow lays out the steps to login a user and then retrieve pets
  inputs:
      type: object
      properties:
          username:
              type: string
          password:
              type: string
  steps:
  - stepId: loginStep
    description: This step demonstrates the user login step
    operationId: loginUser
    parameters:
      # parameters to inject into the loginUser operation (parameter name must be resolvable at the referenced operation and the value is determined using {expression} syntax)
      - name: username
        in: query
        value: $inputs.username
      - name: password
        in: query
        value: $inputs.password
    successCriteria:
      # assertions to determine step was successful
      - condition: $statusCode == 200
    outputs:
      # outputs from this step
      tokenExpires: $response.header.X-Expires-After
      rateLimit: $response.header.X-Rate-Limit
      sessionToken: $response.body
  - stepId: getPetStep
    description: retrieve a pet by status from the GET pets endpoint
    operationPath: '{$sourceDescriptions.petstoreDescription.url}#/paths/~1pet~1findByStatus/get'
    parameters:
      - name: status
        in: query
        value: 'available'
      - name: Authorization
        in: header
        value: $steps.loginUser.outputs.sessionToken
    successCriteria:
      - condition: $statusCode == 200
    outputs:
      # outputs from this step
      availablePets: $response.body
  outputs:
      available: $steps.getPetStep.availablePets

Thanks to Stefano Fago for the pointer.

Map-Oriented Programming in Java

An interesting discussion about using the Map type instead of more specific types.

The decline of the user interface

If it feels like an old guy’s rant, then it’s because it probably is. It still feels unfortunately true.

Why, after 6 years, I’m over GraphQL

I never got on the GraphQL train. I still need to check by myself how good it is.

How we orchestrate 2000+ DBT models in Apache Airflow

The topic of jobs, dependencies between them, and granularity is a huge one. Here’s one sample use-case and how the organization approached the issue.

Nicolas Fränkel

Nicolas Fränkel

Developer Advocate with 15+ years experience consulting for many different customers, in a wide range of contexts (such as telecoms, banking, insurances, large retail and public sector). Usually working on Java/Java EE and Spring technologies, but with focused interests like Rich Internet Applications, Testing, CI/CD and DevOps. Also double as a trainer and triples as a book author.

Read More
A Java Geek weekly 35
Share this