Hop Server Web Services Overview
Hop Server has a rich set of web services that can be used to query and manage the server’s status, or to manage pipeline and workflow execution details.
| when specified, the id for a workflow or pipeline represents one execution of a workflow or pipeline on the server. | 
addExport
- name
-  addExport 
- description
-  Upload a resources export file. Add a zipped pipeline or workflow to the body payload as a binary file. 
- endPoint
-  GET hop/addExport
- parameters
-  -  type: pipelineorworkflow
-  load: - 
 
-  
- example request
-  http://localhost:8081/hop/addExport/?type=workflowwith zipped workflow as payload
- result
-  A zip file with the export is created on the server’s file system. 
<?xml version="1.0" encoding="UTF-8"?>
<webresult>
    <result>OK</result>
    <message>file:///tmp/export_70eb8ef1-9721-4cf5-afa3-940cd0f771d9.zip</message>
    <id/>
</webresult>addPipeline
- name
-  addPipeline 
- description
-  Add a pipeline for execution 
- endPoint
-  GET hop/addPipeline-  Content-Type: text/xml;charset=UTF-8 
 
-  
- parameters
-  -  xml Request body should contain xml containing pipeline_configuration (pipeline and pipeline_execution_configuration wrapped in pipeline_configuration tag). 
 
-  
- example request
-  http://localhost:8081/hop/addPipeline/xml=Ywith XML payload
- result
-  - 
addWorkflow
- name
-  addWorkflow 
- description
-  Add a workflow for execution 
- endPoint
-  GET hop/addWorkflow-  Content-Type: text/xml;charset=UTF-8 
 
-  
- parameters
-  -  xml Request body should contain xml containing workflow_configuration (pipeline and workflow_execution_configuration wrapped in pipeline_configuration tag). 
 
-  
- example request
-  http://localhost:8081/hop/addWorkflow/xml=Ywith XML payload
- result
-  - 
getPipelineImage
- name
-  getPipelineImage 
- description
-  Generate a SVG image of a pipeline 
- endPoint
-  GET hop/pipelineImage
- parameters
-  -  name: name of the pipeline to generate the image for 
-  id: id of the pipeline to generate the image for 
 
-  
- example request
-  GET http://localhost:8081/hop/pipelineImage/?name=remote-pipeline&id=c1451bfb-b867-4c76-b123-c29d2b05da17
- result
-  an SVG image of the pipeline graph 
getPipelineStatus
- name
-  getPipelineStatus 
- description
-  Get the status of a pipeline 
- endPoint
-  GET hop/pipelineStatus
- parameters
-  -  name: name of the pipeline to get the status for 
-  id: id of the pipeline to get the status for 
-  xml (optional): return the information as xml (default HTML) use &xml=Y 
-  json (optional): return the information as json (default HTML) use &json=Y 
 
-  
- example request
-  GET http://localhost:8081/hop/pipelineStatus/?name=<NAME>>&id=<ID>
- result
-  an HTML response with the execution status, transform details and canvas preview for this pipeline 
Status
- name
-  status 
- description
-  Get the status of the server 
- parameters
-  none 
- example request
-  GET http://localhost:8081/hop/status/
- result
-  an HTML page with an overview of the pipelines and workflows on the server, their execution details and the server’s configuration details. 
getWorkflowImage
- name
-  getWorkflowImage 
- description
-  Generate an SVG image of a workflow 
- endPoint
-  GET hop/workflowImage
- parameters
-  -  name: name of the workflow to generate the image for 
-  id: id of the workflow to generate the image for 
 
-  
- example request
-  GET http://localhost:8081/hop/workflowImage/?name=<NAME>>&id=<ID>
- result
-  an SVG image of the workflow graph 
getWorkflowStatus
- name
-  getWorkflowStatus 
- description
-  Get the status of a workflow 
- endPoint
-  GET hop/workflowStatus
- parameters
-  -  name: name of the workflow to get the status for 
-  id: id of the workflow to get the status for 
-  xml (optional): return the information as xml (default HTML) use &xml=Y 
-  json (optional): return the information as json (default HTML) use &json=Y 
 
-  
- example request
-  GET http://localhost:8081/hop/workflowStatus/?name=<NAME>&id=<ID>
- result
-  an HTML response with the execution status, action details and canvas preview for this workflow 
pausePipeline
- name
-  pausePipeline 
- description
-  Pause or continue a pipeline 
- endPoint
-  GET /hop/pausePipeline
- parameters
-  -  name: name of the pipeline to pause or restart 
-  id: id of the pipeline to pause or restart 
 
-  
- example request
-  GET http://localhost:8081/hop/pausePipeline/?name=<NAME>&id=<ID>
- result
-  HTML page with the request status, e.g. 
<HTML>
<HEAD>
	<TITLE>Pause pipeline</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/pipelineStatus?name=<NAME>&id=<ID>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY>
	<H1>Pipeline [tmp] : pause requested.</H1>
	<a href="/hop/pipelineStatus?name=<NAME>&id=<ID>">Back to the pipeline status page</a>
	<p>
		<p>
</BODY>
</HTML>Prepare Execution
- name
-  prepareExec 
- description
-  Prepare the execution of a pipeline 
- endPoint
-  GET /hop/prepareExec
- parameters
-  -  xml: use xml, default Y 
-  name: the name of the pipeline to prepare execution for 
-  id: the id of the pipeline to prepare execution for 
 
-  
- example request
-  GET http://localhost:8081/hop/prepareExec/?xml=Y&name=<NAME>&id=<ID>
- result
-  Example result: 
<?xml version="1.0" encoding="UTF-8"?>
<webresult>
    <result>OK</result>
    <message/>
    <id/>
</webresult>Register Pipeline
- name
-  registerPipeline 
- description
-  Register a pipeline for execution 
- endPoint
-  GET hop/registerPipeline-  Content-Type: text/xml;charset=UTF-8 
 
-  
- parameters
-  -  xml Request body should contain xml containing pipeline_configuration (pipeline and pipeline_execution_configuration wrapped in pipeline_configuration tag). 
 
-  
- example request
-  http://localhost:8081/hop/registerPipeline/xml=Y
with XML payload (example):
<pipeline_configuration>
<pipeline>
  <info>
    <name>generate_rows</name>
    <name_sync_with_filename>Y</name_sync_with_filename>
    <description/>
    <extended_description/>
    <pipeline_version/>
    <pipeline_type>Normal</pipeline_type>
    <parameters>
    </parameters>
    <capture_transform_performance>N</capture_transform_performance>
    <transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
    <transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
    <created_user>-</created_user>
    <created_date>2022/02/03 13:47:49.645</created_date>
    <modified_user>-</modified_user>
    <modified_date>2022/02/03 13:47:49.645</modified_date>
    <key_for_session_key>H4sIAAAAAAAA/wMAAAAAAAAAAAA=</key_for_session_key>
    <is_key_private>N</is_key_private>
  </info>
  <notepads>
  </notepads>
  <order>
    <hop>
      <from>Generate rows</from>
      <to>Delay row</to>
      <enabled>Y</enabled>
    </hop>
    <hop>
      <from>Delay row</from>
      <to>result</to>
      <enabled>Y</enabled>
    </hop>
  </order>
  <transform>
    <name>Delay row</name>
    <type>Delay</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <scaletime>seconds</scaletime>
    <timeout>1</timeout>
    <attributes/>
    <GUI>
      <xloc>416</xloc>
      <yloc>96</yloc>
    </GUI>
  </transform>
  <transform>
    <name>Generate rows</name>
    <type>RowGenerator</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <fields>
      <field>
        <length>-1</length>
        <name>value</name>
        <precision>-1</precision>
        <set_empty_string>N</set_empty_string>
        <type>String</type>
        <nullif>test</nullif>
      </field>
    </fields>
    <interval_in_ms>5000</interval_in_ms>
    <last_time_field>FiveSecondsAgo</last_time_field>
    <never_ending>N</never_ending>
    <limit>10000</limit>
    <row_time_field>now</row_time_field>
    <attributes/>
    <GUI>
      <xloc>160</xloc>
      <yloc>96</yloc>
    </GUI>
  </transform>
  <transform>
    <name>result</name>
    <type>Dummy</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <attributes/>
    <GUI>
      <xloc>720</xloc>
      <yloc>96</yloc>
    </GUI>
  </transform>
  <transform_error_handling>
  </transform_error_handling>
  <attributes/>
</pipeline>
  <pipeline_execution_configuration>
    <pass_export>N</pass_export>
    <parameters>
    </parameters>
    <variables>
    <variable><name>HOP_AUDIT_FOLDER</name><value>/Users/hans/config/audit</value></variable>
    <variable><name>HOP_AUTO_CREATE_CONFIG</name><value>Y</value></variable>
    <variable><name>HOP_CONFIG_FOLDER</name><value>/Users/hans/config</value></variable>
    <variable><name>HOP_DATASETS_FOLDER</name><value>/Users/hans/test/datasets</value></variable>
    <variable><name>HOP_ENVIRONMENT_NAME</name><value>test1</value></variable>
    <variable><name>HOP_METADATA_FOLDER</name><value>/Users/hans/test/metadata</value></variable>
    <variable><name>HOP_PIPELINE_PAN_JVM_EXIT_CODE</name><value/></variable>
    <variable><name>HOP_PROJECTS</name><value>/Users/hans/tmp/</value></variable>
    <variable><name>HOP_PROJECT_NAME</name><value>test</value></variable>
    <variable><name>HOP_UNIT_TESTS_FOLDER</name><value>/Users/hans/test</value></variable>
    <variable><name>NEO4J_CONNECTION</name><value>neo4j</value></variable>
    <variable><name>PROJECT_HOME</name><value>/Users/hans/test</value></variable>
    <variable><name>TEST</name><value>TEST</value></variable>
    <variable><name>ftp.nonProxyHosts</name><value>local|*.local|169.254/16|*.169.254/16</value></variable>
    <variable><name>http.nonProxyHosts</name><value>local|*.local|169.254/16|*.169.254/16</value></variable>
    <variable><name>jdk.debug</name><value>release</value></variable>
    <variable><name>native.encoding</name><value>UTF-8</value></variable>
    <variable><name>p1</name><value>a</value></variable>
    <variable><name>socksNonProxyHosts</name><value>local|*.local|169.254/16|*.169.254/16</value></variable>
    </variables>
    <log_level>Basic</log_level>
    <log_file>N</log_file>
    <log_filename/>
    <log_file_append>N</log_file_append>
    <create_parent_folder>N</create_parent_folder>
    <clear_log>Y</clear_log>
    <show_subcomponents>Y</show_subcomponents>
    <run_configuration>local</run_configuration>
</pipeline_execution_configuration>
<metastore_json>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
ljWkYK7zO7toJAlk3Xw8/QVlC+SCFRAAAA==
</metastore_json>
</pipeline_configuration>The metastore_json is base64 encoded GZip content
- result
-  - 
Register Workflow
- name
-  registerWorkflow 
- description
-  Register a workflow on the server 
- endPoint
-  GET /hop/registerWorkflow-  Content-Type: text/xml;charset=UTF-8 
 
-  
- parameters
-  -  xml: 
 
-  
- example request
-  - 
- result
-  - 
Remove Pipeline
- name
-  removePipeline 
- description
-  Remove a pipeline from the server 
- endPoint
-  GET /hop/removePipeline
- parameters
-  -  name: the name of the pipeline to remove 
-  id: the id of the pipeline to remove 
 
-  
- example request
-  GET http://localhost:8081/hop/removePipeline/?name=<NAME>&id=<ID>
- result
-  Example result: 
<HTML>
<HEAD>
	<TITLE>The pipeline was removed</TITLE>
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY>
	<H3>The pipeline with name [<NAME>] and hopServer object id <ID> was removed from Hop
		Server.</H3>
	<a href="/hop/status">Back to the status page</a><br>
	<p>
</BODY>Remove Workflow
- name
-  removeWorkflow 
- description
-  Remove a workflow from the server 
- endPoint
-  GET /hop/removeWorkflow
- parameters
-  -  name: the name of the workflow to remove 
-  id: the id of the workflow to remove 
 
-  
- example request
-  GET http://localhost:8081/hop/removeWorkflow/?name=<NAME>&id=<ID>
- result
-  Example result: 
<HTML>
<HEAD>
	<TITLE>The workflow was removed</TITLE>
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY>
	<H3>The workflow with name [<NAME>] and hopServer object id <ID> was removed from Hop
		Server.</H3>
	<a href="/hop/status">Back to the status page</a><br>
	<p>
</BODY>Sniff Transform
- name
-  sniffTransform 
- description
-  Sniff test a pipeline transform 
- endPoint
-  GET /hop/sniffTransform
- parameters
-  -  xml: use XML (default: Y) 
-  pipeline: name of the pipeline to sniff 
-  id: id of the pipeline to sniff 
-  transform: name of the transform to sniff 
-  type: (input/output) sniff input or output 
-  lines: number of lines to wait for 
-  copynr: when using multiple copies you can specify the copynr 
 
-  
- following parameters are required
-  -  xml 
-  id or pipeline 
-  transform 
 
-  
- example request
-  GET http://localhost:8081/hop/sniffTransform/?xml=Y&pipeline=<NAME>&id=<ID>&transform=<TRANSFORMNAME>&type=output&lines=100
- result
-  Example result (empty): 
<row-buffer>
<row-meta/>
</row-buffer>Start Pipeline Execution
- name
-  startExec 
- description
-  Start the execution of a pipeline 
- endPoint
-  GET /hop/startExec
- parameters
-  -  name: the name of the pipeline to start 
 
-  
- example request
-  GET http://localhost:8081/hop/startExec?name=<NAME>
- result
-  Example result: 
<HTML>
<HEAD>
	<TITLE>Start of pipeline</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/pipelineStatus?name=<NAME>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY>
	<H1>Pipeline [<NAME>] was started.</H1>
	<a href="/hop/pipelineStatus?name=<NAME>&id=8bea27db-de97-4bd0-a210-d9bba3aacac2">Back to the status page</a>
	<p>
		<p>
</BODY>
</HTML>Start Pipeline
- name
-  startPipeline 
- description
-  Prepare and start the execution of a pipeline 
- endPoint
-  GET /hop/startPipeline
- parameters
-  -  name: the name of the pipeline to start 
 
-  
- example request
-  GET http://localhost:8081/hop/startPipeline?name=<NAME>
- result
-  Example result: 
<HTML>
<HEAD>
	<TITLE>Start of pipeline</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/pipelineStatus?name=<NAME>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY>
	<H1>Pipeline [<NAME>] was started.</H1>
	<a href="/hop/pipelineStatus?name=<NAME>&id=8bea27db-de97-4bd0-a210-d9bba3aacac2">Back to the status page</a>
	<p>
		<p>
</BODY>
</HTML>Start Workflow
- name
-  startWorkflow 
- description
-  Prepare and start the execution of a workflow 
- endPoint
-  GET /hop/startPipeline
- parameters
-  -  name: the name of the workflow to start 
 
-  
- example request
-  GET http://localhost:8081/hop/startWorkflow?name=<NAME>
- result
-  Example result: 
<HTML>
<HEAD>
	<TITLE>Start of workflow</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/startWorkflow?name=<NAME>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY>
	<H1>Workflow [<NAME>] was started.</H1>
	<a href="/hop/workflowStatus?name=<NAME>&id=8bea27db-de97-4bd0-a210-d9bba3aacac2">Back to the status page</a>
	<p>
		<p>
</BODY>
</HTML>Stop Pipeline
- name
-  stopPipeline 
- description
-  Stop a pipeline 
- endPoint
-  GET /hop/stopPipeline
- parameters
-  -  name: the name of the pipeline to stop 
-  id: the id of the pipeline to stop 
 
-  
- example request
-  GET http://localhost:8081/hop/stopPipeline?name=<NAME>&id=<ID>
- result
-  Example Result: 
<HTML>
<HEAD>
	<TITLE>Stop pipeline</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/pipelineStatus?name=<NAME>>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY>
	<H1>Pipeline [<NAME>] stop requested.</H1>
	<a href="/hop/pipelineStatus?name=<NAME>&id=<ID>">Back to the pipeline status page</a>
	<p>
		<p>
</BODY>
</HTML>Stop Workflow
- name
-  stopWorkflow 
- description
-  Stop a workflow 
- endPoint
-  GET /hop/stopWorkflow
- parameters
-  -  name: the name of the workflow to stop 
-  id: the id of the workflow to stop 
 
-  
- example request
-  GET http://localhost:8081/hop/stopWorkflow?name=<NAME>&id=<ID>
- result
-  Example Result: 
<HTML>
<HEAD>
	<TITLE>Stop workflow</TITLE>
	<META http-equiv="Refresh" content="2;url=/hop/workflowStatus?name=<NAME>>">
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY>
	<H1>Workflow [<NAME>] stop requested.</H1>
	<a href="/hop/workflowStatus?name=<NAME>&id=<ID>">Back to the pipeline status page</a>
	<p>
		<p>
</BODY>
</HTML>