A curated list of additional reading material following my talk at Zuhlke Days 2018.
- Accelerate: The Science of Lean Software and Devops: Building and Scaling High Performing Technology Organizations by Nicole Forsgren et al: http://amzn.eu/d/8fteU0t
- Building Microservices by Sam Newman: http://amzn.eu/d/5VI7e5F
- Building Microservices Second edition by Sam Newman: http://amzn.eu/d/4d7JoEA
- Production-Ready Microservices by Susan Fowler: http://amzn.eu/d/gZPrzBf
- Site Reliability Engineering by Betsy Beyer et al: http://amzn.eu/d/57BjsHi
- REST in Practice: Hypermedia and Systems Architecture by Jim Webber et al: http://amzn.eu/d/1JN6obF
- RESTful Web APIs by Leonard Richardson et al: http://amzn.eu/d/c5RdRAo
- Testing Java Microservices by Alex Soto Bueno et al: http://amzn.eu/d/j9WTt21
- Elastic Leadership by Roy Osherove: http://amzn.eu/d/6GEAft4
- Threat Modeling: Designing for Security by Adam Shostack: http://amzn.eu/d/6S2hIVh
- Cloud Native: Designing change-tolerant software by Cornelia Davis: https://www.manning.com/books/cloud-native
- Testing Microservices, the sane way
- Your API versioning is wrong, which is why I decided to do it 3 different wrong ways
- Consumer Driven Contract Testing
- REST without PUT
- Trunk Based Development
- The Practical Test Pyramid
- ThoughtWorks: Technology Radar
- Spring Boot
- RxJava
- Kotlin
- Arrow: Functional companion to Kotlin's Standard Library
- Jackson: JSON serialization/deserialization
- Guava
- TotallyLazy: A complete functional environment for Java
- jOOL: The Missing Parts in Java 8
- Caffeine: A high performance caching library for Java 8
- Grafana
- Prometheus
- Prometheus push gateway
- Grafanalib: Python library for building Grafana dashboards
- Dropwizard Metrics or Micrometer
- Jersey HTTP client with reactive extensions
- OkHttp
- JsonPath: A Java DSL for reading JSON documents.
- Rest-assured
- Wiremock
- AssertJ: Fluent assertions for Java
- QuickTheories: Property based testing for Java 8
- Pitest: Mutation testing for Java
- Snodge: Randomly mutate JSON, XML, HTML forms, text and binary data for fuzz testing
- Vegeta: HTTP load testing tool and library
- usl4j: a Java library for modeling system performance given a small set of real-world measurements.
Rather than passing a lot of Strings around in your system, try
to use strongly typed objects. ValueTypes
can help with that.
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
public abstract class ValueType<T extends Comparable<T>> implements Comparable<T> {
public final T value;
public ValueType(T value) {
this.value = value;
}
@Override
public int compareTo(@NotNull T other) {
return value.compareTo(other);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ValueType<?> valueType = (ValueType<?>) o;
return Objects.equals(value, valueType.value);
}
@Override
public int hashCode() {
return Objects.hash(value);
}
}
Example usage:
public class Username extends ValueType<String> {
public Username(String value) { super(value); }
}
Username alice = new Username("alice@hotmail.com");