r-io suiter-io suitereference docs
← Documentation home
Reference / Interfaces

API reference

Three ways into the platform: the REST resources served by each web application, the WebSocket topics that push live events to clients, and the SOAP contracts of the sixteen backend services. Language drivers wrap the first two behind business-oriented ports.

How to read the paths

REST paths are relative to a web application server, http://<host>:<port>/<app>/…, where {app} is the application name (r-ioga, r-ioda, r-iota…). Resources of the shared module gind-webapp-generic-application-users exist in every application; resources listed under a specific application exist only there. Ports are in Configuration & ports.

01 · Access model

Authentication, context and live channel

REST

HTTP Basic on almost everything

DWApplicationService registers a BasicCredentialAuthFilter that authenticates against the system service and injects a DWUser principal. 31 of the 33 resources require it (@Auth); only the application context, ping, checkTaskDone, OpenAPI and the simplified /{app}/user login resource are open. No role restriction is enforced at present (the @RolesAllowed("admin") annotations are commented out).

Scope

Collaboration and knowledge space

Every model, process or sensor call is scoped by the user’s current collaboration and knowledge space, selected through /system/collaboration/collaboration/select/{id} and …/knowledge/select/{collaborationId}/{knowledgeSpaceId}. The application context (/generic-application/context/applicationContext) returns the effective metamodel and the WebSocket topic templates.

WebSocket

Scoped pub/sub topics

PubSubServerServlet on /ws/pubsub/* takes the rest of the path as topic. Topics are prefixed by the hash codes of the collaboration and knowledge space names, so a client subscribes to ws://host:port/ws/pubsub/<collabHash>/<ksHash>/models/. A chat servlet (/ws/chat/*) and a SockJS shim (/sockjs-node/*) also exist; r-iomega adds an OpenAI Realtime proxy.

02 · REST resources

Resources by module

Operations are listed as they appear in the Jersey classes; a leading method applies to the sub-paths that follow it.

Shared module gind-webapp-generic-application-users (all applications)

ResourceBase pathOperations
DWApplicationContextResource/{app}/generic-application/contextGET applicationContext — effective metamodel, topic templates, strategies
DefaultResource · OnlyGetResource/{app}/generic-application/default · …/onlygetGET ping · GET checkTaskDone
OpenApiResource/{app}/openapi.jsonGET — OpenAPI descriptor when swagger.enabled
SystemResource/{app}/generic-application/systemPOST user/login, user/logout, user/register · GET user/users, user/users/{id}, user/hasAdmins, user/export/{userId} · POST/DELETE user/users · GET collaboration/collaborations[/{userId}], collaboration/collaboration/{id}, collaboration/knowledgeSpace/{id}, collaboration/collaboration/select/{id}, collaboration/knowledge/select/{cid}/{kid}, collaboration/collaboration/export/{id}, collaboration/knowledges/{cid}, collaboration/users/{cid}, collaboration/attachKnowledgeSpaceToCollaboration · POST collaboration/findCollaborationsByName, collaboration/collaborations, collaboration/connectUserToCollaboration · DELETE collaboration/collaborations/{id}, collaboration/knowledgeSpace/{id} · GET ping
UserResource/{app}/userPOST login, logout, getUsers
CoreResource/{app}/generic-application/corePOST/PUT nodes · POST nodes/getNode, nodes/findNodesByTypesAndOrProperties · DELETE nodes/{id} · POST/PUT edges · POST edges/getEdge · DELETE edges/{id}
Neo4JResource/{app}/generic-application/neo4jPOST query — raw Cypher
ModelsResource/{app}/generic-application/modelsPOST publishModel, synchronize, addModelsFromURL, freeze, cloneModelFromStatus · GET query, query/multiple · PUT deleteModels
MetaModelsResource/{app}/generic-application/metamodelsGET getUMLEffectiveDomain · POST publishSyncEffectiveDomain, unpublishSyncEffectiveDomain, extractSyncEffectiveDomain
StorageResource · FileResource…/storage · …/filePOST query, update · GET download, POST upload (multipart)
HumanTaskResource/{app}/generic-application/persons/humantaskGET todoList/{assignedToId}, subscribeToAddTasksByAssignedToResource/{assignedToId} · POST updateTask
Person3DModelResource…/person-3d-modelPOST generate
AIChatbotResource/{app}/generic-application/aichatbotPOST query, invent{Functions, Roles, RolesFromObjectives, Actualities, Potentialities, Potential, Persons, Goods, Buildings, Roads, RoadNetworkFromTerritory, WaterNetworkFromTerritory, ElectricalNetworkFromTerritory, UrbanRailNetworkFromTerritory, Groups, Territories, Sensors, Iots, PositionFromTerritory, Tweets, Pictures, CodeExplanation}, similarityLevel, loadDocumentsForRAG, exportDocumentsFromRAG, showInfosDocumentsInRAG, restoreRAGFromDirectory, deleteRAG, findContextAndPartnersInRAG · GET getRiopiotContext
ProcessResource/{app}/r-ioga/processPOST deduceProcess, deploy, undeploy, supervise, runSync, runASync, findAssociatedStrategiesToRisk, cancelOrchestration, subscribeOnDeploymentService, subscribeOnProcessInstanceEventService, subscribeExchangesByInstance · GET list, instancesByProcess/{name}, processInstance/{id}, exchangesByInstance/{id}, getProcessModels/{name}, getProcessDeployResult/{name}, pauseOrchestration/{id}, resumeOrchestration/{id} · DELETE deleteOrchestration/{id}
SolutionResource/{app}/r-ioga/solutionPOST selectSolution, deduceSolutionASync, deploySolution, undeploySolution, superviseSolution, runASyncSolution, cancelSolution · GET findSelectedSolution
ProjectResource/{app}/r-ioga/projectsGET findProjectsByUserAndCollaboration/{collab}, projects/{id}, getProjectByNameInCollaboration, findEffectiveDomainByProjectId, findEffectivePackageByNameByProjectId, exportExcelData/{id}, containsRangeOnMetricsOrIndicators/{id} · POST projects, downloadRemoteUsecase, loadProjectFromUsecase, exportProject, importProject, importExcelData · PUT projects · DELETE projects/{id}, resetAll
SemanticResource/{app}/r-ioga/semanticPOST exportToOWL, exportToTurtle, exportToJsonLd
InterpretationRulesResource/{app}/r-ioga/interpretation_rulesPOST importRule, addRules, addCepRuleDefinitions, addRulesFromURL, predict · GET rules, rule · DELETE deleteRules, deleteRule
SensorManagerResource/{app}/sensorManagerPOST createSensor, startSensor, stopSensor, deleteSensor, getSensor, setLocked, findSensorByTopic, updateConfigOfSensor, sendTweetToAllSensors, start/pause/update/continuousSignalIsStartedOnJSONConnector · GET getSensors, findSensorByProtocol/{type}/{nature}/{collab}/{ks}
CampaignResource/{app}/r-iosepe/campaignPOST publishCampaign, getFailureSolutions, getAllCampaigns, findSolutionsByMetrics, createCampaign, updateCampaign, updateCampaignSolutionFlags, deleteCampaign · GET campaigns/{id}, campaignSolutionsFromCampaign/{id}, getCampaignsByUser, campaigns/{campaignId}/{solutionId}

Application-specific resources

Application · resourceBase pathOperations
r-ioga · EventBrokerResource/{app}/r-ioga/eventBrokerGET getAllTopics · POST subscribe, unsubscribe
r-ioga · TimeSeriesResource/{app}/r-ioga/timeSeriesPOST write, update, query, delete, deleteAll
r-iota · DetectionResource/{app}/r-iota/detectionPOST detect — expected (EXPECTED_FREEZE) vs field (ACTIVE) models
r-iota · LightControlerResource/{app}/r-iota/lightcontrolerPUT controlLight
r-ioded · DroolsStrategiesResource/{app}/r-ioded/droolsGET strategies, strategies/{id}, strategies/{id}/export · POST strategies, strategies/{id}/clone, strategies/import, strategies/{id}/validate, strategies/{id}/publish, strategies/{id}/test
r-iosepe · ExcelResource · JsonResource/{app}/r-iosepe/campaign/excel · …/jsonPOST exportCampaign, exportSolutions
r-iosemit · GameMasterResource/{app}/gameMasterPOST setCurrentGameScenario, getCurrentGameScenario, getGameScenarios, createGameScenario, updateGameScenario, deleteGameScenario, saveGameScenario
r-iosemit · MockEndpointsManagerResource/{app}/mockEndpointManagerPOST createMockEndpoint, startMockEndpoint, stopMockEndpoint, deleteMockEndpoint, getMockEndpoints, findMockEndpointByGoodId, runActuatorOnMockEndpoint, addExchangeOnMockEndpoint, deleteExchangeOnMockEndpoint, playExchangeOnMockEndpoint
r-iosemit · SensorControlerResource/{app}/sensorControlerPOST getSensorControlers, createSensorControler, updateSensorControler, launchDataSetOnTopic, pauseDataSetOnTopic, stopDataSetOnTopic, addBreakpoints, removeBreakpoints, getBreakpoints, sendEventToSensor, addDatasetAndRefreshModelOnSensorControlerFrom{File,Json}, updateDataset…From{File,Json}, removeDatasetOnSensorControler, getXMLDataOfDataset, updateDatasetAndModelConfiguration · GET findSensorControlerByProtocol/{type}/{nature}/{scenario}/{collab}/{ks}
r-ioplay · GeoJSONResource/{app}/geoJSONPOST loadPredefinedGeoJSONFiles, deployGeoJSONFiles, undeployGeoJSONFiles · GET getGeoJSONFiles
r-ioplay · GisResource/{app}/gisPOST findConceptsHere, detectConceptsInside, findInOSM
r-iomega · AssistantResource/{app}/api/assistantGET getToolsInfo · POST handle
r-iomega · OpenAIAudioResource/{app}/openai/audioPOST tts, stt · GET realtime/token
03 · WebSocket topics

Templates of TopicManager

Templates are published in the application context under mapTopicDefinitionsTemplate; clients replace ${collaborationNameHascode} and ${knowledgeSpaceNameHascode} with the Java hash code of the regex-friendly names, and optional placeholders with an id or an empty string.

TopicTemplateCarries
MODELS${c}/${k}/models/Node and edge add, update and remove events of the graph
MONITORING${c}/${k}/monitoring/${processInstanceId}?Process exchanges and instance progression
PROCESS${c}/${k}/process/Deploy, undeploy and asynchronous run responses
SOLUTION${c}/${k}/solution/Deduction progress, scenarios and errors
TASKS${c}/${k}/tasks/${personNodeId}?Human-task add, update and remove events, global or per person
SENSORS${c}/${k}/sensors/Sensor status and measurement notifications
CAMPAIGN${c}/${k}/campaign/Campaign and solution updates
LLM_REASONNING${c}/${k}/llmreasonning/${requestId}AI chatbot graph structure and progress events
ALL${c}/${k}/Declared but not functional
04 · SOAP contracts

Backend services, endpoints and operations

Every backend service extends SPIWebServicePrimitives and registers one or more JAX-WS implementations under an endpoint suffix. WS-Notification producers all expose producerService (Subscribe, Unsubscribe, GetCurrentMessage, GetResourceProperty) and consumers NotifierClientService (Notify, SubscribeOn, UnSubscribeOn); they are not repeated below. WSDL files live in the *-client modules under src/main/resources/wsdl.

Service · endpointContractOperations
Governance container · port 10101 · base /gov
GovCorecore_gov · core-gov.wsdladdNode, updateNode, getNode, removeNode, addEdge, updateEdge, getEdge, removeEdge, query
GovSystemsystem_gov · system-gov.wsdlusers (add, update, get, remove, getAllUsers, getAdministrators, findUserByEmail, findUserByLoginAndPassword), collaborations (add, update, get, remove, getAllCollaborations, findCollaborationsByName, findCollaborationsOfUser, exportCollaboration, connect/disconnectUserToCollaboration, getUsersInCollaboration), knowledge spaces (add, update, get, remove, attach/detachKnowledgeSpaceToCollaboration, getKnowledgeSpacesInCollaboration, findKnowledgeSpacesByName, findKnowledgeSpacesByUserAndCollaboration, getKnowledgeSpaceByNameInCollaboration)
GovNeo4Jneo4jService · neo4j.wsdlquery
GovMetaCoremeta_core_gov · meta-core-gov.wsdladd/update/get/removeConcept, add/update/get/removeRelation, add/update/get/removeConnexionRule
GovMetaModelsmeta_models_gov · meta-models-gov.wsdlpublish/unpublish/extractSyncMetaModel, publish/unpublish/extractASyncMetaModel, publish/unpublish/extractSyncEffectiveDomain; callback port: …ASyncMetaModelCallBack, sendCallbackError
GovModelsmodels_gov · models-gov.wsdlpublish/unpublish/extract/freezeSyncModel, cloneSyncModelFromStatus and ASync variants; callback port: …ASyncModelCallBack, sendCallbackError
GovDeductiondeductionService · deduction.wsdldeduceASync; callback port deductionCallBack: deductionASyncCallBackResponse (implemented by the web applications)
GovAIChatbotai_chatbot · ai-chatbot.wsdlquery, queryOnPictures, invent* (functions, roles, actualities, potentialities, persons, goods, groups, territories, sensors, iots, buildings, roads, pictures, tweets, code explanation, problems from news, road/water networks), similarityLevel, RAG (load, export, show, restore, delete, findContextAndPartners); publisher port: publishGraph{Structure, Progress, Completed, Error, Warning}Event
GovAICommandAssistantai_command_assistant · ai-command-assistant.wsdlhandle, getToolsInfo
GovCoreSubscriber · LLNotifierproducerService · NotifierClientServicegraph event producer; 2L update/add node notifier
Interpretation container · port 10106 · base /InterpretationEngine
LowLevelInterpretationManagerInterpretationConfigsCommandService · InterpretationApi.wsdldeploy, undeploy, getInterpretationConfig, getInterpretationConfigs, updateInterpretationConfig, predict
LowLevelInterpretation{Subscriber, CepNotifier, MLNotifier} · HighLevelInterpretation{Subscriber, Notifier}producerService · NotifierClientServiceWS-Notification plumbing of the low and high levels
CEP rules manager (standalone module)cepRulesManager, cepRulesSubscriber, cepRulesNotifiersame contract as the low-level manager
Perception, simulation and evaluation
detectionEngine · 10108detectionService · detection.wsdldetect
sensorManager · 10107sensor-manager-service · sensor-manager.wsdlcreateSensor, deleteSensor, updateConfigOfSensor, startSensor, stopSensor, stopAllSensor, listen, setLocked, setStoreMediaOnSensor, getSensor, getSensors, findSensorByTopic, findSensorByInternalUrl, findSensorByProtocol, backup/restoreTimeSeriesDB, start/pause/updateContinuousSignalOnJSONConnector
sensorControler · 10107sensor-controler-service · sensor-controler.wsdlcreate/update/destroySensorControler, get/find…, add/update/get/removeDataset…, storeDataset…, resetDataset…, play/pause/stopDataSetOnTopic…, add/remove/getBreakpoints, sendEventToSensor, getXMLDataOfDataset, updateDatasetAndModelConfiguration
GameMasterServer · 10110game_master-service · game_master_api.wsdlget/find/create/update/delete/saveGameScenario(s), get/setCurrentGameScenario, exportGameScenarios, updateSensorControlerBackup, updateMockEndpointBackup
mockEndpointsManager · 10108mock-endpoint-manager-service · mock-endpoints-manager.wsdlcreate/delete/start/stopMockEndpoint, stopAllMockEndpoints, updateConfigOfMockEndpoint, get/findMockEndpoint…, runActuatorOnMockEndpoint, add/delete/playExchangeOnMockEndpoint
TestCampaign · 10109campaignManager · campaignManager.wsdlcreate/update/get/deleteCampaign, findCampaignByName, getCampaignWithoutResources, getAllCampaignsWithoutResources, getCampaignsWithoutResourcesByUser, add/update/removeSolution, getSolutionsFromCampaign, findSolutionsByMetrics, findSolutionByName/ById/BySignature, countSolutions, countSolutionsByMetrics, getFailureSolutions, addConceptsPostAnalyze
Workflow, tasks and monitoring
WorkflowEngine_deployerService · 10103DeploymentService · Process.wsdldeploy, undeploy, listProcesses, getProcess, subscribeOnDeploymentService
WorkflowEngine_commandServiceCommandService · CommandService.wsdlpause, resume, stop, delete, cancel, getProcessModels
<process>__d_<deploymentId> (per deployed process)ProcessInstance.wsdlrunSync, runASync; callback sendASyncResponse
HumanTask · 10102humantaskService · humantask.wsdladdTaskSync, addTaskASync, updateTask, removeTask, getTask, findTask, getTodoList, findTasksByProcessInstanceId, subscribe/unSubscribeTasksByAssignedToResource; callback addTaskASyncCallBack
ProcessMonitoring · 10104ProcessMonitoring · ProcessMonitoring.wsdlget/add/update/deleteProcessInstance(s), get/add/update/deleteExchange(s), getProcessInformation, subscribeOnExchangesOfInstance, subscribeOnExchangesOfAllInstances, subscribeOnProcessInstanceEventService
Data and integration
StorageService · 10100storageService · gind-storage.wsdlput, get, query, update, remove, removeAll (document topics notified by the event storage variant)
timeseries · 19000timeseriesService · timeseries.wsdlcreateTimeseriesCollection, write, update, query, delete, deleteAll, getTimeseriesCollectionNames, dump/restoreTimeseriesCollection
BrokerRegister · BrokerSubscriber · BrokerNotifier · 10105event-broker-service · event-broker.wsdlregister, unregister, getAllTopics (+ producer and notifier contracts)
h2_gis · 10111 · osm_gis · 10112store_gis · find_gis · store-gis.wsdl, find-gis.wsdlstore_gis: query, loadGeoJSONFile, deployGeoJSONFile, undeployGeoJSONFile, getGeoJSONFilesStored — find_gis: findConceptsFromLatLng, findConceptsInsidePolygon, findConceptsInsideBBox — client callback: receiveConceptContainedInPolygon, receiveConceptContainedInBBox
websocketCommandService · 12000 (web application side)websocketCommand.wsdlgetResult — SOAP result bridged to a WebSocket topic
echo · concat · 1113 (test mocks)echo.wsdl · concat.wsdlecho · concat — toy partners of the helloworld process
05 · Drivers

Business ports per language

Drivers call the REST resources above with HTTP Basic credentials and listen to the WebSocket topics; models are the generated types of each language.

Language · locationPorts / clientsOperations
Java · java/packaging/gind-java-driverIUsers, IMetaModels, IModels, IProcess, ISolution, ITasks, IEvents, IUsecase + WSock* listenerslogin, logout, getUsers, register, findUserByName, findAssociatedPerson · getPredefinedUsecaseDefinitions, loadUsecase, isAlreadyLoadedUsecase, getUsecaseContext · push, pushpull, reload, query, getNodesByTypesAndOrProperties, get/removeNodeById, get/removeEdgeById · subscribeExchangesByInstance · deduceSolutionASync(FromSimpleSatisfactionStrategy), deploy/undeploy/supervise/select/runASync/cancelSolution · updateTask, subscribeToAddTasksByAssignedToResource · findSensorFromNode, findSensorsByType, start/stopSensor(s), sendEventOnSensor · findSensorsFixedOnto
Python · python/backend/gind-python-driverRestDriver; UsersDriverClient, MetaModelsDriverClient, ModelsDriverClient, ProcessDriverClient, TasksDriverClient, AppUserTaskDriverClient; app ports AppUser, AppTask, AppTaskListenerlogin, logout, get_users · get_usecase_context, get_project_by_name_in_collaboration, get_effective_domain, set_project_mode · push, push_pull, reload, query, get_nodes_by_types_and_or_properties · deduce, deploy, deploy_process, run_async · get_todolist, update_task · refresh_users, find_user_by_id, todo-list WebSocket functions
C# · csharp/backend/gind-csharp-driverRestDriver; IUsers, IMetaModels, IModels, IProcess, ITasks, IEvents, IDetect, IAppUserTask + wsock_functionslogin, logout, getUsers · usecase definitions and context · push, pushpull, reload, query, node/edge by id · deduce, deploy, deployProcess, undeploy, runSync, runASync, supervise, pause, resume, delete, cancel, exchangesByInstance, subscribeExchangesByInstance · getTodoList, getTasks, updateTask · findSensorsByType, createSensor, start/stopSensor(s), sendEventOnJSONConnector, isSimulation · detect (F-score strategy)
Dart · dart/frontend/gind_r_io4u/lib/driver/rest/adaptersUsers/System, MetaModels, Models, Solution, Tasks, Events, MockEndpoints, Chatbots, Files, Usecase driver clients + web_socket/api listenersgetUser(s), updateUser · getProjectByNameInCollaboration, getEffectiveDomain · push, pushpull, query, reload, delete, node/edge by id, patchEdge(s) · deduceSolution, deploySolution, runASyncSolution, superviseSolution, undeploySolution, pause, resume, cancel, delete, exchangesByInstance · getTodoList, subscribeToTodoList, updateTask · sensors start/stop/send/continuous signal · mock endpoints and exchanges · inventActualities, inventPictures · upload(s) · getGeoLocInstances

Examples

Deduce a process from the objectives of a loaded use casePython 3
# python/backend/gind-python-driver — context keys mirror unified_config.properties
from fr_emac_gind_rio.driver.rest.RestDriver import RestDriver
from fr_emac_gind_rio.driver.rest.ports.IProcess import SatisfactionStrategy
from fr_emac_gind_rio.utils.system_user import SystemUser
from lxml.etree import QName

context = {"host": "127.0.0.1", "r-ioda...port": "9102", "r-iose...port": "9110",
           "r-ioxo...port": "9126", "websocket-command-service-port": "12000"}
driver = RestDriver(context, SystemUser("login", "password"))
driver.meta_model_driver.get_usecase_context(knowledge_space_name="IMT Albi Crisis",
                                             collaboration_name="R-IO Suite")

objectives = driver.model_driver.get_nodes_by_types_and_or_properties(
    types=[QName("http://fr.emac.gind/collaborative-model", "Objective")])
reports = driver.process_driver.deduce(SatisfactionStrategy(objectives_order=objectives))

user = driver.app_user_task_driver.refresh_users()[0]
user.login()                       # opens the WebSocket to-do channel
todo = user.refresh_todo_list()

Signatures: RestDriver(context: Dict, user: SystemUser), MetaModelsDriverClient.get_usecase_context(knowledge_space_name, collaboration_name), ModelsDriverClient.get_nodes_by_types_and_or_properties(types, properties=None, node_status=None), ProcessDriverClient.deduce(satisfaction_strategy), AppUser.login(subscribe_on_task=True), AppUser.refresh_todo_list(). The Python driver addresses r-ioda, r-iose and the legacy r-ioxo name (port 9126); the example shipped in gind-python-driver-examples-test still uses an older constructor and should not be copied.

Same scenario, then deploy the first deduced processC#
// csharp/backend/gind-csharp-driver — one RestDriver for r-ioda, r-iose, r-ioxo and r-iota
using gind_csharp_driver_rest; using gind_csharp_utils; using fr_emac_gind_model; using System.Xml;

RestDriver driver = RestDriver.createRestDriver("127.0.0.1", 9102, 9110, 9126, 9108,
    new SystemUser("login", "password"));
var ucDef = await driver.metaModelDriver.findPredefinedUsecaseDefinitionByName("IMT Albi Crisis");
UsecaseContext uc = await driver.metaModelDriver.loadUsecase(ucDef, "R-IO Suite");
uc.startWSockUsecaseChannel();     // model events through /ws/pubsub

node[] objectives = await driver.modelDriver.getNodesByTypesAndOrProperties(
    new[] { new XmlQualifiedName("Objective", "http://fr.emac.gind/collaborative-model") });
deductionReport[] reports = await driver.processDriver.deduce(new SatisfactionStrategy(objectives));
genericModel processModel = ((deductionResult)reports[0].Item).genericModel;
node processNode = GenericModelUtil.getNodesByType(
    new XmlQualifiedName("Process", "http://fr.emac.gind/collaborative-model"), processModel)[0];
DeployResult deployed = await driver.processDriver.deploy(processNode);

Signatures: RestDriver.createRestDriver(host, riodaPort, riosePort, rioxoPort, riotaPort, user) (or createRestDriverFromConfigFile(path, user)), MetaModelsDriverClient.findPredefinedUsecaseDefinitionByName(name), loadUsecase(definition, collaborationName), ModelsDriverClient.getNodesByTypesAndOrProperties(types, properties=null, status=ACTIVE), ProcessDriverClient.deduce(strategy), deploy(processNode). Credentials travel as an HTTP Basic token built by SystemUser; never hard-code them in shared code.

06 · Example

A minimal REST session

Against a local standalone, through the r-ioga server (port 9100). Replace the credentials with an account created in r-ioga.

curlHTTP Basic · JSON
# liveness (no authentication)
curl http://localhost:9100/r-ioga/generic-application/default/ping

# list collaborations of the authenticated user
curl -u login:password http://localhost:9100/r-ioga/generic-application/system/collaboration/collaborations

# select a collaboration and a knowledge space (scopes every later call)
curl -u login:password http://localhost:9100/r-ioga/generic-application/system/collaboration/knowledge/select/{collaborationId}/{knowledgeSpaceId}

# find nodes by type in the current knowledge space
curl -u login:password -H "Content-Type: application/json" \
     -d '{"types":["{http://fr.emac.gind/collaborative-model}Person"]}' \
     http://localhost:9100/r-ioga/generic-application/core/nodes/findNodesByTypesAndOrProperties

# live model events (topic = hash(collaboration)/hash(knowledge space)/models/)
websocat ws://localhost:9100/ws/pubsub/{collabHash}/{ksHash}/models/
Référence / Interfaces

Référence API

Trois portes d’entrée dans la plateforme : les ressources REST servies par chaque application web, les topics WebSocket qui poussent les événements en direct vers les clients, et les contrats SOAP des seize services backend. Les drivers par langage enveloppent les deux premières derrière des ports métier.

Comment lire les chemins

Les chemins REST sont relatifs à un serveur d’application web, http://<hôte>:<port>/<app>/…, où {app} est le nom de l’application (r-ioga, r-ioda, r-iota…). Les ressources du module partagé gind-webapp-generic-application-users existent dans toutes les applications ; celles listées sous une application précise n’existent que là. Les ports figurent dans Configuration & ports.

01 · Modèle d’accès

Authentification, contexte et canal temps réel

REST

HTTP Basic presque partout

DWApplicationService enregistre un BasicCredentialAuthFilter qui authentifie auprès du service système et injecte un principal DWUser. 31 des 33 ressources l’exigent (@Auth) ; seuls le contexte applicatif, ping, checkTaskDone, OpenAPI et la ressource de connexion simplifiée /{app}/user sont ouverts. Aucune restriction de rôle n’est appliquée à ce jour (les annotations @RolesAllowed("admin") sont commentées).

Périmètre

Collaboration et espace de connaissance

Chaque appel de modèle, de processus ou de capteur est cadré par la collaboration et l’espace de connaissance courants de l’utilisateur, choisis via /system/collaboration/collaboration/select/{id} et …/knowledge/select/{collaborationId}/{knowledgeSpaceId}. Le contexte applicatif (/generic-application/context/applicationContext) renvoie le métamodèle effectif et les gabarits de topics WebSocket.

WebSocket

Topics pub/sub cloisonnés

PubSubServerServlet sur /ws/pubsub/* prend le reste du chemin comme topic. Les topics sont préfixés par les codes de hachage des noms de collaboration et d’espace de connaissance : un client s’abonne à ws://hôte:port/ws/pubsub/<hashCollab>/<hashKs>/models/. Une servlet de chat (/ws/chat/*) et un shim SockJS (/sockjs-node/*) existent aussi ; r-iomega ajoute un proxy OpenAI Realtime.

02 · Ressources REST

Ressources par module

Les opérations sont listées telles qu’elles apparaissent dans les classes Jersey ; une méthode en tête s’applique aux sous-chemins qui la suivent.

Module partagé gind-webapp-generic-application-users (toutes les applications)

RessourceChemin de baseOpérations
DWApplicationContextResource/{app}/generic-application/contextGET applicationContext — métamodèle effectif, gabarits de topics, stratégies
DefaultResource · OnlyGetResource/{app}/generic-application/default · …/onlygetGET ping · GET checkTaskDone
OpenApiResource/{app}/openapi.jsonGET — descripteur OpenAPI si swagger.enabled
SystemResource/{app}/generic-application/systemPOST user/login, user/logout, user/register · GET user/users, user/users/{id}, user/hasAdmins, user/export/{userId} · POST/DELETE user/users · GET collaboration/collaborations[/{userId}], collaboration/collaboration/{id}, collaboration/knowledgeSpace/{id}, collaboration/collaboration/select/{id}, collaboration/knowledge/select/{cid}/{kid}, collaboration/collaboration/export/{id}, collaboration/knowledges/{cid}, collaboration/users/{cid}, collaboration/attachKnowledgeSpaceToCollaboration · POST collaboration/findCollaborationsByName, collaboration/collaborations, collaboration/connectUserToCollaboration · DELETE collaboration/collaborations/{id}, collaboration/knowledgeSpace/{id} · GET ping
UserResource/{app}/userPOST login, logout, getUsers
CoreResource/{app}/generic-application/corePOST/PUT nodes · POST nodes/getNode, nodes/findNodesByTypesAndOrProperties · DELETE nodes/{id} · POST/PUT edges · POST edges/getEdge · DELETE edges/{id}
Neo4JResource/{app}/generic-application/neo4jPOST query — Cypher brut
ModelsResource/{app}/generic-application/modelsPOST publishModel, synchronize, addModelsFromURL, freeze, cloneModelFromStatus · GET query, query/multiple · PUT deleteModels
MetaModelsResource/{app}/generic-application/metamodelsGET getUMLEffectiveDomain · POST publishSyncEffectiveDomain, unpublishSyncEffectiveDomain, extractSyncEffectiveDomain
StorageResource · FileResource…/storage · …/filePOST query, update · GET download, POST upload (multipart)
HumanTaskResource/{app}/generic-application/persons/humantaskGET todoList/{assignedToId}, subscribeToAddTasksByAssignedToResource/{assignedToId} · POST updateTask
Person3DModelResource…/person-3d-modelPOST generate
AIChatbotResource/{app}/generic-application/aichatbotPOST query, invent{Functions, Roles, RolesFromObjectives, Actualities, Potentialities, Potential, Persons, Goods, Buildings, Roads, RoadNetworkFromTerritory, WaterNetworkFromTerritory, ElectricalNetworkFromTerritory, UrbanRailNetworkFromTerritory, Groups, Territories, Sensors, Iots, PositionFromTerritory, Tweets, Pictures, CodeExplanation}, similarityLevel, loadDocumentsForRAG, exportDocumentsFromRAG, showInfosDocumentsInRAG, restoreRAGFromDirectory, deleteRAG, findContextAndPartnersInRAG · GET getRiopiotContext
ProcessResource/{app}/r-ioga/processPOST deduceProcess, deploy, undeploy, supervise, runSync, runASync, findAssociatedStrategiesToRisk, cancelOrchestration, subscribeOnDeploymentService, subscribeOnProcessInstanceEventService, subscribeExchangesByInstance · GET list, instancesByProcess/{name}, processInstance/{id}, exchangesByInstance/{id}, getProcessModels/{name}, getProcessDeployResult/{name}, pauseOrchestration/{id}, resumeOrchestration/{id} · DELETE deleteOrchestration/{id}
SolutionResource/{app}/r-ioga/solutionPOST selectSolution, deduceSolutionASync, deploySolution, undeploySolution, superviseSolution, runASyncSolution, cancelSolution · GET findSelectedSolution
ProjectResource/{app}/r-ioga/projectsGET findProjectsByUserAndCollaboration/{collab}, projects/{id}, getProjectByNameInCollaboration, findEffectiveDomainByProjectId, findEffectivePackageByNameByProjectId, exportExcelData/{id}, containsRangeOnMetricsOrIndicators/{id} · POST projects, downloadRemoteUsecase, loadProjectFromUsecase, exportProject, importProject, importExcelData · PUT projects · DELETE projects/{id}, resetAll
SemanticResource/{app}/r-ioga/semanticPOST exportToOWL, exportToTurtle, exportToJsonLd
InterpretationRulesResource/{app}/r-ioga/interpretation_rulesPOST importRule, addRules, addCepRuleDefinitions, addRulesFromURL, predict · GET rules, rule · DELETE deleteRules, deleteRule
SensorManagerResource/{app}/sensorManagerPOST createSensor, startSensor, stopSensor, deleteSensor, getSensor, setLocked, findSensorByTopic, updateConfigOfSensor, sendTweetToAllSensors, start/pause/update/continuousSignalIsStartedOnJSONConnector · GET getSensors, findSensorByProtocol/{type}/{nature}/{collab}/{ks}
CampaignResource/{app}/r-iosepe/campaignPOST publishCampaign, getFailureSolutions, getAllCampaigns, findSolutionsByMetrics, createCampaign, updateCampaign, updateCampaignSolutionFlags, deleteCampaign · GET campaigns/{id}, campaignSolutionsFromCampaign/{id}, getCampaignsByUser, campaigns/{campaignId}/{solutionId}

Ressources propres à une application

Application · ressourceChemin de baseOpérations
r-ioga · EventBrokerResource/{app}/r-ioga/eventBrokerGET getAllTopics · POST subscribe, unsubscribe
r-ioga · TimeSeriesResource/{app}/r-ioga/timeSeriesPOST write, update, query, delete, deleteAll
r-iota · DetectionResource/{app}/r-iota/detectionPOST detect — modèles attendu (EXPECTED_FREEZE) et terrain (ACTIVE)
r-iota · LightControlerResource/{app}/r-iota/lightcontrolerPUT controlLight
r-ioded · DroolsStrategiesResource/{app}/r-ioded/droolsGET strategies, strategies/{id}, strategies/{id}/export · POST strategies, strategies/{id}/clone, strategies/import, strategies/{id}/validate, strategies/{id}/publish, strategies/{id}/test
r-iosepe · ExcelResource · JsonResource/{app}/r-iosepe/campaign/excel · …/jsonPOST exportCampaign, exportSolutions
r-iosemit · GameMasterResource/{app}/gameMasterPOST setCurrentGameScenario, getCurrentGameScenario, getGameScenarios, createGameScenario, updateGameScenario, deleteGameScenario, saveGameScenario
r-iosemit · MockEndpointsManagerResource/{app}/mockEndpointManagerPOST createMockEndpoint, startMockEndpoint, stopMockEndpoint, deleteMockEndpoint, getMockEndpoints, findMockEndpointByGoodId, runActuatorOnMockEndpoint, addExchangeOnMockEndpoint, deleteExchangeOnMockEndpoint, playExchangeOnMockEndpoint
r-iosemit · SensorControlerResource/{app}/sensorControlerPOST getSensorControlers, createSensorControler, updateSensorControler, launchDataSetOnTopic, pauseDataSetOnTopic, stopDataSetOnTopic, addBreakpoints, removeBreakpoints, getBreakpoints, sendEventToSensor, addDatasetAndRefreshModelOnSensorControlerFrom{File,Json}, updateDataset…From{File,Json}, removeDatasetOnSensorControler, getXMLDataOfDataset, updateDatasetAndModelConfiguration · GET findSensorControlerByProtocol/{type}/{nature}/{scenario}/{collab}/{ks}
r-ioplay · GeoJSONResource/{app}/geoJSONPOST loadPredefinedGeoJSONFiles, deployGeoJSONFiles, undeployGeoJSONFiles · GET getGeoJSONFiles
r-ioplay · GisResource/{app}/gisPOST findConceptsHere, detectConceptsInside, findInOSM
r-iomega · AssistantResource/{app}/api/assistantGET getToolsInfo · POST handle
r-iomega · OpenAIAudioResource/{app}/openai/audioPOST tts, stt · GET realtime/token
03 · Topics WebSocket

Gabarits de TopicManager

Les gabarits sont publiés dans le contexte applicatif sous mapTopicDefinitionsTemplate ; les clients remplacent ${collaborationNameHascode} et ${knowledgeSpaceNameHascode} par le code de hachage Java des noms normalisés, et les espaces réservés optionnels par un identifiant ou une chaîne vide.

TopicGabaritTransporte
MODELS${c}/${k}/models/Événements d’ajout, de mise à jour et de suppression de nœuds et d’arêtes du graphe
MONITORING${c}/${k}/monitoring/${processInstanceId}?Échanges de processus et progression des instances
PROCESS${c}/${k}/process/Déploiement, retrait et réponses d’exécution asynchrone
SOLUTION${c}/${k}/solution/Progression, scénarios et erreurs de déduction
TASKS${c}/${k}/tasks/${personNodeId}?Événements de tâches humaines, globaux ou par personne
SENSORS${c}/${k}/sensors/Notifications d’état et de mesure des capteurs
CAMPAIGN${c}/${k}/campaign/Mises à jour de campagnes et de solutions
LLM_REASONNING${c}/${k}/llmreasonning/${requestId}Événements de structure et de progression du graphe du chatbot IA
ALL${c}/${k}/Déclaré mais non fonctionnel
04 · Contrats SOAP

Services backend, endpoints et opérations

Chaque service backend étend SPIWebServicePrimitives et enregistre une ou plusieurs implémentations JAX-WS sous un suffixe d’endpoint. Les producteurs WS-Notification exposent tous producerService (Subscribe, Unsubscribe, GetCurrentMessage, GetResourceProperty) et les consommateurs NotifierClientService (Notify, SubscribeOn, UnSubscribeOn) ; ils ne sont pas répétés ci-dessous. Les WSDL sont dans les modules *-client sous src/main/resources/wsdl.

Service · endpointContratOpérations
Conteneur de gouvernance · port 10101 · base /gov
GovCorecore_gov · core-gov.wsdladdNode, updateNode, getNode, removeNode, addEdge, updateEdge, getEdge, removeEdge, query
GovSystemsystem_gov · system-gov.wsdlutilisateurs (add, update, get, remove, getAllUsers, getAdministrators, findUserByEmail, findUserByLoginAndPassword), collaborations (add, update, get, remove, getAllCollaborations, findCollaborationsByName, findCollaborationsOfUser, exportCollaboration, connect/disconnectUserToCollaboration, getUsersInCollaboration), espaces de connaissance (add, update, get, remove, attach/detachKnowledgeSpaceToCollaboration, getKnowledgeSpacesInCollaboration, findKnowledgeSpacesByName, findKnowledgeSpacesByUserAndCollaboration, getKnowledgeSpaceByNameInCollaboration)
GovNeo4Jneo4jService · neo4j.wsdlquery
GovMetaCoremeta_core_gov · meta-core-gov.wsdladd/update/get/removeConcept, add/update/get/removeRelation, add/update/get/removeConnexionRule
GovMetaModelsmeta_models_gov · meta-models-gov.wsdlpublish/unpublish/extractSyncMetaModel, publish/unpublish/extractASyncMetaModel, publish/unpublish/extractSyncEffectiveDomain ; port de rappel : …ASyncMetaModelCallBack, sendCallbackError
GovModelsmodels_gov · models-gov.wsdlpublish/unpublish/extract/freezeSyncModel, cloneSyncModelFromStatus et variantes ASync ; port de rappel : …ASyncModelCallBack, sendCallbackError
GovDeductiondeductionService · deduction.wsdldeduceASync ; port de rappel deductionCallBack : deductionASyncCallBackResponse (implémenté par les applications web)
GovAIChatbotai_chatbot · ai-chatbot.wsdlquery, queryOnPictures, invent* (fonctions, rôles, actualités, potentialités, personnes, biens, groupes, territoires, capteurs, IoT, bâtiments, routes, images, tweets, explication de code, problèmes depuis l’actualité, réseaux routier/hydraulique), similarityLevel, RAG (load, export, show, restore, delete, findContextAndPartners) ; port publisher : publishGraph{Structure, Progress, Completed, Error, Warning}Event
GovAICommandAssistantai_command_assistant · ai-command-assistant.wsdlhandle, getToolsInfo
GovCoreSubscriber · LLNotifierproducerService · NotifierClientServiceproducteur d’événements du graphe ; notifier 2L des ajouts/mises à jour de nœuds
Conteneur d’interprétation · port 10106 · base /InterpretationEngine
LowLevelInterpretationManagerInterpretationConfigsCommandService · InterpretationApi.wsdldeploy, undeploy, getInterpretationConfig, getInterpretationConfigs, updateInterpretationConfig, predict
LowLevelInterpretation{Subscriber, CepNotifier, MLNotifier} · HighLevelInterpretation{Subscriber, Notifier}producerService · NotifierClientServiceplomberie WS-Notification des niveaux bas et haut
Gestionnaire de règles CEP (module autonome)cepRulesManager, cepRulesSubscriber, cepRulesNotifiermême contrat que le gestionnaire bas niveau
Perception, simulation et évaluation
detectionEngine · 10108detectionService · detection.wsdldetect
sensorManager · 10107sensor-manager-service · sensor-manager.wsdlcreateSensor, deleteSensor, updateConfigOfSensor, startSensor, stopSensor, stopAllSensor, listen, setLocked, setStoreMediaOnSensor, getSensor, getSensors, findSensorByTopic, findSensorByInternalUrl, findSensorByProtocol, backup/restoreTimeSeriesDB, start/pause/updateContinuousSignalOnJSONConnector
sensorControler · 10107sensor-controler-service · sensor-controler.wsdlcreate/update/destroySensorControler, get/find…, add/update/get/removeDataset…, storeDataset…, resetDataset…, play/pause/stopDataSetOnTopic…, add/remove/getBreakpoints, sendEventToSensor, getXMLDataOfDataset, updateDatasetAndModelConfiguration
GameMasterServer · 10110game_master-service · game_master_api.wsdlget/find/create/update/delete/saveGameScenario(s), get/setCurrentGameScenario, exportGameScenarios, updateSensorControlerBackup, updateMockEndpointBackup
mockEndpointsManager · 10108mock-endpoint-manager-service · mock-endpoints-manager.wsdlcreate/delete/start/stopMockEndpoint, stopAllMockEndpoints, updateConfigOfMockEndpoint, get/findMockEndpoint…, runActuatorOnMockEndpoint, add/delete/playExchangeOnMockEndpoint
TestCampaign · 10109campaignManager · campaignManager.wsdlcreate/update/get/deleteCampaign, findCampaignByName, getCampaignWithoutResources, getAllCampaignsWithoutResources, getCampaignsWithoutResourcesByUser, add/update/removeSolution, getSolutionsFromCampaign, findSolutionsByMetrics, findSolutionByName/ById/BySignature, countSolutions, countSolutionsByMetrics, getFailureSolutions, addConceptsPostAnalyze
Workflow, tâches et supervision
WorkflowEngine_deployerService · 10103DeploymentService · Process.wsdldeploy, undeploy, listProcesses, getProcess, subscribeOnDeploymentService
WorkflowEngine_commandServiceCommandService · CommandService.wsdlpause, resume, stop, delete, cancel, getProcessModels
<processus>__d_<deploymentId> (par processus déployé)ProcessInstance.wsdlrunSync, runASync ; rappel sendASyncResponse
HumanTask · 10102humantaskService · humantask.wsdladdTaskSync, addTaskASync, updateTask, removeTask, getTask, findTask, getTodoList, findTasksByProcessInstanceId, subscribe/unSubscribeTasksByAssignedToResource ; rappel addTaskASyncCallBack
ProcessMonitoring · 10104ProcessMonitoring · ProcessMonitoring.wsdlget/add/update/deleteProcessInstance(s), get/add/update/deleteExchange(s), getProcessInformation, subscribeOnExchangesOfInstance, subscribeOnExchangesOfAllInstances, subscribeOnProcessInstanceEventService
Données et intégration
StorageService · 10100storageService · gind-storage.wsdlput, get, query, update, remove, removeAll (topics de documents notifiés par la variante event storage)
timeseries · 19000timeseriesService · timeseries.wsdlcreateTimeseriesCollection, write, update, query, delete, deleteAll, getTimeseriesCollectionNames, dump/restoreTimeseriesCollection
BrokerRegister · BrokerSubscriber · BrokerNotifier · 10105event-broker-service · event-broker.wsdlregister, unregister, getAllTopics (+ contrats producteur et notifier)
h2_gis · 10111 · osm_gis · 10112store_gis · find_gis · store-gis.wsdl, find-gis.wsdlstore_gis : query, loadGeoJSONFile, deployGeoJSONFile, undeployGeoJSONFile, getGeoJSONFilesStored — find_gis : findConceptsFromLatLng, findConceptsInsidePolygon, findConceptsInsideBBox — rappel client : receiveConceptContainedInPolygon, receiveConceptContainedInBBox
websocketCommandService · 12000 (côté application web)websocketCommand.wsdlgetResult — résultat SOAP relayé vers un topic WebSocket
echo · concat · 1113 (mocks de test)echo.wsdl · concat.wsdlecho · concat — partenaires jouets du processus helloworld
05 · Drivers

Ports métier par langage

Les drivers appellent les ressources REST ci-dessus avec des identifiants HTTP Basic et écoutent les topics WebSocket ; les modèles sont les types générés de chaque langage.

Langage · emplacementPorts / clientsOpérations
Java · java/packaging/gind-java-driverIUsers, IMetaModels, IModels, IProcess, ISolution, ITasks, IEvents, IUsecase + écouteurs WSock*login, logout, getUsers, register, findUserByName, findAssociatedPerson · getPredefinedUsecaseDefinitions, loadUsecase, isAlreadyLoadedUsecase, getUsecaseContext · push, pushpull, reload, query, getNodesByTypesAndOrProperties, get/removeNodeById, get/removeEdgeById · subscribeExchangesByInstance · deduceSolutionASync(FromSimpleSatisfactionStrategy), deploy/undeploy/supervise/select/runASync/cancelSolution · updateTask, subscribeToAddTasksByAssignedToResource · findSensorFromNode, findSensorsByType, start/stopSensor(s), sendEventOnSensor · findSensorsFixedOnto
Python · python/backend/gind-python-driverRestDriver ; UsersDriverClient, MetaModelsDriverClient, ModelsDriverClient, ProcessDriverClient, TasksDriverClient, AppUserTaskDriverClient ; ports applicatifs AppUser, AppTask, AppTaskListenerlogin, logout, get_users · get_usecase_context, get_project_by_name_in_collaboration, get_effective_domain, set_project_mode · push, push_pull, reload, query, get_nodes_by_types_and_or_properties · deduce, deploy, deploy_process, run_async · get_todolist, update_task · refresh_users, find_user_by_id, fonctions WebSocket de liste de tâches
C# · csharp/backend/gind-csharp-driverRestDriver ; IUsers, IMetaModels, IModels, IProcess, ITasks, IEvents, IDetect, IAppUserTask + wsock_functionslogin, logout, getUsers · définitions et contexte de cas d’usage · push, pushpull, reload, query, nœud/arête par id · deduce, deploy, deployProcess, undeploy, runSync, runASync, supervise, pause, resume, delete, cancel, exchangesByInstance, subscribeExchangesByInstance · getTodoList, getTasks, updateTask · findSensorsByType, createSensor, start/stopSensor(s), sendEventOnJSONConnector, isSimulation · detect (stratégie F-score)
Dart · dart/frontend/gind_r_io4u/lib/driver/rest/adaptersclients Users/System, MetaModels, Models, Solution, Tasks, Events, MockEndpoints, Chatbots, Files, Usecase + écouteurs web_socket/apigetUser(s), updateUser · getProjectByNameInCollaboration, getEffectiveDomain · push, pushpull, query, reload, delete, nœud/arête par id, patchEdge(s) · deduceSolution, deploySolution, runASyncSolution, superviseSolution, undeploySolution, pause, resume, cancel, delete, exchangesByInstance · getTodoList, subscribeToTodoList, updateTask · capteurs start/stop/send/signal continu · mock endpoints et échanges · inventActualities, inventPictures · upload(s) · getGeoLocInstances

Exemples

Déduire un processus depuis les objectifs d’un cas d’usage chargéPython 3
# python/backend/gind-python-driver — context keys mirror unified_config.properties
from fr_emac_gind_rio.driver.rest.RestDriver import RestDriver
from fr_emac_gind_rio.driver.rest.ports.IProcess import SatisfactionStrategy
from fr_emac_gind_rio.utils.system_user import SystemUser
from lxml.etree import QName

context = {"host": "127.0.0.1", "r-ioda...port": "9102", "r-iose...port": "9110",
           "r-ioxo...port": "9126", "websocket-command-service-port": "12000"}
driver = RestDriver(context, SystemUser("login", "password"))
driver.meta_model_driver.get_usecase_context(knowledge_space_name="IMT Albi Crisis",
                                             collaboration_name="R-IO Suite")

objectives = driver.model_driver.get_nodes_by_types_and_or_properties(
    types=[QName("http://fr.emac.gind/collaborative-model", "Objective")])
reports = driver.process_driver.deduce(SatisfactionStrategy(objectives_order=objectives))

user = driver.app_user_task_driver.refresh_users()[0]
user.login()                       # opens the WebSocket to-do channel
todo = user.refresh_todo_list()

Signatures : RestDriver(context: Dict, user: SystemUser), MetaModelsDriverClient.get_usecase_context(knowledge_space_name, collaboration_name), ModelsDriverClient.get_nodes_by_types_and_or_properties(types, properties=None, node_status=None), ProcessDriverClient.deduce(satisfaction_strategy), AppUser.login(subscribe_on_task=True), AppUser.refresh_todo_list(). Le driver Python adresse r-ioda, r-iose et l’ancien nom r-ioxo (port 9126) ; l’exemple livré dans gind-python-driver-examples-test utilise encore un ancien constructeur et ne doit pas être copié.

Même scénario, puis déploiement du premier processus déduitC#
// csharp/backend/gind-csharp-driver — one RestDriver for r-ioda, r-iose, r-ioxo and r-iota
using gind_csharp_driver_rest; using gind_csharp_utils; using fr_emac_gind_model; using System.Xml;

RestDriver driver = RestDriver.createRestDriver("127.0.0.1", 9102, 9110, 9126, 9108,
    new SystemUser("login", "password"));
var ucDef = await driver.metaModelDriver.findPredefinedUsecaseDefinitionByName("IMT Albi Crisis");
UsecaseContext uc = await driver.metaModelDriver.loadUsecase(ucDef, "R-IO Suite");
uc.startWSockUsecaseChannel();     // model events through /ws/pubsub

node[] objectives = await driver.modelDriver.getNodesByTypesAndOrProperties(
    new[] { new XmlQualifiedName("Objective", "http://fr.emac.gind/collaborative-model") });
deductionReport[] reports = await driver.processDriver.deduce(new SatisfactionStrategy(objectives));
genericModel processModel = ((deductionResult)reports[0].Item).genericModel;
node processNode = GenericModelUtil.getNodesByType(
    new XmlQualifiedName("Process", "http://fr.emac.gind/collaborative-model"), processModel)[0];
DeployResult deployed = await driver.processDriver.deploy(processNode);

Signatures : RestDriver.createRestDriver(host, riodaPort, riosePort, rioxoPort, riotaPort, user) (ou createRestDriverFromConfigFile(path, user)), MetaModelsDriverClient.findPredefinedUsecaseDefinitionByName(name), loadUsecase(definition, collaborationName), ModelsDriverClient.getNodesByTypesAndOrProperties(types, properties=null, status=ACTIVE), ProcessDriverClient.deduce(strategy), deploy(processNode). Les identifiants voyagent en jeton HTTP Basic construit par SystemUser ; ne les codez jamais en dur dans du code partagé.

06 · Exemple

Une session REST minimale

Sur un standalone local, via le serveur r-ioga (port 9100). Remplacez les identifiants par un compte créé dans r-ioga.

curlHTTP Basic · JSON
# vivacité (sans authentification)
curl http://localhost:9100/r-ioga/generic-application/default/ping

# lister les collaborations de l’utilisateur authentifié
curl -u login:motdepasse http://localhost:9100/r-ioga/generic-application/system/collaboration/collaborations

# choisir une collaboration et un espace de connaissance (cadre tous les appels suivants)
curl -u login:motdepasse http://localhost:9100/r-ioga/generic-application/system/collaboration/knowledge/select/{collaborationId}/{knowledgeSpaceId}

# chercher des nœuds par type dans l’espace de connaissance courant
curl -u login:motdepasse -H "Content-Type: application/json" \
     -d '{"types":["{http://fr.emac.gind/collaborative-model}Person"]}' \
     http://localhost:9100/r-ioga/generic-application/core/nodes/findNodesByTypesAndOrProperties

# événements de modèle en direct (topic = hash(collaboration)/hash(espace)/models/)
websocat ws://localhost:9100/ws/pubsub/{hashCollab}/{hashKs}/models/