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}