Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 13 Next »

SINCE VERSION 1.0

What is the Pipeline HTTP API?

The Pipeline HTTP API allows you to manage and execute pipelines via a HTTP requests, similar to a REST call. Here is a list of of available endpoints:

Path

Method

Description

/api/v3/pipeline

POST

Execute adhoc
pipeline YAML or JSON given in the body. The pipeline is not stored.

/api/v3/pipeline:{path}

PUT

Store
the pipeline YAML given in the body in the property store at {path}.

/api/v3/pipeline:{path}

POST

Load and execute
the persisted pipeline at {path} from the property store:

  • The request body will become the body of the pipeline.

  • Request params will be set in vars scope of the pipeline.

  • Request and response can be accessed via ${request} and ${response} object in the pipeline.

/api/v3/pipeline:{path}

GET

Return
the pipeline persisted at {path} from the property store.

/api/v3/pipeline:{path}

DELETE

Delete
the persisted pipeline at {path} from the property store.

For more details see the API Documentation.

Execute adhoc pipeline

In order to execute an adhoc pipeline (= execute a pipeline without persisting it), you can send a HTTP POST request to this endpoint url with the pipeline script as YAML or JSON in the body:

https://hub-NS.pipeforce.net/api/v3/pipeline

The most common usage scenario is to send a pipeline YAML script to the server and execute it there without storing it.

Because of security, adhoc pipelines are limited in the features what they can do. If you need full functionality, consider to execute a persisted pipeline instead.

Example

Let's for example assume an adhoc pipeline like this to be executed at server side:

pipeline:
  - body.set:
      value: "Today is: ${@date.now()}"

This pipeline can be executed at server side by sending it in the body of a HTTP POST request with a header of Content-Type: application/yaml, like this HTTP message log shows:

POST /api/v3/pipeline HTTP/1.1
Host: https://hub-NS.pipeforce.net
Content-Type: application/yaml
Authorization: Basic bXl1c2VybmFtZTptcGFzc3dvcmQ=
Content-Length: 63

pipeline:
  - body.set:
      value: "Today is: ${@date.now()}"

As a cURL command, this could be executed in your terminal like this:

curl --location 'https://hub-NS.pipeforce.net/api/v3/pipeline' \
--user 'myusername:mypassword' \
--header 'Content-Type: application/yaml' \
--data-raw 'pipeline:
  - body.set:
      value: "Today is: ${@date.now()}"'

And here you can see a Postman snippet as well (replace {{hubBaseUrl}} by your own hub url):

The response result of all of these requests would be something like this:

Today is: 31.07.2023, 15:54:16

You can also send and execute a pipeline in JSON format this way. In this case you have to set the Content-Type header to application/json instead.

HTTP Methods

In order to execute a pipeline script on the backend, you need to send a HTTP POST request to the endpoint /api/v3/pipeline by using one of these HTTP options:

HTTP Method

Content-Type

Request Body

Message Body

Execution

is set to

is set to

is set to

then will become

is

POST

application/json

A JSON pipeline document.

null or the value set by the body section of the pipeline.

A pipeline set as JSON from the request body.

POST

application/yaml

A YAML pipeline document.

null or the value set by the body section of the pipeline.

A pipeline set as YAML from the request body. See examples with no body and embedded body.

POST

application/x-www-form-urlencoded

The pipeline as URL encoded request query string whereas the key of each parameter is the command name and the value defines the parameters to the command. Key and value must be separated by a colon :. Multiple command parameters are separated by semicolon ;. Example (before url encoding): log=message:'Hello World!';level:INFO

null

A pipeline set as URL encoded query string from the request body. See example with url encoded query.

POST

None

A YAML pipeline document (same as with application/yaml).

null or the value set by the body section of the pipeline.

A pipeline set as YAML from the request body. Any other format in the body will throw an 400 bad request error.

POST

multipart/form-data

One part with name="pipeline" with a YAML pipeline and one or more parts with name="file" in the content disposition header. See how HTTP multipart works.

Content Collection referencing all fileparts.

A pipeline set as YAML from the pipeline part and with a content collection in the body created from all file parts of the request body. See Example.

Using the HTTP method GET with the /pipeline endpoint is not possible and will cause an error.

Example 5: No body

In case you would like to execute a pipeline YAML script without a message body, you can run this:

curl -u 'username:password' \
  -X POST "https://hub-try.pipeforce.org/api/v3/pipeline" \
  -H "Content-Type: application/yaml" \
  --data-binary @- << EOF
pipeline:
 - drive.read:
     path: /my.pdf
 - pdf.stamp:
     text: "Hello World!"
 - drive.save:
     path: /my-stamped.pdf
EOF

Example 6: With body embedded

In case you would like to execute a pipeline YAML script with message body, which is embedded inside the YAML, you can run this:

curl -u 'username:password' \
  -X POST "https://hub-try.pipeforce.org/api/v3/pipeline" \
  -H "Content-Type: application/yaml" \
  --data-binary @- << EOF
pipeline:
  - log:
      message: "BODY: ${body.text}"

body: {"text": "Hello World!"}
EOF

Example 7: With url encoded pipeline

In this example, a simple adhoc pipeline is called using an url encoded query string.

Suppose you have a pipeline that looks like this:

pipeline:
  - datetime:
      format: dd.MM.YY
  - set.body:
      value: "Today is: ${body}"

You can rewrite it to a query string like this (not url encoded):

datetime=format:dd.MM.YY&set.body=value:"Today is: ${body}"
  • The query parameter key becomes the command name (for example datetime).

  • The query parameter value specifies the parameters to the command in the format of <key>:<value> pairs. The value part of such a parameter can optionally be put into 'single' or "double" quotes. Examples:

    • log=message:HELLO WORLD

    • log='HELLO WORLD'

    • log="HELLO WORLD"

  • Multiple <key>:<value> pairs must be separated by ;. Example:

    • log='HELLO WORLD';level=INFO

  • Multiple commands must be separated by &. Examples:

    • log='HELLO WORLD';level=INFO&datetime

    • log='HELLO WORLD';level=INFO&datetime=format:dd.MM.YY

  • Finally, values need to be URL encoded. Example:

    • datetime=format:dd.MM.YY encodes to datetime=format%3Add.MM.YY

For more details about the application/x-www-url-encoded content type in the HTTP standard see for example: https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST

After the values have been url encoded, the query string looks like this:

datetime=format%3Add.MM.YY&set.body=value%3A%20%22Today%20is%3A%20%23%7Bbody%7D%2

Below you can find the execution example using this url encoded query string:

curl -u 'username:password' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -X POST 'https://hub-<your-domain>/api/v3/pipeline' \
  -d 'datetime=format%3Add.MM.YY&set.body=value%3A%20%22Today%20is%3A%20%23%7Bbody%7D%22'

Example 8: With multipart body

Let's assume you would like to execute a pipeline script and additionally processing one or more files in this same pipeline which must be placed in the body.

Here’s an example of an HTTP multipart request as defined by the HTTP specification. This example does multiple steps in one request: It uploads a PDF, puts a new text on this PDF and finally stores it at server side:

curl -u 'username:password' \
  -X POST 'https://hub-try.pipeforce.org/api/v3/pipeline' \
  -F 'pipeline="pipeline:
        - pdf.stamp:
            text: \"Hello World!\"
        - drive.save:
            path: /my-stamped.pdf "' \
  -F 'file=@/my1.pdf' \

Note that the pipeline has the part name pipeline and one or more files must all have the name file.

HTTP API for persisted pipeline calls

It is also possible to load and execute a pipeline stored in the property store by sending a HTTP POST request to

In order to execute an adhoc pipeline (= with a Pipeline YAML script uploaded to the server), you have to send a HTTP POST request to this endpoint url:

https://hub-NS.pipeforce.net/api/v3/pipeline:<path>
  • Replace <NS> by your own namespace.

  • Replace <path> by the path of the pipeline in the property store.

Instead of using the property path, you can also set the uuid of the pipeline property:

https://hub-NS.pipeforce.net/api/v3/pipeline:uuid:<uuid>
  • Replace <NS> by your own namespace.

  • Replace <uuid> by the uuid of the pipeline property to be loaded and executed.

This approach has the advantage that it will work even if the pipeline has been moved / renamed to a different path.

Any request parameter given will be set as variables to the pipeline.

In case there is a body in the request, it will be set as initial body to the pipeline.

If header ContentType is set to application/json the body will be parsed to a JSON object and provided initial body value. Otherwise, the initial body will be provided as content object or it will be null in case no request body was set.

HTTP Methods

In order to execute a persisted pipeline on the backend, you need to send a HTTP POST request to the endpoint /api/v3/pipeline:<path> or /api/v3/pipeline:uuid:<uuid> by using one of these HTTP options:

HTTP Method

Content-Type

Request Body

Message Body

Execution

is set to

is set to

is set to

then will become

is

POST

application/json

A JSON data document.

The JSON data document parsed to a JSON instance.

The persisted pipeline loaded from the property store using its path or uuid.

POST

Any

Any data.

The data from the body provided as a content object

The persisted pipeline loaded from the property store using its key or uuid.

POST

None

None

null

The persisted pipeline loaded from the property store using its path or uuid.

PUT

application/json

A JSON pipeline.

None

The pipeline given as JSON in the request body will be converted and stored as YAML property with path given by <path> from request path. In case a pipeline with such path already exists, updates the existing one.

PUT

application/yaml

A YAML pipeline.

None

The pipeline given as YAML in the request body will be stored as YAML property with path given by <path> from request path. In case a pipeline with such path already exists, updates the existing one.

PUT

application/x-www-form-urlencoded

An url encoded pipeline URI.

None

The pipeline given as url encoded pipeline URI in the request body will be converted and stored as YAML property with path given by <path> from request path. In case a pipeline with such path already exists, updates the existing one.

Example 9: Execute persisted pipeline

In this example, a pipeline persisted under path global/app/myapp/pipeline/mypipeline will be loaded and executed at the backend without any body and request parameters:

curl -u 'username:password' \
  -X POST 'https://<hostname>/api/v3/pipeline:global/app/myapp/pipeline/mypipeline'

Example 10: Store a pipeline (persist it)

In this example a new persisted pipeline will be created under path global/app/myapp/pipeline/newpipeline.

curl -u 'username:password' \
  -h 'Content-Type: application/yaml' \
  -X PUT 'https://<hostname>/api/v3/pipeline:global/app/myapp/pipeline/newpipeline' \
  --data-raw 'pipeline:
    - log:
        message: "HELLO WORLD!"'

  • No labels

0 Comments

You are not logged in. Any changes you make will be marked as anonymous. You may want to Log In if you already have an account.