Shopify Connector
Documentation
Version: 2
Documentation

EndPoint Generic Request


Name

generic_request

Description

This is generic endpoint. Use this endpoint when some actions are not implemented by connector. Just enter partial URL (Required), Body, Method, Header etc. Most parameters are optional except URL.

Parameters

Parameter Label Required Options Description
Url Url YES API URL goes here. You can enter full URL or Partial URL relative to Base URL. If it is full URL then domain name must be part of ServiceURL or part of TrustedDomains
Body Body NO Request Body content goes here
IsMultiPart IsMultiPart NO Set this option if you want to upload file(s) (i.e. POST RAW file data) or send data using Multi-Part encoding method (i.e. Content-Type: multipart/form-data). Multi-Part request allows you to mix key/value and upload files in same request. On the other hand raw upload allows only single file upload (without any key/value) ==== Raw Upload (Content-Type: application/octet-stream) ===== To upload single file in raw mode check this option and specify full file path starting with @ sign in the Body (e.g. @c:\data\myfile.zip ) ==== Form-Data / Multipart Upload (Content-Type: multipart/form-data) ===== To treat your Request data as multi part fields you must specify key/value pairs separated by new lines into RequestData field (i.e. Body). Each key value pair is entered on new-line and key/value are separated using equal sign (=). Preceding and trailing spaces are ignored also blank lines are ignored. If field value has some any special character(s) then use escape sequence (e.g. For NewLine: \r\n, For Tab: \t, For at (@): \@). When value of any field starts with at sign (@) its automatically treated as File you want to upload. By default file content type is determined based on extension however you can supply content type manually for any field using this way [ YourFileFieldName.Content-Type=some-content-type ]. By default File Upload Field always includes Content-Type in the request (non file fields do not have content-type by default unless you supply manually). For some reason if you dont want to use Content-Type header in your request then supply blank Content-Type to exclude this header altogather [e.g. SomeFieldName.Content-Type= ]. In below example we have supplied Content-Type for file2 and SomeField1, all other fields are using default content-type. See below Example of uploading multiple files along with additional fields. If some API requires you to pass Content-Type: multipart/form-data rather than multipart/form-data then manually set Request Header => Content-Type: multipart/mixed (it must starts with multipart/ else will be ignored). file1=@c:\data\Myfile1.txt file2=@c:\data\Myfile2.json file2.Content-Type=application/json SomeField1=aaaaaaa SomeField1.Content-Type=text/plain SomeField2=12345 SomeFieldWithNewLineAndTab=This is line1\r\nThis is line2\r\nThis is \ttab \ttab \ttab SomeFieldStartingWithAtSign=\@MyTwitterHandle
Filter Filter NO
Option Value
No filter
Example1 $.store.books[*]
Example2 (Sections Under Books) $.store.books[*].sections[*]
Example3 (Equals) $.store.books[?(@author=='sam')]
Example4 (Equals - Any Section) $..[?(@author=='sam')]
Example5 (Not Equals - Any Section) $..[?(@author!='sam')]
Example6 (Number less than) $.store.books[?(@.price<10)] Example7 (Regular Expression - Contains Pattern)=$.store.books[?(@author=~ /sam|bob/ )]
Example8 (Regular Expression - Does Not Contain Pattern) $.store.books[?(@author=~ /^((?!sam|bob).)*$/ )]
Example9 (Regular Expression - Exact Pattern Match) $.store.books[?(@author=~ /^sam|bob$/ )]
Example10 (Regular Expression - Starts With) $.store.books[?(@author=~ /^sam/ )]
Example11 (Regular Expression - Ends With) $.store.books[?(@author=~ /sam$/ )]
Example12 (Between) $.store.employees[?( @.hiredate>'2015-01-01' && @.hiredate<'2015-01-04' )]
Enter filter to extract array from response. Example: $.rows[*] --OR-- $.customers[*].orders[*]. Check your response document and find out hierarchy you like to extract
Headers Headers NO Headers for Request. To enter multiple headers use double pipe or new line after each {header-name}:{value} pair

Output Columns

Label Data Type (SSIS) Data Type (SQL) Length Raw Description
There are no Static columns defined for this endpoint. This endpoint detects columns dynamically at runtime.

Input Columns

Label Data Type (SSIS) Data Type (SQL) Length Raw Description
There are no Static columns defined for this endpoint. This endpoint detects columns dynamically at runtime.

Examples

SSIS

Use Shopify Connector in API Source component to read data or in API Destination component to read/write data:

Generic Request using API Source

Shopify
Generic Request
SSIS API Source - Read from table or endpoint

Generic Request using API Destination

Shopify
Generic Request
SSIS API Destination - Access table or endpoint

ODBC application

Use these SQL queries in your ODBC application data source:

Set inventory with a specific inventory item and location id - generic API

If you get URL Too long error then reduce location ids in the query (approx 300-400 ids per call allowed)

SELECT * FROM generic_request 
WITH (
    URL='/inventory_levels/set.json'
  --OR Use full URL
  --URL='https://MY-STORE-HERE.myshopify.com/admin/api/2023-01/inventory_levels/set.json'
  	
  , RequestMethod='POST'
  , Body='{"location_id":25801916516,"inventory_item_id":43512280416356,"available":42}' --needed if you call PUT, POST
  , Filter='$.inventory_level' --change table name here
  , Headers='Content-Type: application/json'
  , Meta='inventory_item_id:long; location_id:long; available:int; updated_at: datetime'
)

Generic Query using Shopify admin GraphQL API

This example shows how to invoke GraphQL query for very generic data read/write. For more information on GraphQL API visit this link https://shopify.dev/docs/api/admin/getting-started

SELECT * FROM generic_request 
WITH (
    URL='/graphql.json'
  --OR Use full URL
  --URL='https://MY-STORE-HERE.myshopify.com/admin/api/2023-10/graphql.json'
  
  , RequestMethod='POST'
  , Filter='$.data.products.nodes' --change table name here e.g. products
  , Headers='Content-Type: application/json'
  --change table name and columns below here e.g. products... and id, title etc
  -- change pagesize if needed (i.e. max 250)
  , Body='{
 "query" : "<<{
 
 products(first: 250 [$tag$])
 {
    nodes {
      id
      title
      createdAt
    }
    
    pageInfo {
      hasNextPage
      endCursor
    }
    
  }
  
},FUN_JSONENC>>"
}'
	, NextUrlAttributeOrExpr='$.data.products.pageInfo.endCursor' --change table name 
	, NextUrlEndIndicator='false'
	, StopIndicatorAttributeOrExpr='$.data.products.pageInfo.hasNextPage' --change table name 
	, UseConnection='True'
	, EnablePageTokenForBody='True'
	, HasDifferentNextPageInfo='True'
	, NextPageBodyPart='after: \"[$pagetoken$]\"'
	--Use metadata to speed up execution. To get Metadata Run query without Meta clause. 
	-- Then click View Metadata button found in Botttom Result Grid Toolbar. Get Compact format and paste below
	--, Meta='id:String(255); title:String(255); createdAt:DateTime; '
)

Generic Query using Shopify admin REST API

This example shows how to invoke pretty much any REST API for generic data read/write. For more information on REST API visit this link https://shopify.dev/docs/api/admin/getting-started

SELECT * FROM generic_request 
WITH (
    URL='/products.json'
  --OR Use full URL
  --URL='https://MY-STORE-HERE.myshopify.com/admin/api/2023-01/products.json'
  	
  , RequestMethod='GET'
  , Body='{}' --needed if you call PUT, POST
  , Filter='$.products[*]' --change table name here
  , Headers='Content-Type: application/json'
  , PagingMode='ByResponseHeaderRfc5988'
  
  
  --Use metadata to speed up execution. To get Metadata Run query without Meta clause. 
  --Then click View Metadata button found in Botttom Result Grid Toolbar. Get Compact format and paste below
  , Meta='id:String(255); title:String(255); created_at:DateTime; '
)

SQL Server

Use these SQL queries in SQL Server after you create a data source in Data Gateway:

Set inventory with a specific inventory item and location id - generic API

If you get URL Too long error then reduce location ids in the query (approx 300-400 ids per call allowed)

DECLARE @MyQuery NVARCHAR(MAX) = 'SELECT * FROM generic_request 
WITH (
    URL=''/inventory_levels/set.json''
  --OR Use full URL
  --URL=''https://MY-STORE-HERE.myshopify.com/admin/api/2023-01/inventory_levels/set.json''
  	
  , RequestMethod=''POST''
  , Body=''{"location_id":25801916516,"inventory_item_id":43512280416356,"available":42}'' --needed if you call PUT, POST
  , Filter=''$.inventory_level'' --change table name here
  , Headers=''Content-Type: application/json''
  , Meta=''inventory_item_id:long; location_id:long; available:int; updated_at: datetime''
)';

EXEC (@MyQuery) AT [LINKED_SERVER_TO_SHOPIFY_IN_DATA_GATEWAY];

Generic Query using Shopify admin GraphQL API

This example shows how to invoke GraphQL query for very generic data read/write. For more information on GraphQL API visit this link https://shopify.dev/docs/api/admin/getting-started

DECLARE @MyQuery NVARCHAR(MAX) = 'SELECT * FROM generic_request 
WITH (
    URL=''/graphql.json''
  --OR Use full URL
  --URL=''https://MY-STORE-HERE.myshopify.com/admin/api/2023-10/graphql.json''
  
  , RequestMethod=''POST''
  , Filter=''$.data.products.nodes'' --change table name here e.g. products
  , Headers=''Content-Type: application/json''
  --change table name and columns below here e.g. products... and id, title etc
  -- change pagesize if needed (i.e. max 250)
  , Body=''{
 "query" : "<<{
 
 products(first: 250 [$tag$])
 {
    nodes {
      id
      title
      createdAt
    }
    
    pageInfo {
      hasNextPage
      endCursor
    }
    
  }
  
},FUN_JSONENC>>"
}''
	, NextUrlAttributeOrExpr=''$.data.products.pageInfo.endCursor'' --change table name 
	, NextUrlEndIndicator=''false''
	, StopIndicatorAttributeOrExpr=''$.data.products.pageInfo.hasNextPage'' --change table name 
	, UseConnection=''True''
	, EnablePageTokenForBody=''True''
	, HasDifferentNextPageInfo=''True''
	, NextPageBodyPart=''after: \"[$pagetoken$]\"''
	--Use metadata to speed up execution. To get Metadata Run query without Meta clause. 
	-- Then click View Metadata button found in Botttom Result Grid Toolbar. Get Compact format and paste below
	--, Meta=''id:String(255); title:String(255); createdAt:DateTime; ''
)';

EXEC (@MyQuery) AT [LINKED_SERVER_TO_SHOPIFY_IN_DATA_GATEWAY];

Generic Query using Shopify admin REST API

This example shows how to invoke pretty much any REST API for generic data read/write. For more information on REST API visit this link https://shopify.dev/docs/api/admin/getting-started

DECLARE @MyQuery NVARCHAR(MAX) = 'SELECT * FROM generic_request 
WITH (
    URL=''/products.json''
  --OR Use full URL
  --URL=''https://MY-STORE-HERE.myshopify.com/admin/api/2023-01/products.json''
  	
  , RequestMethod=''GET''
  , Body=''{}'' --needed if you call PUT, POST
  , Filter=''$.products[*]'' --change table name here
  , Headers=''Content-Type: application/json''
  , PagingMode=''ByResponseHeaderRfc5988''
  
  
  --Use metadata to speed up execution. To get Metadata Run query without Meta clause. 
  --Then click View Metadata button found in Botttom Result Grid Toolbar. Get Compact format and paste below
  , Meta=''id:String(255); title:String(255); created_at:DateTime; ''
)';

EXEC (@MyQuery) AT [LINKED_SERVER_TO_SHOPIFY_IN_DATA_GATEWAY];