Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

In this article

Table of Contents
maxLevel2
excludeOlder Versions|Additional Resources|Related Links|Related Information

Overview

You can use the REST Post Snap to 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.

Prerequisites

None.

Supported Features

Works in Ultra Pipelines. We recommend you to set the batch size to 1.

Limitations and Known Issues

None.

Snap Views

TypeFormatNumber of ViewsExamples of Upstream and Downstream SnapsDescription
Input Document
  • Min: 0
  • Max: 1
  • Mapper
  • Script
  • Router
Each input document offers details associated with the data that must be posted to the target RESTful server.
OutputDocument
  • Min: 0
  • Max: 1
  • JSON Splitter
  • JSON Formatter
  • Join

Each output document contains details associated with the outcome of the Post request.


ErrorIf the Snap fails during the operation, the Snap sends an error document to the error view containing the fields error, reason, resolution, and stacktrace. For this to happen, however, the error view must be enabled. Learn more, Handling Errors with an Error Pipeline.


Snap Settings

Field NameField TypeDescription
Label*String
Insert excerpt
File Writer
File Writer
nopaneltrue
Default ValueREST Post
ExampleUpload New Files
Service URL*String/Expression

Multiexcerpt include macro
nameREST_Serviceurl
pageREST Get

Multiexcerpt include macro
nameServiceurl_Example
pageREST Get

Multiexcerpt include macro
nameExpEnabled
pageREST Put

HTTP EntityString/Expression


Multiexcerpt macro
nameHTTP_entity

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.

Multiexcerpt include macro
nameExpEnabled
pageREST Put

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 sizeString
Multiexcerpt include macro
nameBatch_Size
pageREST Patch
Default Value: N/A
Example: 20
Show all headersCheckbox
Multiexcerpt include macro
nameShow_All_Headers
pageREST Delete
Default Value: Deselected
Example: N/A
Single file upload: FileString/Expression


Multiexcerpt macro
nameSingle_File_Upload_File

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.

Multiexcerpt include macro
nameExpEnabled
pageREST Put

Default Value: N/A
Examplepersons.csv

Single file upload: File key

String/Expression


Multiexcerpt macro
nameFile_Key

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 of service endpoint.

Multiexcerpt include macro
nameExpEnabled
pageREST Put

Default Valuefile
Exampleseed

Single file upload: Filename to be usedString/Expression


Multiexcerpt macro
nameFilename_to_be_Used

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.

Multiexcerpt include macro
nameExpEnabled
pageREST Put

Default Value: N/A
ExampleNewFile.csv

Upload transfer request typeDropdown list

The type of encoding that you want to use to safely transfer the entity to the user. The available options are:

  • Chunked transfer encoding
  • Calculate content length

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 ValueChunked transfer encoding
ExampleCalculate content length

Upload body typeDropdown list

Select the content-type processing for the entity body from the options available:

  • Multipart form-dataSends 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 relatedEnables 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 ValueMultipart from-data
ExampleMultipart related

Single file Upload: Multipart Content-TypeString/Suggestion


Multiexcerpt macro
nameMultipart_Content_Type

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

  1. To specify other HTTP headers configure the HTTP header property; however content-type headers can also be configured in the HTTP header property.
  2. If both Multipart Content-Type and HTTP header property are configured, the value in Multipart Content-type gets precedence. 


Multiexcerpt include macro
nameExpEnabled
pageREST Put

Default Valueapplication/octet-stream
Exampletext/csv

Form Upload


Multiexcerpt macro
nameUpload_Files

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 ValueFILE
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 it depends on the service endpoint.

Multiexcerpt include macro
nameExpEnabled
pageREST Put

Default Valuefile
Examplefile, initial_comments, channels

Multipart Value

String/Expression

Specify the 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 as 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 a TEXT, then

  • 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 are ignored.

Default Value: N/A

Example

HTTP EntityString/Expression

Specify the HTTP entity of the file that you want to upload.

Default Value: N/A
Example$.entity 

Filename to be usedString/Expression

Multiexcerpt include macro
nameFilename_to_be_Used
pageREST Post

Multiexcerpt include macro
nameExpEnabled
pageREST Put

Default Value: N/A
ExampleNewFile.csv

Multipart Content-TypeString/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.


Info
  • 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 the Multipart Content-type gets precedence. 

Default Value: N/A
Exampletext/csv

Trust all certificatesN/A


Multiexcerpt macro
nameTrust_All_Certificates

Select this checkbox to trust all certificates, such as self-signed certificates.  

Default Value: Deselected
Example: N/A

Follow redirectsN/A


Multiexcerpt macro
nameFollow_Redirects

Select this checkbox to enable the Snap to follow redirects.

  • If you select this checkbox, the Snap receives a redirect response, such as a 301 or 302 response code, 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
Example: N/A

Query parameters


Multiexcerpt macro
nameQuery_Parameters_REST

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

N/A

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

Default Value: N/A
Exampleoauth2_access_token

Query parameter value

N/A

Specify the value associated with the query parameter.

Default Value: N/A
Example$account.access_token

HTTP Header


Multiexcerpt macro
nameHTTP_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


Note

Configuring HTTP headers helps avoid problems in reading or opening files uploaded using the REST Post Snap. Refer to the Troubleshooting section, below, for more information.


Key

String/Expression

Specify the name of the HTTP header.

Default Value: N/A
ExampleContent-Type

Value

String/Expression

Specify the value of the HTTP header.

Default Value: N/A
Exampleapplication/json

Response entity typeDropdown list
Multiexcerpt include macro
nameResponse_Entity_Type
pageREST Get
Default ValueDEFAULT
Example: TEXT
Read timeoutInteger


Multiexcerpt macro
nameRead_Timeout

Specify the number of seconds for which the Snap waits before aborting the request due to a failure to read from the target service.

  • In some cases, the request does not return, such as during network issues. For those a timeout can be configured to allow failing fast. 
  • Every Snap instance can have its own timeout settings.
  • The Snap will execute five retries within a couple of seconds back-off time before it fails.


Default Value900
Example1000

Connection timeoutInteger


Multiexcerpt macro
nameConnection_Timeout

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 Value30
Example45

Maximum request attemptsInteger


Multiexcerpt macro
nameMaximum_Request_Attempts

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 Value5
Example3

Retry request intervalInteger


Multiexcerpt macro
nameRetry_Request_Interval

Specify the number of seconds for which the Snap waits between two successive requests. A retry happens only when the previous attempt resulted in an exception.

Default Value3
Example10

Retry PolicyDropdown list


Multiexcerpt macro
nameRetry_Policy

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 ValueConnection errors
ExampleAll errors

Normalize URLCheckbox

Insert excerpt
REST Get
REST Get
nameNormalize URL
nopaneltrue

Default ValueSelected
ExampleN/A

Snap ExecutionDropdown list

Select one of the three modes in which the Snap executes. Available options are:

  • 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
ValueExecute only
ExampleValidate & Execute

Troubleshooting

ErrorReasonResolution
Failed to execute HTTP requestThe Service URL must have a protocol, such as http://, https://.Please check the Snap properties. Specifically, check your entry in the Service URL field.
<Service_URL>: Name or service not known. This basically means that the service URL you entered is not accessible.
Failure: Validation errors: property_map.settings.serviceUrl.value: Could not compile expression: <Service_URL>

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 string value into the Service URL field.

Please fix the snap configuration and try the execution again. Please check expression syntax. Specifically, ensure that your service URL is a proper expression; or turn off the expression control (). 

Multiexcerpt macro
nameExpInfo

For more information on the expression language, see Understanding Expressions in SnapLogic and Using Expressions.


HTTP entity: <string_in_HTTP entity field> is undefined. Perhaps you meant: <List of variables received from the upstream Snap>.Either there is an error in the value in the HTTP entity field, or you have used string input while having expressions enabled.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 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 %).

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>
File not found on <server URL> at <complete address of file to be uploaded>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>
nullCheck 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 = 409CONFLICT, 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.Please check the values of Snap properties.
URL Parse Exception - 403The Service URL path might be containing any of the following special characters: !, =, %, #, $, ^&()_¢äâêîôûñç¡¿ÉÙËǨ°¸ðø©¢¾A+²½µ®§÷¶þ 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

There are too many requests to REST endpoint.

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

Creating a Jira Issue Using REST Post

This example Pipeline demonstrates how to create a Jira issue using the REST Post Snap.

Initially, we configure the JSON Generator Snap to pass the input. The following JSON data is the input document to the Snap:

Paste code macro
languagejson
{
        "fields": { "project": { "key": "JIRASNAP" }, "summary": "Test JIRA Snaps (create/update/delete a Jira issue)", "description": "Create, update and delete JIRA issues using the JIRA Create, Put and Delete Snaps", "issuetype": { "name": "New Feature" } } }

 
The following JSON data is the output document provided by the Snap:
{
    "response": { "headers": { "strict-transport-security": "max-age=315360000;includeSubdomains", "x-content-type-options": "nosniff", "x-seraph-loginreason": "OK", "connection": "keep-alive", "set-cookie": "atlassian.xsrf.token=BWCK-SR48-JN93-ESFC|27aeead347f4dc9cd2e8cf01a8137852db40893c|lin; Path=/; Secure", "transfer-encoding": "chunked", "content-type": "application/json;charset=UTF-8", "date": "Thu, 15 Jan 2015 18:48:57 GMT", "x-arequestid": "648x1342x1", "x-asen": "SEN-2848532", "x-asessionid": "17vnxvp", "cache-control": "no-cache, no-store, no-transform", "x-ausername": "admin", "server": "nginx" }, "statusLine": { "reasonPhrase": "Created", "statusCode": 201, "protoVersion": "HTTP/1.1" }, "entity": { "id": "17392", "key": "JIRASNAP-4312", "self": "https://Snaplogic.atlassian.net/rest/api/2/issue/17392" } },
    "original": { "fields": { "project": { "key": "JIRASNAP" }, "summary": "Test JIRA Snaps (create/update/delete a Jira issue)", "description": "Create, update and delete JIRA issues using the JIRA Create, Put and Delete Snaps", "issuetype": { "name": "New Feature" } } } }

The REST Post Snap in this example Pipeline creates a JIRA issue.

Reading a MySQL Table and Writing its Contents to a File Using REST Post

In this example, we use the REST Post Snap to read a table in MySQL and write the contents to a file. It is designed to run against the MySQL sample database sakila, but can be easily adapted to work against any database. This example consists of two Pipelines available in the Download section below:

  • REST_MySql_to_file_1_of_2
  • REST_MySql_to_file_2_of_2

To run the demo:

  1. Download both Pipelines, decompress them, and upload them both into one project in SnapLogic.
  2. Change the MySQL user account in Pipeline 2.
  3. Create a task for Pipeline 2.
  4. Paste the task into the JSON document Snaplex attribute.
  5. Run Pipeline 1. It will create a file in the local project.


This example illustrates the following topics:

  • How to use a REST Post Snap to invoke a "remote service"
  • How to pass document parameters in a REST Post Snap
  • How to convert a pipeline parameter to a document parameter for use in a MySQL where clause
  • How to convert a pipeline parameter from a string to a integer
  • How to use a function to populate a column in a database with the current datetime
  • How to convert a JSON document to a flat csv file.

Uploading Multiple Files Using the REST Post Snap

This example demonstrates how we can upload multiple files using the REST Post Snap. 

Add a REST Post Snap to your pipeline with settings configured as shown below:


To upload multiple files using the REST Post Snap, you need to specify at least the following settings:

  • Service URL: This is the service endpoint URL of the REST API associated with your account.
  • Upload File(s)
    • Upload File Key: Enter file here to specify that you want to upload a file. For uploading messages, you could use the key seed.
    • Upload file: Enter here the location and name of the file you want to upload. In this example, we have uploaded two files, test_data.csv and Dynamics_365 For Sales Read.json.
    • Filename to be used: Enter here the new name of the file. This is the name that will be given to the new file created in the destination directory. In this example, we have named our new files test_data.csv and sales_read.json, respectively.
    • Multipart Content-Type: Enter here the type of the data you want to create. In our example, the first file is text/csv, and the second file is application/json.
  • Click the + button in the HTTP Header fieldset. This adds a row of fields, which you can use to add authorization information required for your request. You can also provide Basic Auth account details instead of using these fields. In this example, we have used HTTP headers.
    • Key: Enter Authorization here. This tells the Snap that the string in the Value field is to be used for authorizing the transaction.
    • Value: Enter the authorization string provided for your account.
  • Select the Execute during preview check box to instruct the Snap to run the pipeline during preview. For a successful execution, the following success message appears:



Click here to download this Pipeline. You can also downloaded this pipeline from the Downloads section below.

Using the REST Post Snap to Add Attachments to Jira Issues

In this example, we use a REST Post Snap to add attachments to a Jira issue.

Download this Pipeline.

You design the Pipeline as shown above. This Pipeline contains the following Snaps:

  1. Creating the Jira Ticket
    1. File Reader: Reads a file containing the details required to create a ticket in Jira.
    2. JSON Parser: Structures the data received from the File Reader Snap as a JSON document.
    3. Mapper: Creates a document containing the data needed to create a Jira ticket, by extracting and mapping data from the incoming document.
    4. JIRA Create: Creates a Jira ticket using the details provided by the Mapper Snap.
  2. Updating the Jira Ticket
    1. Mapper: Creates a document containing the key associated with the record that you want to update.
    2. REST Post: Updates the ticket with the specified attachments.

You configure these Snaps as explained in the sections below:

Creating the Jira Ticket

File Reader

You configure the File Reader Snap to read a JSON file from the SnapLogic File System:

Once the Pipeline is validated, you can view the output of the File Reader:


JSON Parser

You use the JSON Parser Snap to read the structure of the JSON file:

Once the Pipeline validates successfully, you can view the output of the JSON Parser Snap:


You now need to add the details required to specify where the ticket must be created, and to whom it must be assigned. You do this using the Mapper Snap. The Mapper Snap maps the schema of the source document (the JSON Parser Snap's output) with the schema of the target document (the schema of a Jira ticket as propagated backward by the JIRA Create Snap).

Mapper

You configure the Mapper Snap as shown below:

Once fields from the input document are mapped to fields in the Jira ticket schema and the Pipeline is validated, you can view a preview of the output:


JIRA Create

You now have a document containing all the details that you need to create a Jira ticket, and you use the JIRA Create Snap to create the ticket:

Once the ticket is created successfully, you can view the output in the preview:

Updating the Jira Ticket

You just created a Jira ticket, and you can see the ticket ID displayed against the "$key" field in the output preview of the JIRA Create Snap. You can now add attachments to this ticket. You decide to add two images. To do so, you decide to use the Mapper and REST Post Snaps.

Mapper

You configure the Mapper Snap to isolate the Jira ticket number from the output of the JIRA Create Snap:

Once you validate the Pipeline with your latest changes, you can see the output preview of the Mapper Snap, and you can see that only the ticket ID is retained:

REST Post

You configure the REST Post Snap to upload two images as attachments to the identified Jira ticket, accessible through a Service URL:

For a successful upload, the REST Post Snap displays a status code of 200:


You have now successfully created a Jira ticket and added attachments to the ticket.

Download this Pipeline.

Downloads

Multiexcerpt include macro
namedownload_instructions
pageOpenAPI

Attachments
patterns*.slp,*.zip

Insert excerpt
REST Snap Pack
REST Snap Pack
nopaneltrue