reply
Retourne une réponse au client ayant requêté l'endpoint déclaré par la clause from()
Patterns
Request/Reply
Usage
public LinkStream reply(String label, Atomic... atomics) throws StreamDefinitionException;
@param
label: libellé de la clause, affichée sur l'arborescence du stream (onglet packages)
@param
url: URL de distribution de la fonction lambda
@param
atomics: fonction lambda (au moins une requise)
@return
retourne l'instance du flux (approche DSL)
@exception
Si l'exception StreamDefinitionException est levée la compilation échoue et un message d'erreur s'affiche
Lorsque plusieurs fonctions lambda sont définies, elles sont exécutées séquentiellement sur les mêmes données reçues en entrée. Cela permet d'exécuter plusieurs traitements logiques distincts et de transmettre les réponses au client
public Object (LinkStream stream, Event event) -> { return ... }
@param
stream: context d'exécution du stream
@param
event: payload. L'objet org.mddynamics.network.stream.Event est un wrapper
@return
: données retournées par la fonction lambda et transmises à la clause from de l'algorithme
Il est possible de retourner l'objet Event ou tout autre objet sérialisable. Si l'objet retourné est une instance de java.lang.Iterable alors chaque élément de la liste sera transmis en réponse au client
Exemple de code
@Override
public void build() throws Exception {
make("power yield api")
.from("api", "www.mddynamics.fr/app/api", (stream, request) -> {
return valid(request);
})
.read("yield", "www.mddynamics.fr/app/store/yield", (stream, request) -> {
return stream.util(SPARQL.class).query(
"prefix : <http://mddynamics.fr/link/>",
"prefix list: <http://jena.apache.org/ARQ/list#>",
"select ?yield ?timestamp where {",
"?metric a :Metric;",
":timestamp ?timestamp;",
":data/list:member ?value.",
"filter (?timestamp >= ?from && ?timestamp < ?to", Param("from", request), Param("to", request)
"} order by ?timestamp"
);
})
.reply("nominal response", (stream, response) -> {
return response;
});
}