Main characteristics of APIs

1. Understandable (give consideration to the entry points into their API)
2. Well-documented
3. Consistent (methods should have the form getXYZ() or xyz(), but not both forms)
4. Fit for purpose (Do only one thing, and do it right)
5. Restrained (API can happen almost too quickly, we are potentially committing to a lifetime of support)
6. Evolvable (view them in the wider context)
Read API best practices here:

Message format: Protobuf vs JSON

"Protocol buffers, or Protobuf, is a binary format created by Google to serialize data between different services ..."

Getting started with AmazonWS SDK for Java

Is it RESTful, or simply RPC?

"Pretty URLs like /employees/3 aren’t REST.
Merely using GET, POST, etc. aren’t REST.
Having all the CRUD operations laid out aren’t REST.
In fact, what we have built so far is better described as RPC (Remote Procedure Call)...
What needs to be done to make the REST architectural style clear on the notion that hypertext is a constraint? In other words, if the engine of application state (and hence the API) is not being driven by hypertext, then it cannot be RESTful and cannot be a REST API. Period. Is there some broken manual somewhere that needs to be fixed?
of NOT including hypermedia in our representations is that clients MUST hard code URIs to navigate the API. This leads to the same brittle nature that predated the rise of e-commerce on the web. It’s a signal that our JSON output needs a little help.
Introducing Spring HATEOAS (Hypermedia as the Engine of Application State),a Spring project aimed at helping you write hypermedia-driven outputs."

Read here: https://spring.…

Organize logs using MDC

MDC (Mapped Diagnostic Context) is supported by log4j, log4j2, and SL4J/logback and offers a key/value possibility to enrich log statements:

publicclassMDC { //Put a context value as identified by key //into the current thread's context map. publicstaticvoidput(Stringkey, Stringval); //Get the context identified by the key parameter. publicstaticStringget(Stringkey);

REST - Richardson Maturity Model

"A model (developed by Leonard Richardson) that breaks down the principal elements of a REST approach into three steps. These introduce resources, http verbs, and hypermedia controls..."

Volatile explained with Singleton example

"Volatile keyword in Java is used as an indicator to Java compiler and Thread that do not cache value of this variable and always read it from main memory ...
A volatile variable can be used as an alternative way of achieving synchronization in Java in some cases, like Visibility. with volatile variable, it's guaranteed that all reader thread will see updated value of the volatile variable once write operation completed, without volatile keyword different reader thread may see different values ..."

Moreo on Violate keyword & how to use it here: