Producing Using Rest Client

Creating a REST Producer

When you have completed this step, you will have produced data in AVRO format to the topic you have configured in Creating topics.

REST client doesn’t support SASL authentication. If you want to use SASL, we recommend to use Kafka client.

Prerequisites

  • Tool that is able to send and receive HTTP messages, such as curl or http

  • A running instance of Rest Proxy (in the examples below it is accessible on the url https://192.168.99.100:18100)

Producing data via REST

For the following steps, we’re going to use curl tool to produce data.

Get Schema Id

In the following example we will use the /schemas endpoint to obtain the schema ids. To produce the data, first we need a schemaId. Use below command to get the schemaId.

curl --request POST \
  --url "https://192.168.99.100:18100/schema/example/applicationlogevents" \
  --header "Content-Type: application/json" \
  --key ../client-cert/local-config/security/applications/example-producer/pem/example_producer.key \
  --cert ../client-cert/local-config/security/applications/example-producer/cer/example_producer.cer \
  --cacert ../client-cert/local-config/security/applications/common-truststore/cachain/tenant-root-ca.cert.pem \
  --data '
  {
    "keySchema": "{\"type\":\"record\",\"name\":\"Application\",\"namespace\":\"io.axual.client.example.schema\",\"doc\":\"Identification of an application\",\"fields\":[{\"name\":\"name\",\"type\":\"string\",\"doc\":\"The name of the application\"},{\"name\":\"version\",\"type\":[\"null\",\"string\"],\"doc\":\"(Optional) The application version\",\"default\":null},{\"name\":\"owner\",\"type\":[\"null\",\"string\"],\"doc\":\"The owner of the application\",\"default\":null}]}",
    "valueSchema": "{\"type\":\"record\",\"name\":\"ApplicationLogEvent\",\"namespace\":\"io.axual.client.example.schema\",\"doc\":\"Generic application log event\",\"fields\":[{\"name\":\"timestamp\",\"type\":\"long\",\"doc\":\"Timestamp of the event\"},{\"name\":\"source\",\"type\":{\"type\":\"record\",\"name\":\"Application\",\"doc\":\"Identification of an application\",\"fields\":[{\"name\":\"name\",\"type\":\"string\",\"doc\":\"The name of the application\"},{\"name\":\"version\",\"type\":[\"null\",\"string\"],\"doc\":\"(Optional) The application version\",\"default\":null},{\"name\":\"owner\",\"type\":[\"null\",\"string\"],\"doc\":\"The owner of the application\",\"default\":null}]},\"doc\":\"The application that sent the event\"},{\"name\":\"context\",\"type\":{\"type\":\"map\",\"values\":\"string\"},\"doc\":\"The application context, contains application-specific key-value pairs\"},{\"name\":\"level\",\"type\":{\"type\":\"enum\",\"name\":\"ApplicationLogLevel\",\"doc\":\"The level of the log message\",\"symbols\":[\"DEBUG\",\"INFO\",\"WARN\",\"ERROR\",\"FATAL\"]},\"doc\":\"The log level, being either DEBUG, INFO, WARN or ERROR\"},{\"name\":\"message\",\"type\":\"string\",\"doc\":\"The log message\"}]}"
  }'
Check your essentials-package for the key, cert and cacert parameter values, see also Security.

When you execute above command, as a response it will return keyId and valueId like this:

{
   "keyId":1,
   "valueId":2
}

For more detailed information to get schemaId, please refer Rest-Proxy Avro Schema Service

Producing Data

In the following example we will use the /topics endpoint to produce. Use above keyId and valueId as keyMessage schemaId and valueMessage schemaId to produce a message:

curl --request POST \
  --url "https://192.168.99.100:18100/topic/example/applicationlogevents" \
  --header "axual-application-id: io.axual.example.client.avro.producer" \
  --header "axual-application-version: 1.0" \
  --header "axual-producer-uuid: log-producer1" \
  --header "Content-Type: application/json" \
  --key ../client-cert/local-config/security/applications/example-producer/pem/example_producer.key \
  --cert ../client-cert/local-config/security/applications/example-producer/cer/example_producer.cer \
  --cacert ../client-cert/local-config/security/applications/common-truststore/cachain/tenant-root-ca.cert.pem \
  --data '
  {
     "keyMessage":{
        "type":"AVRO",
        "schemaId": 1,
        "message":"{\"name\": \"logeventproducer\", \"version\": \"0.0.1\", \"owner\": \"none\"}"
     },
     "valueMessage":{
        "type":"AVRO",
        "schemaId": 2,
        "message":"{\"timestamp\": 1009, \"source\": {\"name\": \"logeventproducer\", \"version\": \"0.0.1\", \"owner\": \"Team Log\"}, \"context\": {\"Some key\": \"Some Value\"}, \"level\": \"INFO\", \"message\": \"Message 9\"}"
     }
  }'
Check your essentials-package for the key, cert and cacert parameter values, see also Security.

When you execute above command, this will return response that will look like this:

{
   "cluster":"local",
   "offset":0,
   "timestamp":1585835138740,
   "topic":"applicationlogevents",
   "partition":5
}

For more detailed information, please refer Rest-Proxy Produce Service

Next Step: Consuming data via REST

In the next step you will consume data via the REST Proxy.