A microservice-based data processing apparatus, comprising: a type register, storing a list of types, a type being a semantic expression of a concept instantiated by data in the apparatus; a plurality of microservices, each microservice comprising: an annotation of an input type from the stored list of types and one or more output types from the stored list of types; processing logic which, when executed, transforms input data instantiating the concept semantically expressed by the input type into output data instantiating the concept semantically expressed by one of the one or more output types; a messaging mechanism for inputting data, via a message, to a microservice among the plurality of microservices, the messaging mechanism defining a message format according to which the messages are structured, the message format including: a first field specifying the data being input; a second field specifying a type, from the stored list of types, semantically expressing the concept instantiated by the data of the first field; and a third field specifying one or more types, from the stored list of types, of requested output data; each microservice further comprising: a controller, the controller being configured to receive a message from the messaging mechanism structured according to the messaging format, and to respond by executing the processing logic of the microservice on condition of the type specified by the second field of the received message matching the input type of the annotation of the microservice; wherein the messaging mechanism is configured to distribute a message output to the messaging mechanism and structured according to the message format to each microservice for which one of the one or more output types of the annotation matches one of the one or more types specified by the third field of the message; and wherein, the controller of each microservice is configured, on condition of the type specified by the second field of the received message not matching the input type of the annotation, to modify the message by adding the input type of the annotation of the microservice to the third field of the message, and to output the modified message for transmission via the messaging mechanism. a type register, storing a list of types, a type being a semantic expression of a concept instantiated by data in the apparatus; a plurality of microservices, each microservice comprising: an annotation of an input type from the stored list of types and one or more output types from the stored list of types; processing logic which, when executed, transforms input data instantiating the concept semantically expressed by the input type into output data instantiating the concept semantically expressed by one of the one or more output types; an annotation of an input type from the stored list of types and one or more output types from the stored list of types; processing logic which, when executed, transforms input data instantiating the concept semantically expressed by the input type into output data instantiating the concept semantically expressed by one of the one or more output types; a messaging mechanism for inputting data, via a message, to a microservice among the plurality of microservices, the messaging mechanism defining a message format according to which the messages are structured, the message format including: a first field specifying the data being input; a second field specifying a type, from the stored list of types, semantically expressing the concept instantiated by the data of the first field; and a third field specifying one or more types, from the stored list of types, of requested output data; a first field specifying the data being input; a second field specifying a type, from the stored list of types, semantically expressing the concept instantiated by the data of the first field; and a third field specifying one or more types, from the stored list of types, of requested output data; each microservice further comprising: a controller, the controller being configured to receive a message from the messaging mechanism structured according to the messaging format, and to respond by executing the processing logic of the microservice on condition of the type specified by the second field of the received message matching the input type of the annotation of the microservice; wherein a controller, the controller being configured to receive a message from the messaging mechanism structured according to the messaging format, and to respond by executing the processing logic of the microservice on condition of the type specified by the second field of the received message matching the input type of the annotation of the microservice; the messaging mechanism is configured to distribute a message output to the messaging mechanism and structured according to the message format to each microservice for which one of the one or more output types of the annotation matches one of the one or more types specified by the third field of the message; and wherein, the controller of each microservice is configured, on condition of the type specified by the second field of the received message not matching the input type of the annotation, to modify the message by adding the input type of the annotation of the microservice to the third field of the message, and to output the modified message for transmission via the messaging mechanism.