.. _tut.rest_api: ******** REST API ******** EPyT-Flow comes with a REST API for supporting the integration into other projects such as web applications. The REST server is based on `Falcon `_ and is implemented in the class :class:`~epyt_flow.rest_api.server.RestApiService` -- it runs on port *8080* as a default. It provides the following methods: +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | Method | URL | Implementation | Description | +===========+=======================================================+====================================================================================================+=====================================================================================================+ | POST | /scenario/new | :class:`~epyt_flow.rest_api.scenario.handlers.ScenarioNewHandler` | Creates a new scenario (based on a given .inp and .msx file, or on a given scenario configuration). | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | DELETE | /scenario/{scenario_id} | :class:`~epyt_flow.rest_api.scenario.handlers.ScenarioRemoveHandler` | Deletes a scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scenario/{scenario_id}/export | :class:`~epyt_flow.rest_api.scenario.handlers.ScenarioExportHandler` | Exports a given scenario to an .inp and (optionally) .msx file. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scenario/{scenario_id}/topology | :class:`~epyt_flow.rest_api.scenario.handlers.ScenarioTopologyHandler` | Gets the topology of a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scenario/{scenario_id}/scenario_config | :class:`~epyt_flow.rest_api.scenario.handlers.ScenarioConfigHandler` | Gets the entire configuration/specification of a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/general_params | :class:`~epyt_flow.rest_api.scenario.handlers.ScenarioGeneralParamsHandler` | Gets the general parameters (e.g. simulation duration, etc.) of a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/quality_params | :class:`~epyt_flow.rest_api.scenario.handlers.ScenarioQualityParamsHandler` | Gets or sets the (EPANET) quality parameters of a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/sensor_config | :class:`~epyt_flow.rest_api.scenario.handlers.ScenarioSensorConfigHandler` | Gets or sets the sensor configuration of a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/uncertainty/model | :class:`~epyt_flow.rest_api.scenario.uncertainty_handlers.ScenarioModelUncertaintyHandler` | Gets or sets the model uncertainties of a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/uncertainty/sensors | :class:`~epyt_flow.rest_api.scenario.uncertainty_handlers.ScenarioSensorUncertaintyHandler` | Gets or sets the sensor uncertainties (i.e. noise) of a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/controls/simple | :class:`~epyt_flow.rest_api.scenario.control_handlers.ScenarioSimpleControlHandler` | Gets or adds simple control modules to a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/controls/complex | :class:`~epyt_flow.rest_api.scenario.control_handlers.ScenarioComplexControlHandler` | Gets or adds complex control modules to a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/events/quality | :class:`~epyt_flow.rest_api.scenario.event_handlers.ScenarioQualityEventHandler` | Gets or adds quality events (e.g. injection events) to a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/events/leakages | :class:`~epyt_flow.rest_api.scenario.event_handlers.ScenarioLeakageHandler` | Gets or adds a leakage to a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/events/sensor_faults | :class:`~epyt_flow.rest_api.scenario.event_handlers.ScenarioSensorFaultHandler` | Gets or adds a sensor fault to a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/events/sensor_reading_attacks | :class:`~epyt_flow.rest_api.scenario.event_handlers.ScenarioSensorReadingAttackHandler` | Gets or adds a sensor reading attack to a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | POST | /scenario/{scenario_id}/node/{node_id}/demand_pattern | :class:`~epyt_flow.rest_api.scenario.handlers.ScenarioNodeDemandPatternHandler` | Set the demand pattern of a specific node in a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scenario/{scenario_id}/simulation | :class:`~epyt_flow.rest_api.scenario.simulation_handlers.ScenarioSimulationHandler` | Runs the simulation of a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | POST | /scenario/{scenario_id}/simulation/basic_quality | :class:`~epyt_flow.rest_api.scenario.simulation_handlers.ScenarioBasicQualitySimulationHandler` | Runs the basic quality simulation of a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | POST | /scenario/{scenario_id}/simulation/advanced_quality | :class:`~epyt_flow.rest_api.scenario.simulation_handlers.ScenarioAdvancedQualitySimulationHandler` | Runs the advanced quality simulation of a given scenario. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | DELETE | /scada_data/{data_id} | :class:`~epyt_flow.rest_api.scada_data.handlers.ScadaDataRemoveHandler` | Deletes a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scada_data/{data_id}/sensor_config | :class:`~epyt_flow.rest_api.scada_data.handlers.ScadaDataSensorConfigHandler` | Gets or sets the sensor configuration of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET, POST | /scada_data/{data_id}/sensor_faults | :class:`~epyt_flow.rest_api.scada_data.handlers.ScadaDataSensorFaultsHandler` | Gets or sets the sensor faults of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/nodes/pressures | :class:`~epyt_flow.rest_api.scada_data.data_handlers.ScadaDataPressuresHandler` | Gets all pressure sensor readings of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/nodes/demands | :class:`~epyt_flow.rest_api.scada_data.data_handlers.ScadaDataDemandsHandler` | Gets all demand sensor readings of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/nodes/bulk_species | :class:`~epyt_flow.rest_api.scada_data.data_handlers.ScadaDataNodeBulkSpeciesHandler` | Gets all bulk species node sensor readings of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/nodes/quality | :class:`~epyt_flow.rest_api.scada_data.data_handlers.ScadaDataNodesQualityHandler` | Gets all node quality sensor readings of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/links/flows | :class:`~epyt_flow.rest_api.scada_data.data_handlers.ScadaDataFlowsHandler` | Gets all flow sensor readings of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/links/quality | :class:`~epyt_flow.rest_api.scada_data.data_handlers.ScadaDataLinksQualityHandler` | Gets all link quality sensor readings of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/links/bulk_species | :class:`~epyt_flow.rest_api.scada_data.data_handlers.ScadaDataLinkBulkSpeciesHandler` | Gets all sbulk species link ensor readings of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/links/surface_species | :class:`~epyt_flow.rest_api.scada_data.data_handlers.ScadaDataSurfaceSpeciesHandler` | Gets all demand sensor readings of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/pump_states | :class:`~epyt_flow.rest_api.scada_data.data_handlers.ScadaDataPumpStatesHandler` | Gets all demand sensor readings of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/valve_states | :class:`~epyt_flow.rest_api.scada_data.data_handlers.ScadaDataValveStatesHandler` | Gets all demand sensor readings of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/tank_volumes | :class:`~epyt_flow.rest_api.scada_data.data_handlers.ScadaDataTankVolumesHandler` | Gets all demand sensor readings of a given SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/export/xlsx | :class:`~epyt_flow.rest_api.scada_data.export_handlers.ScadaDataXlsxExportHandler` | Exports a given SCADA data instance to a .xlsx file. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/export/matlab | :class:`~epyt_flow.rest_api.scada_data.export_handlers.ScadaDataMatlabExportHandler` | Exports a given SCADA data instance to a Matlab data file. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/export/numpy | :class:`~epyt_flow.rest_api.scada_data.export_handlers.ScadaDataNumpyExportHandler` | Exports a given SCADA data instance to a Numpy data file. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | GET | /scada_data/{data_id}/export | :class:`~epyt_flow.rest_api.scada_data.export_handlers.ScadaDataExportHandler` | Exports a given SCADA data instance to an .epytflow_scada_data data file. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+ | POST | /scada_data/{data_id}/convert_units | :class:`~epyt_flow.rest_api.scada_data.handlers.ScadaDataConvertUnitsHandler` | Converts the units of a given SCADA data instance and returns a new SCADA data instance. | +-----------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+