REST Post [Not Recommended]

Overview

Note: We highly recommend that you use the HTTP Client Snap instead of REST Snaps to take advantage of the Capabilities of HTTP Client Snap. Learn more about Migrate from REST Snaps to HTTP Client Snap.

You can use the REST Post Snap to execute the HTTP Post method on a REST API service endpoint to create business object resources. The Snap also assigns a new URI to every business object that it creates. and returns this URI in the output view.


Rest Post Overview

  • Write-type Snap
  • Works in Ultra Tasks when the Batch size is set to 1.

Snap views

View Description Examples of upstream and downstream Snaps
Input Each input document offers details associated with the data that must be posted to the target RESTful server.
Output Each output document contains details associated with the outcome of the Post request.
Error

Error handling is a generic way to handle errors without losing data or failing the Snap execution. You can handle the errors that the Snap might encounter when running the pipeline by choosing one of the following options from the When errors occur list under the Views tab. The available options are:

  • Stop Pipeline Execution Stops the current pipeline execution when an error occurs.
  • Discard Error Data and Continue Ignores the error, discards that record, and continues with the remaining records.
  • Route Error Data to Error View Routes the error data to an error view without stopping the Snap execution.

Learn more about Error handling in Pipelines.

Snap settings

Legend:
  • Expression icon (): Allows using JavaScript syntax to access SnapLogic Expressions to set field values dynamically (if enabled). If disabled, you can provide a static value. Learn more.
  • SnapGPT (): Generates SnapLogic Expressions based on natural language using SnapGPT. Learn more.
  • Suggestion icon (): Populates a list of values dynamically based on your Snap configuration. You can select only one attribute at a time using the icon. Type into the field if it supports a comma-separated list of values.
  • Upload : Uploads files. Learn more.
Learn more about the icons in the Snap settings dialog.
Field / Field set Type Description
Label String Specify a name for the Snap. You can modify this to be more specific, especially if you have more than one of the same Snap in your pipeline.

Default value: REST Post

Example: Upload New Files
Service URL String/Expression

Required. Specify the service endpoint URL of REST API. You can provide the URL in one of the following ways:

  • As a JavaScript expression in expression language.

    http://coresnapsqa-v4.s3.us-east-2.amazonaws.com/S3Account/'+encodeURIComponent("Special_char_owner_!3)12.json")

  • As a plain string that you should enclose in double quotes ("").

    "https://www.example.com/slm/webservice/v2.0/defect/%s".replace("%s", $.widget.id)

For Snaps using AWS Signature V4 accounts, you can use the canonical name (CNAME) for the URI so it's not necessary for the URL to end with amazonaws.com or have the region and service provided in it. However, if you are using the CNAME you must provide it in the AWS Region and Service Name fields in the AWS Signature V4 account.

The host name in the CNAME must be equal to the bucket name.

For example:

  • Previous URI: https://jsmith-bucket.nia3.snaplogic.net.s3.us-west-1.amazonaws.com/HttpClientTest/test1
  • New URI with CNAME: https://jsmith-sltest.nia3.snaplogic.net/HttpClientTest/test1

Here, the bucket name is jsmith-bucket.nia3.snaplogic.net

The Snap finds the value at the JSON path $.widget.id in the input data and replaces "%s" in the Service URL with the value. You can connect File Reader and JSON Parser Snaps upstream of a REST Put Snap and prepare the following JSON file for the File Reader Snap:

Note: This property is expression-enabled. For more information on the expression language, see Understanding Expressions in SnapLogic and Using Expressions. For information on pipeline parameters, see Pipeline Properties.
Default value: N/A
Example: https://elastic.snaplogic.com/api/1/rest/public/runtime/snaplogic?start=1430377200000&end=1430420399000
HTTP Entity String Specify the JSON path to the HTTP entity data in the input map data. You can leave this field blank if there is no entity data to send to the service URL.
Note: This property is expression-enabled. For more information on the expression language, see Understanding Expressions in SnapLogic and Using Expressions. For information on pipeline parameters, see Pipeline Properties.

Default value: $ (the HTTP entity data is at the root of the input map data)

Example: $.entity (if the HTTP entity data is the value of the "entity" key at the root of the input map data)
Batch size Integer The number of documents to be included in a single request. The incoming documents will be accumulated in a list up to the defined batch size before it is submitted to the endpoint.
Note: Make sure to set the batch size only if your REST endpoint expects a list.

Default value: N/A

Example: 20
Show all headers Checkbox The REST endpoint may return a response with multiple headers with the same header name.
  • If this property is deselected, only one response header will be shown in the output document.
  • If selected, the response header displays all the response header values received as a list of objects.
Note: If any of these objects has a key-value format, it is parsed into the map data.

Default value: Deselected

Single file upload: File String/Expression Specify the path of the file to be uploaded.
  • The file protocols supported are 'sldb:///' and 'file:///'.
  • If this property is a relative path, it is considered an SLDB file.
  • If this field is not empty, HTTP entity and Batch size properties are ignored, and the Upload-file key property is required.
  • If this property is an expression, the input document is used to evaluate the expression. Each input document invokes one file upload.
  • This property does not support wildcard or glob patterns.

This property is expression-enabled. For more information on the expression language, see Understanding Expressions in SnapLogic and Using Expressions.

Default value: N/A

Example: persons.csv
Single file upload: File key String/Expression Specify the key required for the multi-part form-data needed to upload a file.

HTTP POST uses multi-part entity to achieve the file upload. The form-data of its multi-part entity contains key-value pairs. Upload-file key is dependent on the service endpoint.

This property is expression-enabled. For more information, see Understanding Expressions in SnapLogic and Pipeline Properties.

Default value: file

Example: seed
Single file upload: Filename to be used String/Expression Specify the name that you want to use for the file being uploaded at the target endpoint. You can retain the original file name by leaving this property blank.

This property is expression-enabled. For more information on the expression language, see Understanding Expressions in SnapLogic and Pipeline Properties.

Default value: N/A

Example: NewFile.csv
Upload transfer request type String The type of encoding that you want to use to safely transfer the entity to the user. The available options are:
  • Chunked transfer encoding: The header Transfer-Encoding:chunked will be added to the POST request, and the Snap uploads the given file in chunked transfer encoding.
  • Calculate content length: The file size will be calculated and passed with header Content-Length in the POST request.

If Chunked transfer encoding is selected, the header "Transfer-Encoding:chunked" will be added to the POST request, and the Snap uploads the given file in chunked transfer encoding.

If Calculate content length is selected, the file size will be calculated and passed with header "Content-Length" in the POST request.

Note: Chunked transfer encoding can be used if the size of the given file cannot be calculated.

Default value: Chunked transfer encoding

Example: Calculate content length
Upload body type String Select the content-type processing for the entity body from the options available:
  • Multipart form-data: Sends the configured value of the HTTP entity as a multipart file, with the configured upload file (if not set as blank) sent as a bytes sub-part.
  • Multipart related: Enables you to post files to the Google Drive API and retain the original names.
  • Binary: Sends either the configured value of the HTTP entity or upload file as a binary entity (as bytes with no multipart information).

Default value: Multipart form-data

Example: Multipart related
Single file Upload: Multipart Content-Type String/Expression Select the content type headers for the data in the body of the multipart HTTP request. This is a suggestible field that shows the following suggestions:
  • application/octet-stream
  • text/plain
  • application/json
  • text/csv
  • text/html
  • image/jpeg
Note:
  • To specify other HTTP headers, configure the HTTP header property; however, content-type headers can also be configured in the HTTP header property.
  • If both Multipart Content-Type and HTTP header property are configured, the value in Multipart Content-type gets precedence.
Note: This property is expression-enabled. For more information on the expression language, see Understanding Expressions in SnapLogic and Pipeline Properties.

Default value: application/octet-stream

Example: text/csv
Form Upload Use this field set to configure the fields required to upload multiple files and text. Learn more about Multipart Upload. By default, the Snap Settings display the fields required to upload a file. Click the Add icon to add new rows for adding file or text.

This field set contains the following fields:

  • Multipart Type
  • Multipart Key
  • Multipart Value
  • HTTP Entity
  • Filename to be used
  • Multipart Content-Type
Multipart Type Dropdown list Choose the type of multipart upload that you want to initiate. The available options are:
  • FILE: Use this option to upload a file.
  • TEXT: Use this option to upload text.

Default value: FILE

Example: TEXT
Multipart Key String/Expression Specify the key required for the multi-part to upload a file or text as required. HTTP POST uses multi-part entity to achieve the form upload. The form data of its multi-part entity contains key-value pairs. Multipart Key can be anything and depends on the service endpoint.

This property is expression-enabled. For more information on the expression language, see Understanding Expressions in SnapLogic and Pipeline Properties.

Default value: file

Example: file, initial_comments, channels
Multipart Value String/Expression Specify the file or text to be uploaded.

If Multipart Type is FILE, the following are applicable:

  • The file protocols supported for file values are 'sldb:///' and 'file:///'.
  • If the file path is a relative path, it is considered an SLDB file.
  • If this field is not empty, HTTP Entity and Batch size fields are ignored and the Multipart Key field is required.
  • If the value is an expression, the input document is used to evaluate the expression. Each input document invokes one file upload.
  • This field does not support wildcard or glob patterns.

If Multipart Type is TEXT:

  • The value should be expression-enabled and enclosed in double quotes.
Note: For Text part upload using Form Upload, the HTTP Entity and Filename to be used fields are ignored.

Default value: N/A

Example: FILE: persons.csv, TEXT: “sldb://file.txt”, “sampletext”
HTTP Entity String/Expression Specify the HTTP entity of the file that you want to upload.

Default value: N/A

Example: $.entity
Filename to be used String/Expression Specify the name that you want to use for the file at the endpoint.

This property is expression-enabled. For more information on the expression language, see Understanding Expressions in SnapLogic and Pipeline Properties.

Default value: N/A

Example: NewFile.csv
Multipart Content-Type String/Suggestion Select the content type headers for the data in the body of the multipart HTTP request.

The available options are:

  • application/octet-stream
  • text/plain
  • application/json
  • text/csv
  • text/html
  • image/jpeg
Note: If the Multipart Type is TEXT, it is generally not required to specify any value in this field. When you do not specify any value, the API uses the default value text/plain; charset=UTF-8.
Note:
  • To specify other HTTP headers, configure the headers in the HTTP Header field set.
  • If you configure both Multipart Content-Type and HTTP Header fields, the value in Multipart Content-Type gets precedence.

Default value: N/A

Example: text/csv
Trust all certificates Checkbox Select this checkbox to trust all certificates, such as self-signed certificates.

Default value: Deselected

Follow redirects Checkbox Select this checkbox to enable the Snap to follow redirects.
  • If you select this checkbox, and the Snap receives a redirect response (such as 301 or 302), it sends another request to the URL specified in the response Location header.
  • If you deselect this checkbox, the Snap does not make another request, and the 301/302 response appears in the output view.

Default value: Selected

Query parameters Use this field set to add query parameters to your request. This field set comprises the following fields:
  • Query parameter
  • Query parameter value
Query parameter String

Specify the name (or key) of the query parameter.

Default value: N/A

Example: oauth2_access_token
Query parameter value String/Expression

Specify the value associated with the query parameter.

Default value: N/A

Example: $account.access_token
HTTP Header Use this field set to create the HTTP header key-value pairs required for defining the headers for different types of input (JSON, PDF, DOCX, and so on). If you want to specify only content-type headers, you can configure the Multipart Content-Type property instead.

This field set comprises the following fields:

  • Key
  • Value

Configuring HTTP headers helps avoid problems in reading or opening files uploaded using the REST Post Snap.

Key String/Expression

Specify the name of the HTTP header.

This property is expression-enabled. For more information on the expression language, see Understanding Expressions in SnapLogic and Pipeline Properties.

Default value: N/A

Example: Content-Type
Value String/Expression Specify the value of the HTTP header.

This property is expression-enabled. For more information, see Understanding Expressions in SnapLogic and Pipeline Properties.

Default value: N/A

Example: application/json
Response entity type Dropdown list Select one of the following response entity types you want the Snap to display in the output document:
  • DEFAULT: Enables the Snap to process the response automatically. The response entity is processed based on the Content-Type header in the response. If the content provided does not parse with the provided Content-Type, the Snap results in an error.
  • TEXT: Produces an entity of string type.
  • BINARY: Produces an entity of byte array type.

If you select TEXT or BINARY, the Snap does not parse the entity content. If you select DEFAULT, the Snap produces the expected result in most cases, but if it fails, you can set the Response entity type to TEXT or BINARY.

Default value: DEFAULT

Example: TEXT
Cookie Policy String/Expression Select a Cookie Policy from the following options:
  • Browser Compatibility: This policy is compatible with different servers even if they are not completely standards-compliant. If you are facing issues while parsing cookies, you should try using this policy.
  • Ignore Cookies: This cookie policy ignores all cookies. You should use this policy to prevent HTTP Client from accepting and sending cookies.
  • RFC Strict: This policy uses the set-cookie header.
  • RFC Lax: This policy uses set-cookie and set-cookie2 for parsing.
Note: When using a cookie policy, you must select Show All Headers checkbox to view the parsed cookies from the cookie policy specification.

Default value: Ignore Cookies

Example: RFC Strict

Read timeout Integer Specify the number of seconds for which the Snap waits before aborting the request due to a failure to read from the target service.
Note:
  • In some cases, the request does not return, such as during network issues. Configure a timeout to fail fast.
  • Every Snap instance can have its own timeout settings.
  • The Snap executes five retries with a short back-off time before failing.

Default value: 900

Example: 1000
Connection timeout Integer Specify the number of seconds for which the Snap waits before aborting the request due to a failure to establish a connection to the target endpoint or service.

Default value: 30

Example: 45
Maximum request attempts Integer Specify the maximum number of attempts that the Snap must make to receive a response. If the attempts do not result in a response, the Snap terminates the request.

Default value: 5

Example: 3
Retry request interval Integer Select one of the following response entity types you want the Snap to display in the output document:
  • DEFAULT - Select this option to enable the Snap to process the response automatically. The response entity is processed automatically based on the Content-Type header in the response. If the content provided does not parse with the provided Content-Type, the snap will result in an error.
  • The following two scenarios describe the Snap’s behavior when using the Process Array checkbox:
    • When you select the Process Array checkbox, the Snap parses JSON or XML and produces a stream of documents at the output view.
    • When you deselect the Process Array checkbox, the Snaps sends the data as it is at the output view.
  • TEXT - Select this option to enable, the Snap to produce an entity of string type.
  • BINARY - Select this option to enable the Snap to produce an entity of byte array type.

Default value: 3

Example: 10
Retry Policy Dropdown list Select how you want to handle connection and error responses from the following options:
  • Connection errors: Occurs when a client fails to establish a secure connection to the server.
  • Connection and auth errors (401/403): Occurs when either the user authorization fails or access to the page/resource is forbidden.
  • Connection and client errors (4xx): Occurs when the request for the resource contains bad syntax or when the resource is not found (404).
  • Connection and server errors (5xx): Occurs when the server is unable to complete a request.
  • All errors: Applies to all of the above-listed errors.

Default value: Connection errors

Example: All errors
Normalize URL Checkbox Select this checkbox to normalize the Service URL. This enables the Snap to convert double slashes (//) in the URL path to single slash (/).

For example: https://example.com/path//to//file is converted to https://example.com/path/to/file.

Deselecting this checkbox reverts the Snap to 4.19 Snaplex behavior, wherein the URL paths were not normalized by default.
Note: In the 4.20 Release, due to the HTTP client upgrade the URL paths were normalized by default. Hence, there was a change in behavior in handling the URL paths in 4.20 release when compared to 4.19. This change in behavior should not impact the existing Pipelines, because most of the websites map URL paths with double or single slashes to the same endpoint. For example, https://snaplogic.com/company/diversity and https://snaplogic.com//company//diversity direct to the same endpoint. Therefore, we recommend you to select the Normalize URL checkbox.

However, an exception to this is when you use non-standard URLs that differentiate the URL paths containing double slashes from those with single slashes and map them to different endpoints, in which case you must deselect Normalize URL check box.

For example, http://host/pages/foo.html and http://host/pages//foo.html point to different URIs, and servers assign different meanings to them.

Default value: Selected

Example: Deselected
Snap execution Dropdown list Select one of the following three modes in which the Snap executes:
  • Validate & Execute: Performs limited execution of the Snap, and generates a data preview during Pipeline validation. Subsequently, performs full execution of the Snap (unlimited records) during Pipeline runtime.
  • Execute only: Performs full execution of the Snap during Pipeline execution without generating preview data.
  • Disabled: Disables the Snap and all Snaps that are downstream from it.

Default value: Validate & Execute

Example: Validate & Execute

Troubleshooting

Failed to execute HTTP request

Reason: The Service URL must have a protocol, such as http:// or https://. <Service_URL>: Name or service not known. This basically means that the service URL you entered is not accessible.

Resolution: Please check the Snap properties. Specifically, check your entry in the Service URL field.

Failure: Validation errors: property_map.settings.serviceUrl.value: Could not compile expression: <Service_URL>

Reason: The Snap settings are not correct. Encountered extraneous input ':' at line 1:5; expecting={<EOF>, '||', '&&', '^', '==', '!=', '>', '<', '>=', '<=', '+', '-', '*', '/', '%', '?', 'instanceof', 'in', 'matches', '[', '(', '.', PropertyRef}.

This means that you have turned expressions on () while entering a string value into the Service URL field.

Resolution: Please fix the Snap configuration and try executing again. Check expression syntax. Specifically, ensure that your Service URL is a proper expression; or turn off the expression control (). For more information, see Understanding Expressions in SnapLogic.

HTTP entity: <string_in_HTTP entity field> is undefined. Perhaps you meant: <List of variables received from the upstream Snap>.

Reason: Either there is an error in the value in the HTTP entity field, or you have used string input while having expressions enabled.

Resolution: Check the spelling of the variable. Also, check whether your HTTP entity entry requires expressions. Update Snap settings as appropriate.

REST API service endpoint returned error result: status code = 400

Reason: Reason phrase = BAD REQUEST, refer to the error_entity field in the error view document for more details.

You typically see this message when:

  • The value in the HTTP entity field is structured as an expression, but the expression toggle is off.
  • The value in the (single- or multiple-file-upload) File Key fields is inaccurate or does not contain expressions even though the Expression toggle is enabled.
  • The value in the (single- or multiple-file-upload) File Name fields contains special characters, such as (&, ^, and %).

Resolution: Please check the values of Snap properties. Specifically:

  • Check whether your HTTP entity entry requires expressions. Update Snap settings as appropriate.
  • Check the value in the (single- or multiple-file-upload) File Key fields.
  • Check the value in the (single- or multiple-file-upload) Filename to be used fields.

File not found: <File URL>

Reason: File not found on <server URL> at <complete address of file to be uploaded>.

Resolution: Please address the reported issue. Check the location of the file to be uploaded.

Single file upload: <Name of field>: <name of file> is undefined. Perhaps you meant: <options based on your input>

Reason: null. Check the spelling of the variable. Specifically, check whether the expressions toggle is turned on even though it is not required.

REST API service endpoint returned error result: status code = 409

Reason: CONFLICT, refer to the error_entity field in the error view document for more details. This happens when you already have the resource that you want to create in the target endpoint.

Resolution: Please check the values of Snap properties.

URL Parse Exception - 403

Reason: The Service URL path might be containing any of the following special characters: !, =, %, #, $, ^&()_¢äâêîôûñç¡¿ÉÙËǨ°¸ðø©¢¾A+²½µ®§÷¶þ

Resolution: To escape the special characters, use the global function encodeURIComponent on any variables that might contain special characters so that they are encoded properly.

Too many Requests - 429

Reason: There are too many requests to REST endpoint.

Resolution: Wait for the retry to succeed. REST-related Snaps extract the response header and automatically retry when they encounter status 429.

By default, the retry interval (Retry-After) is specified in the HTTP response header. If no value is available for Retry-After, then the Snap’s Retry Interval value is used.

Examples