2017-07-04 3 views
0

Disons que j'ai ce qui suit: - un serveur node.js qui est capable d'interroger une base de données et de recevoir un (éventuellement grand) JSON - un serveur gremlin (configuré avec gremlin -server-rest-modern.yaml mais peut-être il doit y avoir quelque chose de plus là-dedans)Gremlin Server comme API REST avec des données créées dynamiquement

Ma question est la suivante: existe-t-il un moyen d'ajouter dynamiquement et par programme un nouveau graphique devant être servi par le serveur? Je veux que mon serveur de noeud interroge la base de données et envoie la réponse de JSON au serveur de gremlin; là, la réponse sera convertie en un graphique; à partir du serveur de noeud, l'utilisateur pourra envoyer d'autres requêtes et recevoir des réponses complexes. Comment puis-je y parvenir?

J'ai essayé d'utiliser [1] mais je ne suis pas sûr de savoir comment faire ce que je veux. Comment envoyez-vous réellement plusieurs commandes (chaînées), comme un mini-script? Je sais comment le faire en utilisant la console, mais pas en utilisant le serveur (en tant que service REST), car il n'y a pas d'API exposée. Pouvez-vous me donner un conseil ou des exemples? Merci!

Adrian

[1] https://github.com/jbmusso/gremlin-javascript

Edit: Je réussi à envoyer un message POST au serveur avec quelques commandes simples. Cela fonctionne si j'envoie un POST avec toutes les commandes (la création du graphe et la requête). Cependant, pour plusieurs POST, le contexte n'est pas sauvegardé. Tout d'abord, je vous envoie un POST avec le contenu:

{ 
"gremlin" : "graph = TinkerGraph.open(); g = graph .traversal(); graph .addVertex('name', 'adrian', 'age', 21); " 
} 

Puis, je vous envoie un autre poste avec

{ 
"gremlin" : "v2 = graph.addVertex('name', 'gigel', 'age', 22); g.V()" 
} 

Cependant, je reçois l'erreur suivante:

{ 
    "message": "No such property: graf for class: Script4", 
    "Exception-Class": "groovy.lang.MissingPropertyException", 
    "exceptions": [ 
     "groovy.lang.MissingPropertyException" 
    ], 
    "stackTrace": "groovy.lang.MissingPropertyException: No such property: graf for class: Script4\n\tat org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)\n\tat org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52)\n\tat org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)\n\tat Script4.run(Script4.groovy:1)\n\tat org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:834)\n\tat org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:547)\n\tat javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)\n\tat org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines.eval(ScriptEngines.java:120)\n\tat org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$2(GremlinExecutor.java:314)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n\tat java.lang.Thread.run(Thread.java:745)\n" 
} 

Le contexte n'est pas sauvegardé sur le serveur gremlin? Je dois envoyer le script entier pour être exécuté? Que faire si je veux créer deux graphiques et les interroger plus tard?

Merci!

Répondre

3

Les graphes que vous créez dans des scripts via des requêtes sans session (comme REST) ​​ne sont pas conservés. Vous pouvez créer des instances de graphe qui sont maintenues entre les demandes dans une session, mais elles ne sont maintenues que dans cette session et inaccessibles en dehors de cette session.

Si vous voulez créer des graphiques globalement pour le serveur, ils doivent être:

  1. configuré dans le fichier de configuration du serveur
  2. produit dans le cadre d'un script d'initialisation
  3. construit par une coutume GraphManager instance (ce qui implique l'écriture de code Java)

Je suppose qu'il serait également possible de construire un point de terminaison personnalisé qui vous permet de gérer le grap hs d'une certaine manière, mais vous devriez obtenir plus qu'une connaissance superficielle du code de Gremlin Server pour le retirer (ce ne serait pas trop difficile cependant).