Using Google Cloud Functions & Cloud Run (Node.js & Python)
To use the CubeMaster API, you need an API key (TokenID) for authentication. Here's how to get started:
TokenID (e.g., abc123xyz789). Copy this key and store it securely, as it will be used in the HTTP headers of your API requests.Note: The TokenID will be used in the HTTP headers of your POST request for authentication.
A RESTful API (Representational State Transfer) is a way for applications to communicate over the internet using standard HTTP methods like GET, POST, PUT, and DELETE. Here’s a simple breakdown:
https://api.cubemaster.net/loads) where the API can be accessed.GET: Retrieve data.POST: Send data to create something (like building a load in this case).In this guide, we’ll use the POST method to send a JSON payload to https://api.cubemaster.net/loads to create a load plan.
Create a Google Cloud project to host your API integration.
Your customer’s orders or shipments data (e.g., cargo details) may be stored in a legacy database. Extract this data to build the API request.
SELECT name, length, width, height, weight, quantity FROM shipments WHERE order_id = '12345';
Cargoes structure. For example, if your database returns:
{
"Name": "ITEM001",
"Length": 72,
"Width": 30,
"Height": 75,
"Weight": 1002.45,
"Qty": 16,
"OrientationsAllowed": "OrientationsAll",
"TurnAllowedOnFloor": false,
"ColorKnownName": "Brown"
}
Cargoes array of the request JSON.Use Google Cloud Functions to make the POST request to the CubeMaster API.
const functions = require('@google-cloud/functions-framework');
const axios = require('axios');
functions.http('callCubeMasterAPI', async (req, res) => {
const apiKey = 'YOUR_API_KEY_HERE'; // Replace with your CubeMaster API key
const url = 'https://api.cubemaster.net/loads';
const requestData = {
"Title": "New Mixed Truck Load",
"Description": "Hello Web API",
"Cargoes": [
{
"Name": "ITEM001",
"Length": 72,
"Width": 30,
"Height": 75,
"Weight": 1002.45,
"OrientationsAllowed": "OrientationsAll",
"TurnAllowedOnFloor": false,
"Qty": 16,
"ColorKnownName": "Brown"
},
{
"Name": "ITEM002",
"Length": 27.31,
"Width": 37.5,
"Height": 76.67,
"Weight": 521.45,
"OrientationsAllowed": "OrientationsAll",
"TurnAllowedOnFloor": false,
"Qty": 28,
"ColorKnownName": "Aqua"
},
{
"Name": "SKU0005",
"Length": 27.31,
"Width": 9.5,
"Height": 75.67,
"Weight": 501.45,
"OrientationsAllowed": "OrientationsAll",
"TurnAllowedOnFloor": true,
"Qty": 24,
"ColorKnownName": "Beige"
},
{
"Name": "SKU0005",
"Qty": 23
},
{
"Name": "SKU0008",
"Qty": 34
}
],
"Containers": [
{
"VehicleType": "Dry",
"Name": "53FT-Intermodal",
"Length": 630,
"Width": 98,
"Height": 106,
"ColorKnownName": "Blue"
}
],
"Rules": {
"IsWeightLimited": true,
"IsSequenceUsed": false,
"FillDirection": "FrontToRear",
"CalculationType": "MixLoad"
}
};
try {
const response = await axios.post(url, requestData, {
headers: {
'TokenID': apiKey,
'Content-Type': 'application/json'
}
});
res.status(200).json(response.data);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
package.json tab, add the axios dependency:
{
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0",
"axios": "^1.6.0"
}
}
https://us-central1-yourproject.cloudfunctions.net/callCubeMasterAPI).Request JSON Example:
{
"Title": "New Mixed Truck Load",
"Description": "Hello Web API",
"Cargoes": [
{
"Name": "ITEM001",
"Length": 72,
"Width": 30,
"Height": 75,
"Weight": 1002.45,
"OrientationsAllowed": "OrientationsAll",
"TurnAllowedOnFloor": false,
"Qty": 16,
"ColorKnownName": "Brown"
}
],
"Containers": [
{
"VehicleType": "Dry",
"Name": "53FT-Intermodal",
"Length": 630,
"Width": 98,
"Height": 106,
"ColorKnownName": "Blue"
}
],
"Rules": {
"IsWeightLimited": true,
"IsSequenceUsed": false,
"FillDirection": "FrontToRear",
"CalculationType": "MixLoad"
}
}
After calling the API, process the response to extract useful information.
status field to confirm success ("succeed").calculationError (e.g., "InvalidCargoSize") and log it.loadSummary:
cargoesLoaded: Number of items loaded (e.g., 68).volumeUtilization: Container space used (e.g., 80.39%).weightLoaded: Total weight (e.g., 42674.60).filledContainers.graphics.images URLs (e.g., path3DDiagram) to display load diagrams.response.data using the @google-cloud/storage package.Response JSON Example:
{
"status": "succeed",
"message": "Engine created. 5 cargoes. 1 empty containers. Calculation started. Calculation ended. The load built successfully. The load saved to the cloud database.",
"calculationError": "InvalidCargoSize",
"document": {
"title": "New Mixed Truck Load",
"description": "Hello Web API",
"calculationTimeInSeconds": 0.6152743,
"createdBy": "CHANG@LOGEN.CO.KR",
"createdAt": "2023-02-11T01:17:01.7392204+09:00"
},
"loadSummary": {
"cargoesLoaded": 68,
"piecesLoaded": 68,
"volumeLoaded": 5261723.4606,
"weightLoaded": 42674.59999999999
},
"filledContainers": [
{
"name": "#1 53FT-Intermodal",
"loadSummary": {
"volumeUtilization": 80.39990374424703,
"weightLoaded": 42674.59999999999
},
"graphics": {
"images": {
"path3DDiagram": "https://api.cubemaster.net/runtimes/b28413ca_51ed_44c9_b92e_13147363fd61.PNG"
}
}
}
]
}
Use Google Cloud tools to monitor and debug your API integration.
response.data).