Step 1: Create the API
The first step is to create the API and define it to get customer account records.
To go to APIs, click βAPIβ under the βAPIs and integrationβ menu on the left side panel.
To create a new API, click the [+ API] button.

The New API page displays with the Details tab preselected. To define the API, go to the Details tab. Add the following information:
Enter the API name as βUserName_Acc_GetCustomersβ.
Select the API method as βGETβ.
Add a description for the API.
Create a new Group Name, "UserName" by clicking [+].
Add constant text for API Paths as βaccβ and βgetcustomersβ. Each of both parameters displays in a blue bubble.

The URL for the API is generated.

Enable βpublic documentationβ. This defines the API documentation to be accessed publicly.

To define the request body and response body details, go to the βInputs & outputsβ tab.

To define the Response body, go to the Inputs & outputs tab>Response body section and click it to expand it. A Response body is already created and defined with the following information:
By default, the name for the Response body is βdefaultResponseJsonBodyβ. For this exercise, keep the response body name as is.
The Content type from the list of values is selected as βapplication/json." This defines the type of content in the response.
The Response Code is selected as β200 OKβ.
Character set is selected as βUniversal (UTF-8)β.
Optionally add a description for the βResponse bodyβ. (This is used in the API documentation)
To define a sample Json for the response:
Copy sample json from entity βUserName_Acc_customersβ by selecting it from the drop-down menu.
A json object is populated. Add square brackets β[ ]β before and after the json to make it a list. (The json object should like as follows)
[{"Address":"string","City":"string", "Country":"string","Customer_ID":"GUID", "Customer_Value":0,"Email":"string", "First_Name":"string","IsActive":false, "Join_Date":"DateTime","Last_Name":"string", "Phone":"string","Rating":0,"Zip_Code":"string"}]\

In the βQuery stringsβ section, to add a "Query stringβ, click the [+ Query string] button.

To enter values for starting record number, number of records to count and specify the customer join date, define the query strings as follows:
Query String Name: βStartcountβ, Data Type: βintegerβ, Initialized Value: 1. This Query String defines the record number in the Entity to start counting the records from.
Query String Name: βCountβ, Data Type: βintegerβ, Initialized Value: 5. This Query string defines the number of records to be fetched from the specified start point.
Query String Name: βstartjoindateβ, Data Type: βDateTimeβ, Initialized Value: 2015-01-01. This Query string specifies the date i.e. the records will be fetched with Join_Date on or after this date.

To see the default variables created for an API, go to the βVariablesβ tab. The following two (2) Read Only variables are predefined:
Variable Name: βRequestβ, Data Type: βWebRequestβ. This variable contains the Web Request received.
Variable Name: βResponseβ, Data Type: βWebResponseβ. This variable contains the Web Response sent.

To create Actions for this API, go to the βCodeβ tab. By default, an βAction boxβ is already created with the description of the βAction boxβ as βOnExitβ. Remove the existing Action βAPI Respondβ. (It will be added later after all the Actions are defined as no Action is executed after βAPI Respondβ Action.)
Rename the βAction boxβ description text and label it as βfetch a range of customersβ.

To define the variables for this βAction boxβ, click on the βVariablesβ tab. Click the [+ Variable] button to create a variable.

To define the variables to store the values received in the Query Strings, add four (4) variables and define them as follows:
Variable Name: βstartcountβ, Data Type: βintegerβ, Default value: β1β (type value and press Enter). This variable contains the reference of the record from which the records will be traversed. In this case, it is initialized to β1β.
Variable Name: βcountβ, Data Type: βintegerβ, Default value: β5β (type value and press Enter). This variable contains the reference of the number of records to traverse after the starting point. In this case, it is initialized to β5β.
Variable Name: βStartJoinDateβ, Data Type: βDateTimeβ, Default value: None. If no date is specified as default and no value is provided in Query String, Langstack applications will automatically pick it up as β0β (Timestamp value of zero β0β second).
Variable Name: βskipCountβ, Data Type: βintegerβ, Default value: β1β. This variable contains the count of the number of records to be skipped before starting to retrieve the customer records.



To define Actions for this API, go to the βCodeβ tab in the βAction boxβ, add Action by clicking the (+) sign in the βAction boxβ. Add four (4) more Actions.

To check if the value of βstartcountβ received in the Query String is valid:
Select the first Action as βCondition actionβ.
Add description as βcheck if startcount is validβ.

If a valid value is present and is of numeric value, it will convert the String to Integer. To define this, in the βCriteriaβ tab, add two (2) Criteria bars.
Define the following Criteria bars keeping the AND operator:
To verify if a valid value for startcount is received, define the first Criteria Bar as follows:
Source: Variables>Request>querystrings>startcount, which is displayed as βRequest.querystrings.startcountβ
Operator: βIs Set"

To verify if the value received for startcount is numeric, define the second Criteria Bar as follows:
Source: Variables>Request>querystrings>startcount>isNumeric(), which is displayed as βRequest.Querystrings.startcount.isNumeric()β
Operator: βIs Equalβ
Value: true. If the criteria are True, the received value in the Query String will be stored as an integer data type.

To update the variable βstartcountβ with the value received in the Query String βstartcountβ, go to the Code tab>On True section and add an Action by clicking the (+) button. To store the received value as Integer, define the Action as follows:
Select Action as βUpdate Variableβ.
Add the Target variable as βstartcountβ.
Add Value as Variables>Request>queryStrings>startcount>toInteger(). It displays as βRequest.querystrings.startcount.toInteger()β.

To check if the value of βcountβ received in the Query String is valid:
Select the second Action in the βAction boxβ as βCondition actionβ.
Add description as βcheck if count is validβ.

If present and is of numeric data type, it will convert the value from String to integer data type. In the βCriteriaβ tab, add and define the following Criteria bars keeping the AND operator:
To verify if the value for βcountβ is received, define the first Criteria bar as follows:
Source: Variables>Request>queryStrings>count. It displays as βRequest.querystrings.countβ
Operator: "Is Set"

To verify if the value received for βcountβ is numeric, define the second Criteria bar as follows:
Source: Variables>Request>queryStrings>count>isNumeric().It displays as βRequest.querystrings.count.isNumeric()β
Operator: "Is Equal"
Value: "true"

If the criteria are true, the received value in the Query string will be stored as integer. To update the variable βcountβ with the value received in the Query string βcountβ, go to the Code tab>On True section and add an Action by clicking the (+) button. To store the received value as integer, define the action as follows:
Select Action as βUpdate Variableβ.
Add the Target variable as βcountβ.
Add Value as Variables>Request>queryStrings>count>toInteger(). It displays as βRequest.querystrings.count.toInteger()β.

To check if the value of βstartjoindateβ received in the Query string is valid:
Select the third Action in the Action box as βCondition actionβ.
Add description as βcheck if startjoindate is validβ.

If a valid value is present and is of DateTime format, it will store the value as DateTime. In the Criteria section, add and define the following Criteria bars:
To verify if a valid value for βstartjoindateβ is received, define the first Criteria bar as follows:
Source: Variables>Request>queryStrings>startjoindate. It displays as βRequest.querystrings.startjoindateβ.
Operator: "Is Not Empty"

To verify if the value received for βstartjoindateβ is of DateTime format and is not equal to 0 , define the second Criteria bar as follows:
Source: Variables>Request>queryStrings>startjoindate>toDateTime()>toInteger().It displays as βRequest.querystrings.startjoindate.toDateTime().toInteger()β.
Operator: "Is Not Equal"
Value: β0β

If the criteria are true, the received value in the Query string will be stored as DateTime. To update the variable βStartJoinDateβ with the value received in the Query string βstartjoindateβ, go to the Code tab>On True section and add an action by clicking the (+) button. To store the received value as DateTime, define the Action with the following details:
Select Action as βUpdate Variableβ.
Add Target variable as βStartJoinDateβ.
Add Value as Variables>Request>queryStrings>startjoindate>toDateTime().It displays asβRequest.querystrings.startjoindate.toDateTime()β.

To traverse the records from the target entity (go through the records), define the fourth Action in the βAction boxβ as follows:
Select Action as βTraverse Entityβ. This Action traverses the items in an entity.
Select Entity as βUserName_Acc_customersβ.
Click the βSelection Criteriaβ icon to define the manner in which the entity is to be traversed. (settings defined in the next step)
The variable for the field βTreat each element in the listβ as βitemβ is automatically created and populated. The βitemβ variable is automatically added on selection of the entity in the Traverse Entity Action and it is always the same data type as of the entity selected.

To define the items to be traversed ordered by the customer join date (ascending), define the Selection Criteria box as follows:
Select Order by: βJoin_Date.β The records will be ordered based on the Join_Date of the Entity.
βAscendingβ is preselected. Based on the Join_Date, the order of the records will be in ascending manner i.e. the record with the oldest join date will be placed first in the Entity.
Click the [Save] button.

In the βCodeβ tab of the Traverse Action, create three (3) Condition actions with the following descriptions:
βIf count is reachedβ: This action checks if the count of the number of records to traverse is reached.
βIf startjoindate is on or after the Join_Dateβ: This action checks if the record being traversed has a Join_Date on or after the given join date in the Query string.
βIf skipCount reached startcountβ: This action checks if the number of records to be skipped while traversing the Entity from the first record has reached the value of the given startcount value. The records to be added during traverse will only be the records starting from the defined starting record.

To check if the count for the number of records to be traversed is reached, define the first βCondition actionβ. In the Condition action>Criteria tab, add a Criteria bar and define it to check if the count to traverse the records is completed.
Select Target Value as Variables>Response>defaultResponseJsonBody>getSize. It displays as βResponse.defaultResponseJsonBody.getSize()β.
Select Operator as "Greater than Equal to".
Select Value as Variables>count. It displays as βcountβ.

To define the Action if the criteria returns True, go to the Code tab>On True section. Add the Action: βBreak List Traverseβ. This Action defines that when the given count for the number of records required to be traversed is reached, the traverse loop should end and move to the next Action.

To check if the value in the startjoindate is on or after the Join_Date in the entity, in the second Condition action>Criteria tab, add a Criteria bar as follows:
Select Target Value as Variables>item>Join_Date. It displays as βitem.Join_Dateβ.
Select Operator as βis on or afterβ.
Select Value as Variables>StartJoinDate. It displays as βStartJoinDateβ.

To define the Action to be executed in case the criteria returns as False, In the Code tab>On False section, define the Action as βContinue List Traverseβ. This Action defines that if the join date given in the item is on or after the StartJoinDate, it should continue traversing the records until the required number of records is reached.

To check if the value in skipCount is equal to the value in startcount, in the third Condition action>Criteria tab, add a Criteria bar as follows:
Select Target Value as Variables>skipCount. It displays as βskipCountβ.
Select Operator as βis Equalβ.
Select Value as Variables>startcount. It displays as βstartcountβ. If it is equal to the startcount, it means that the number of records to be skipped before adding the traversed item to the list is completed. If it is not equal, the traverse will move to the next record.

To define the Actions to be executed based on the True or False value returned in the criteria, define the following details in the Code tab>On True section and Code tab>On False section.
On True: If the criteria is validated, the traversed item is added to the list in Response after conversion to Json.
Select Action as βAdd item to Listβ.
Select Target Value as Response>defaultResponseJsonBody. It displays as βResponse.defaultResponseJsonBodyβ.
Select Element as Variables>item>toJson(). It displays as βitem.toJson()β.

On False: If the criteria is not validated, the next item is traversed.
Select Action as βUpdate Variableβ.
Select Target Value as βskipCountβ.
Select Value as Variables>skipCount>next(). It displays as βskipCount.next()β.

Add the last Action in the Action box and define it as follows:
Select Action as βAPI Respondβ.
Select Response body as βdefaultResponseJsonBodyβ.

To save the API, click the [Save] button.

To publish the API, click the [Publish] button.

To define the API gateway, go to the Details tab and add the API gateway for this API as βUserName_Acc_GetCustomers.β

To save the API, click the [Save] button.
In the βDetailsβ tab and on the right-hand side, ensure the API is enabled.

Last updated
