Java programmers had two choices when communicating with Elasticsearch: they could use either the REST API over HTTP, or the internal Java API (aka transport client), which is used by Elasticsearch itself for node-to-node communication. When using the HTTP rest client, Elasticsearch parses the JSON to Java objects and then use the internal Java API, and when we use the internal Java API we use those internal Java objects directly.