SAMPLE-BACKEND/LISTENER-NOTIFY

POST https://rio-fiware-backend.test.medius.si/csub-customer/subscription/notify

Create REST API endpoint listening to POST requests at on /notify URL path.

POST endpoint receives JSON from CB subscription model.

See Subscriptions section of https://fiware-orion.readthedocs.io/en/3.7.0/user/walkthrough_apiv2.html

Example received JSON where FIRST_NAME was updated:

{
  "subscriptionId": "62f22a75d3564a6d1d50d7cd",
  "data": [
    {
      "id": "urn:Customer:1",
      "type": "Customer",
      "CUSTOMER_ID": {
        "type": "String",
        "value": "1",
        "metadata": {}
      },
      "EMAIL": {
        "type": "String",
        "value": "vincent.vega@pulp.fic",
        "metadata": {}
      },
      "FIRST_NAME": {
        "type": "String",
        "value": "Vincent",
        "metadata": {}
      },
      "LAST_NAME": {
        "type": "String",
        "value": "Vega",
        "metadata": {}
      }
    }
  ]
}

Implementation

REST POST API implemented with Java Qarkus.

SampleSubscriberApi.java

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import io.smallrye.common.annotation.Blocking;
import lombok.extern.slf4j.Slf4j;
import si.medius.fiware.sample.subscriber.service.MockStorage;
@Slf4j
@Path("/subscription")
public class SampleSubscriberApi
{
    @Inject
    MockStorage mockStorage;
    @POST
    @Path("/notify")
    @Blocking
    public void notify(String jsonInput)
    {
        log.info("Added: " + jsonInput);
        mockStorage.list.add(jsonInput);
    }
    @GET
    @Path("")
    @Blocking
    public String mockStorageList()
    {
        String join = String.join("\n", mockStorage.list);
        log.info("customerAllTmp: " + join);
        return join;
    }
}

Mock service storing received JSONs as String.

MockStorage.java

import java.util.ArrayList;
import java.util.List;
import javax.inject.Singleton;
@Singleton
public class MockStorage
{
    public List list = new ArrayList<>();
}

Sample quarkus properties descriptor

application.properties

quarkus.http.root-path=/csub-customer
quarkus.http.host=0.0.0.0
quarkus.log.level=INFO
quarkus.native.additional-build-args=\
    --allow-incomplete-classpath
quarkus.log.console.format=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{1.}:%L] %s%e%n
quarkus.log.category."org.apache.http".level=DEBUG
# swagger
quarkus.swagger-ui.always-include=true

Request Body

{"this-json-body-is-generated-by-cb"=>true, "see-this-data-in-rest-example"=>"GET https://rio-fiware-backend.test.medius.si/csub-customer/subscription", "you-can-post-custom-body-in-this-request"=>true, "it-is-subscriber-responsibility-to-properly-map-json-object"=>true}