{"id":52274,"date":"2025-11-21T00:00:00","date_gmt":"2025-11-21T08:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/"},"modified":"2026-02-05T13:30:53","modified_gmt":"2026-02-05T21:30:53","slug":"griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering","status":"publish","type":"post","link":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/","title":{"rendered":"GridDB Cloud v3.1 &#8211; How to Use the Native APIs with Azure&#8217;s VNET Peering"},"content":{"rendered":"<p>GridDB Cloud version 3.1 is now out and there are some new features we would like to showcase, namely the main two: the ability to connect to your Cloud instance via an Azure Virtual Network (vnet) peering connection, and then also for a new way to authenticate your Web API Requests with web tokens (bearer tokens).<\/p>\n<p>In this article, we will first go through setting up a vnet peering connection to your GridDB Cloud Pay as you go plan. Then, we will briefly cover the sample code attached with this article. And then lastly, we will go over the new authentication method for the Web API and an example of implementing it into your app\/workflow.<\/p>\n<h2>Vnet Peering<\/h2>\n<p>What exactly <em>is<\/em> a vnet peering connection? Here is the strict definition from the Azure docs: &#8220;Azure Virtual Network peering enables you to seamlessly connect two or more virtual networks in Azure, making them appear as one for connectivity purposes. This powerful feature allows you to create secure, high-performance connections between virtual networks while keeping all traffic on Microsoft&#8217;s private backbone infrastructure, eliminating the need for public internet routing.&#8221;<\/p>\n<p>In our case, we want to forge a secure connection between our virtual machine and the GridDB Cloud instance. With this in place, we can connect to GridDB Cloud via a normal java\/python source code and use it outside of the context of the Web API.<\/p>\n<h3>How to Set Up a Virtual Network Peering Connection<\/h3>\n<p>Before you start on the GridDB Cloud side, you will first need to create some resources on the Microsoft Azure side. On Azure, create a <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/virtual-network\/virtual-networks-overview\">Virtual Network<\/a> (VNet).<\/p>\n<h4>Azure Resources to Create Virtual Network Peering Connection<\/h4>\n<p><a href=\"\/wp-content\/uploads\/2025\/11\/create-virtual-network.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/11\/create-virtual-network.png\" alt=\"\" width=\"1630\" height=\"1394\" class=\"aligncenter size-full wp-image-54997\" srcset=\"\/wp-content\/uploads\/2025\/11\/create-virtual-network.png 1630w, \/wp-content\/uploads\/2025\/11\/create-virtual-network-300x257.png 300w, \/wp-content\/uploads\/2025\/11\/create-virtual-network-1024x876.png 1024w, \/wp-content\/uploads\/2025\/11\/create-virtual-network-768x657.png 768w, \/wp-content\/uploads\/2025\/11\/create-virtual-network-1536x1314.png 1536w, \/wp-content\/uploads\/2025\/11\/create-virtual-network-600x513.png 600w\" sizes=\"(max-width: 1630px) 100vw, 1630px\" \/><\/a><\/p>\n<p>You will also need to eventually set up a virtual machine that is on the same virtual network that you just created (which will be the one you link with GridDB Cloud below). With these two resources created, let&#8217;s move on to the GridDB Cloud side.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2025\/11\/create-virtual-macine-with-vnet.png\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/11\/create-virtual-macine-with-vnet.png\" alt=\"\" width=\"1992\" height=\"978\" class=\"aligncenter size-full wp-image-54998\" srcset=\"\/wp-content\/uploads\/2025\/11\/create-virtual-macine-with-vnet.png 1992w, \/wp-content\/uploads\/2025\/11\/create-virtual-macine-with-vnet-300x147.png 300w, \/wp-content\/uploads\/2025\/11\/create-virtual-macine-with-vnet-1024x503.png 1024w, \/wp-content\/uploads\/2025\/11\/create-virtual-macine-with-vnet-768x377.png 768w, \/wp-content\/uploads\/2025\/11\/create-virtual-macine-with-vnet-1536x754.png 1536w, \/wp-content\/uploads\/2025\/11\/create-virtual-macine-with-vnet-600x295.png 600w\" sizes=\"(max-width: 1992px) 100vw, 1992px\" \/><\/a>><\/p>\n<h4>GridDB Cloud &#8212; Forging Virtual Network Peering Connection<\/h4>\n<p>For this part of the process, you can read step-by-step instructions here in the official docs: <a href=\"https:\/\/www.toshiba-sol.co.jp\/pro\/griddbcloud\/docs-en\/v3_1\/cloud_quickstart_guide_html\/GridDB_Cloud_QuickStartGuide.html#connection-settings-for-vnet\">https:\/\/www.toshiba-sol.co.jp\/pro\/griddbcloud\/docs-en\/v3_1\/cloud_quickstart_guide_html\/GridDB_Cloud_QuickStartGuide.html#connection-settings-for-vnet<\/a>.<\/p>\n<p>From the network tab, click &#8216;Create peering connection&#8217; and you&#8217;ll see something like this pop up.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2025\/11\/create-peering-connection.png\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/11\/create-peering-connection.png\" alt=\"\" width=\"941\" height=\"792\" class=\"aligncenter size-full wp-image-55000\" srcset=\"\/wp-content\/uploads\/2025\/11\/create-peering-connection.png 941w, \/wp-content\/uploads\/2025\/11\/create-peering-connection-300x252.png 300w, \/wp-content\/uploads\/2025\/11\/create-peering-connection-768x646.png 768w, \/wp-content\/uploads\/2025\/11\/create-peering-connection-600x505.png 600w\" sizes=\"(max-width: 941px) 100vw, 941px\" \/><\/a><\/p>\n<p>Here&#8217;s a summary of the steps needed to forge the vnet peering connection:<\/p>\n<ul>\n<li>From the navigation menu, select Network Access and then click the CREATE PEERING CONNECTION button.<\/li>\n<li>When the cloud provider selection dialog appears, leave the settings as-is and click NEXT.<\/li>\n<li>On the VNet Settings screen, enter your VNet information:\n<ul>\n<li>Subscription ID<\/li>\n<li>Tenant ID<\/li>\n<li>Resource group name<\/li>\n<li>VNet name<\/li>\n<\/ul>\n<\/li>\n<li>Click NEXT<\/li>\n<li>Run the command provided in the dialog to establish the VNet peering. You can run this in either:\n<ul>\n<li>Azure Cloud Shell (recommended)<\/li>\n<li>Azure command-line interface (Azure CLI)<\/li>\n<\/ul>\n<\/li>\n<li>After running the command, go to the VNet peering list screen and verify that the Status of the connection is Connected.<\/li>\n<\/ul>\n<p>All of these steps are also plainly laid out in the GridDB Cloud UI &#8212; it should be a fairly simple process through and through.<\/p>\n<h3>Using the Virtual Network Peering Connection<\/h3>\n<p>Once your connection is forged, you should be able to connect to the GridDB Cloud instance using the notification provider address provided in your GridDB Cloud UI Dashboard.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2025\/11\/Provider.png\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/11\/Provider.png\" alt=\"\" width=\"1279\" height=\"371\" class=\"aligncenter size-full wp-image-54996\" srcset=\"\/wp-content\/uploads\/2025\/11\/Provider.png 1279w, \/wp-content\/uploads\/2025\/11\/Provider-300x87.png 300w, \/wp-content\/uploads\/2025\/11\/Provider-1024x297.png 1024w, \/wp-content\/uploads\/2025\/11\/Provider-768x223.png 768w, \/wp-content\/uploads\/2025\/11\/Provider-600x174.png 600w\" sizes=\"(max-width: 1279px) 100vw, 1279px\" \/><\/a><\/p>\n<p>If you want to do a very quick check before trying to run sample code, you can download the json file and use a third-party network tool like <code>telnet<\/code> to see if the machine is reachable. For example, download the json file, find the transaction address and port number, and then run telnet:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ wget [notifification-provider-url]\n$ cat mfcloud2102.json\n\n    {\n        \"cluster\": {\"address\":\"172.26.30.69\", \"port\":10010},\n        \"sync\": {\"address\":\"172.26.30.69\", \"port\":10020},\n        \"system\": {\"address\":\"172.26.30.69\", \"port\":10040},\n        \"transaction\": {\"address\":\"172.26.30.69\", \"port\":10001},\n        \"sql\": {\"address\":\"172.26.30.69\", \"port\":20001}\n    },\n\n$ telnet 172.26.30.69 10001<\/code><\/pre>\n<\/div>\n<p>If a connection is made, everything is working properly.<\/p>\n<h3>Sample Code<\/h3>\n<p>And now you can run the sample code included in this repo. There is Java code for both NoSQL and SQL interfaces as well as Python code. To run the java code, you need to install java and maven. The sample code will create tables and read those tables, but also expects for you to ingest a <code>csv<\/code> dataset from Kaggle: https:\/\/www.kaggle.com\/code\/chaozhuang\/iot-telemetry-sensor-data-analysis. We have included the <code>csv<\/code> file with this repo.<\/p>\n<h4>Ingesting IoT Telemetry Data<\/h4>\n<p>To ingest the dataset, first navigate to the <code>griddbCloudDataImport<\/code> dir inside of this repository. Within this dir, you will find that the <a href=\"https:\/\/www.toshiba-sol.co.jp\/pro\/griddbcloud\/docs-en\/v3_1\/cloud_data_import_guide_html\/GridDB_Cloud_Data_Import_Guide.html\">GridDB Cloud Import tool<\/a> is already installed. To use, open up the <code>.sh<\/code> file and edit lines 34-36 to include your credentials. Next, you must run the python file within this directory to clean up the data, namely changing the timestamp column to better adhere to the Web API&#8217;s standard, and also to separate out the csv into 3 distinct csv files, one for each device found in the dataset.<\/p>\n<p>Here is the line of code that will transform the ts col into something the GridDB Web API likes.<\/p>\n<p><code>df['ts'] = pd.to_datetime(df['ts'], unit='s').dt.strftime('%Y-%m-%dT%H:%M:%S.%f').str[:-3] + 'Z'<\/code><\/p>\n<p>You can make out from the format that it needs it to be like this: <code>\"2020-07-12T00:01:34.385Z\"<\/code> so that it can be ingested using the tool. The data which is supplied directly in the CSV before transformation looks like this: <code>\"1.5945120943859746E9\"<\/code>.<\/p>\n<p>Next, you must create the container within your GridDB Cloud. For this part, you can use the <a href=\"https:\/\/github.com\/Imisrael\/griddb-cloud-cli\">GridDB Cloud CLI tool<\/a> or simply use the GridDB Cloud UI. The schema we want to ingest is found within the <code>schema.json<\/code> file in the directory.<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">{\n    \"container\": \"device1\",\n    \"containerType\": \"TIME_SERIES\",\n    \"columnSet\": [\n        {\n            \"columnName\": \"ts\",\n            \"type\": \"timestamp\",\n            \"notNull\": true\n        },\n        {\n            \"columnName\": \"co\",\n            \"type\": \"double\",\n            \"notNull\": false\n        },\n        {\n            \"columnName\": \"humidity\",\n            \"type\": \"double\",\n            \"notNull\": false\n        },\n        {\n            \"columnName\": \"light\",\n            \"type\": \"bool\",\n            \"notNull\": false\n        },\n        {\n            \"columnName\": \"lpg\",\n            \"type\": \"double\",\n            \"notNull\": false\n        },\n        {\n            \"columnName\": \"motion\",\n            \"type\": \"bool\",\n            \"notNull\": false\n        },\n        {\n            \"columnName\": \"smoke\",\n            \"type\": \"double\",\n            \"notNull\": false\n        },\n        {\n            \"columnName\": \"temp\",\n            \"type\": \"double\",\n            \"notNull\": false\n        }\n    ],\n    \"rowKeySet\": [\n        \"ts\"\n    ]\n}<\/code><\/pre>\n<\/div>\n<p>To create the table with the tool, simply run: <code>$ griddb-cloud-cli create schema.json<\/code>. If using the UI, simply follow the UI prompts and follow the schema as shown here. Name the container <code>device1<\/code>.<\/p>\n<p>Once the container is ready to go, you can run the import tool: <code>$ .\/griddbCloudDataImport.sh device1 device1.csv<\/code>.<\/p>\n<p>You can also use the GridDB Cloud CLI Tool to import: <code>$ griddb-cloud-cli ingest device1.csv<\/code>.<\/p>\n<h4>Running The Sample Code (Java)<\/h4>\n<p>Now that we have <code>device1<\/code> defined and populated with data, let&#8217;s try running our sample code.<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">\n$ cd sample-code\/java\n$ export JAVA_HOME=\/Library\/Java\/JavaVirtualMachines\/jdk-23.jdk\/Contents\/Home\n$ mvn clean package<\/code><\/pre>\n<\/div>\n<p>And once the code is compiled, you need to set up your database parameters as your environment variables, and then from there, run the code:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">export GRIDDB_NOTIFICATION_PROVIDER=\"[notification-provider-address]\"\nexport GRIDDB_CLUSTER_NAME=\"[clustername]\"\nexport GRIDDB_USERNAME=\"[username]\"\nexport GRIDDB_PASSWORD=\"[password]\"\nexport GRIDDB_DATABASE=\"[database name]\" <\/code><\/pre>\n<\/div>\n<div class=\"clipboard\">\n<pre><code>$ java -jar target\/java-samples-1.0-SNAPSHOT-jar-with-dependencies.jar <\/code><\/pre>\n<\/div>\n<p>Running the sample code will run all of the java code, which includes connections to both JDBC and the NoSQL Interface. Here&#8217;s a quick breakdown of the Java Sample files included with this repo:<\/p>\n<ul>\n<li>The code in <code>App.java<\/code> simply runs the main function and all of the methods within the individual classes.<\/li>\n<li>The code in <code>Device.java<\/code> is the class schema for the dataset we ingest<\/li>\n<li>The code in <code>GridDB.java<\/code> is the NoSQL interface, connecting, creating tables, and querying from the dataset ingested above. The code also shows multiput, multiget, and various aggregation, time sampling etc examples.<\/li>\n<li><code>GridDBJdb.java<\/code> shows connecting to GridDB via the JDBC interface and also shows creating a table and querying a table. Also shows a GROUP BY RANGE SQL query.<\/li>\n<\/ul>\n<h4>Running The Sample Code (Python)<\/h4>\n<p>For the python code, you will need to first install the Python client. There are good instructions found in the docs page: <a href=\"https:\/\/docs.griddb.net\/gettingstarted\/python.html\">https:\/\/docs.griddb.net\/gettingstarted\/python.html<\/a>. The following instructions are for debian-based systems:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">sudo apt install default-jdk\nexport JAVA_HOME=\/usr\/lib\/jvm\/java-11-openjdk-amd64\ngit clone https:\/\/github.com\/griddb\/python_client.git\ncd python_client\/java\nmvn install\ncd ..\ncd python\npython3.12 -m pip install .\ncd ..<\/code><\/pre>\n<\/div>\n<p>And once installed, you will need to have the <code>.jar<\/code> files in your <code>$CLASSPATH<\/code>. To make it easy, we hve included the jars inside of the lib dir inside the python dir and a script to add the variables to your classpath:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ source .\/set-env.sh\n$ echo $CLASSPATH<\/code><\/pre>\n<\/div>\n<p>Once you&#8217;ve got everything done, you will need your creds set up in your environment variables, similar to the Java section above. And from there, you can run the code:<\/p>\n<div class=\"clipboard\">\n<pre><code>$ python3.12 main.py<\/code><\/pre>\n<\/div>\n<h2>Web API (Basic Authentication vs. Bearer Tokens)<\/h2>\n<p>The GridDB Web API is one of the methods of orchestrating your CRUD methods for your GridDB Cloud instance. Prior to this release, the method of authenticating your HTTP Requests to your GridDB Cloud was solely using something called <code>Basic Authentication<\/code>, which is the method of attaching your Username and Password to each web request paired with an IP filtering firewall. Though this method was enough to keep things secure up until now, the GridDB team&#8217;s release of utilizing Web Tokens greatly bolsters the safety in authentication strategy for GridDB Cloud.<\/p>\n<h3>The Dangers of Basic Authentication<\/h3>\n<p>Before I get into how to work the Bearer token into your work flow, I will showcase a simple example of why <code>Basic Authentication<\/code> can be problematic and lead to issues down the line. Sending your user\/pass credentials in every request leaves you extremely vulnerable to man-in-the-middle attacks. Not only that, but there&#8217;s issues with sometimes servers keeping logs of all headers incoming into it, meaning your user:pass combo could potentially be stored in plaintext somewhere on some server. If you share passwords at all, your entire online presense could be compromised.<\/p>\n<p>I asked an LLM to put together a quick demo of a server reading your user and password combo. The LLM produced a server and a client; the client sends its user:pass as part of its headers and the server is able to intercept those and decode and store the user:pass in plaintext! After that, we send another request with a bearer token, and though the server can still read and intercept that, bearer tokens will naturally expire and won&#8217;t potentially expose your password which may be used in other apps or anything else. Here is the output of the server:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">go run server.go\nSmarter attacker server listening on http:\/\/localhost:8080\n\n--- NEW REQUEST RECEIVED ---\nAuthorization Header: Basic TXlVc2VybmFtZTpNeVN1cGVyU2VjcmV0UGFzc3dvcmQxMjM=\n\n!!! \u00f0\u009f\u0098\u00b1 BASIC AUTH INTERCEPTED !!!\n!!! DECODED: MyUsername:MySuperSecretPassword123\n\n\n--- NEW REQUEST RECEIVED ---\nAuthorization Header: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJpc3JhZWwiLCJleHAiOjE3NjE3NjA3NjZ9.fake_signature_part<\/code><\/pre>\n<\/div>\n<p>I think this example is clear, sending your password in every request can cause major leakage of your secret data. This is bad!<\/p>\n<h3>Bearer Tokens<\/h3>\n<p>As shown in the example above, a Bearer token is attached to the requests&#8217;s header, similar to the Basic Auth method, but it&#8217;s labeled as such (<code>Bearer<\/code>) and the code itself is a string that must be decoded and decrypted by the server. And though, as explaiend above, you do face a similar threat of somebody stealing your bearer token and being able to impersonate you, this damage is mitigated because the bearer token expires within an hour and doesn&#8217;t potentially leak information outside of the scope of this database; not to mention, a bearer token can have granular scopes to make limit damage even further. You can read more about them here, as we wrote about saving these into GridDB here:<\/p>\n<ul>\n<li><a href=\"https:\/\/griddb.net\/en\/blog\/json-web-tokens\/\">Protect your GridDB REST API with JSON Web Tokens<\/a><\/li>\n<li><a href=\"https:\/\/griddb.net\/en\/blog\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/\">Protect your GridDB REST API with JSON Web Tokens Part II<\/a><\/li>\n<\/ul>\n<h4>How to use with GridDB Cloud<\/h4>\n<p>This assumes you are familiar with GridDB Cloud in general and how to use the Web API. If you are not, please read the quickstart: <a href=\"https:\/\/griddb.net\/en\/blog\/griddb-cloud-quick-start-guide\">GridDB Cloud Quickstart<\/a>.<\/p>\n<p>To be issued an auth token from GridDB Cloud, you must use the web api endpoint: https:\/\/[cloud-id]griddb.com\/griddb\/v2\/[cluster-name]\/authenticate. You make a POST Request to that address with the body being your web api credentials (username, password). If successful, you will receive a JSON response with the access token string (the string you attach with your requests), and an expiry date of that token. From that point on, you can use that bearer token in all of your requests until it expires. Here&#8217;s a CURL example:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">curl --location 'https:\/\/[cloud-id]griddb.com\/griddb\/v2\/[cluster-name]\/authenticate.' \n--header 'Content-Type: application\/json' \n--data '{\n  \"username\": \"israel\",\n  \"password\": \"israel\"\n}'\n\nRESPONSE\n\n{\n    \"accessToken\": \"eyJ0eXAiOiJBY2Nlc3MiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJTMDE2anA3WkppLWlzcmFlbCIsImV4cCI6MTc2MTc2MDk4MCwicHciOiJ1ZXNDZlBRaCtFZXdhYjhWeC95SXBnPT0ifQ.1WynKNIwRLM7pOVhAi9itQh35gUnxlzyi85Vhw3xM8E\",\n    \"expiredDate\": \"2025-10-29 18:03:00.653 +0000\"\n}<\/code><\/pre>\n<\/div>\n<h4>How to use the Bearer Token in an Application<\/h4>\n<p>Now that you know how to use a bearer token, let&#8217;s take a look at a hands-on example of incorporating it into your application. In this case, we updated the <a href=\"https:\/\/github.com\/Imisrael\/griddb-cloud-cli\">GridDB Cloud CLI Tool<\/a> to use bearer tokens instead of Basic Authentication. The workflow is as follows: the CLI tool will send each request with the bearer token, but before it does that, it first checks to see if a valid token exists. If it does, no problem, send the request with the proper header attached. If the token doesn&#8217;t exist or is expired, it will first use the user credentials (Saved in a config file), grab a new token, save the contents into a json file, and then now will be read and attached with each request until it expires again.<\/p>\n<p>First, we need to create a new type called TokenManager which will handle our tokens, including having methods for saving and loading the access string.<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-go\">type TokenManager struct {\n    AccessToken string        `json:\"accessToken\"`\n    Expiration  ExpireTime    `json:\"expiredDate\"`\n    mux         sync.RWMutex  `json:\"-\"`\n    buffer      time.Duration `json:\"-\"`\n}\n\n\/\/ Here create a new instance of our Token Manager\nfunc NewTokenManager() *TokenManager {\n    m := &TokenManager{\n        buffer: 5 * time.Minute,\n    }\n\n    if err := m.loadToken(); err != nil {\n        fmt.Println(\"No cached token found, will fetch a new one.\")\n    }\n\n    return m\n}<\/code><\/pre>\n<\/div>\n<p>This struct will save our access token string into the user&#8217;s config dir in their filesystem and then load it before every request:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-go\">func (m *TokenManager) saveToken() error {\n    configDir, err := os.UserConfigDir()\n    if err != nil {\n        return err\n    }\n\n    cliConfigDir := filepath.Join(configDir, \"griddb-cloud-cli\")\n    tokenPath := filepath.Join(cliConfigDir, \"token.json\")\n\n    data, err := json.Marshal(m)\n    if err != nil {\n        return err\n    }\n\n    return os.WriteFile(tokenPath, data, 0600)\n}\n\nfunc (m *TokenManager) loadToken() error {\n    configDir, err := os.UserConfigDir()\n    if err != nil {\n        return err\n    }\n\n    tokenPath := filepath.Join(configDir, \"griddb-cloud-cli\", \"token.json\")\n\n    data, err := os.ReadFile(tokenPath)\n    if err != nil {\n        return err\n    }\n\n    return json.Unmarshal(data, &m)\n}<\/code><\/pre>\n<\/div>\n<p>And here is the code for checking to see if the bearer token is expired:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-go\">func (m *TokenManager) getAndAddValidToken(req *http.Request) error {\n    m.mux.RLock()\n    needsRefresh := time.Now().UTC().After(m.Expiration.Add(-m.buffer))\n    m.mux.RUnlock()\n\n    if needsRefresh {\n        m.mux.Lock()\n        if time.Now().UTC().After(m.Expiration.Add(-m.buffer)) {\n            if err := m.getBearerToken(); err != nil {\n                m.mux.Unlock()\n                return err\n            }\n        }\n        m.mux.Unlock()\n    }\n\n    m.mux.RLock()\n    defer m.mux.RUnlock()\n\n    req.Header.Add(\"Authorization\", \"Bearer \"+m.AccessToken)\n    req.Header.Add(\"Content-Type\", \"application\/json\")\n    return nil\n}<\/code><\/pre>\n<\/div>\n<p>And finally, here&#8217;s the code for actually grabbing a new bearer token and attached it to each HTTP Request sent by the tool:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-go\">func (m *TokenManager) getBearerToken() error {\n    fmt.Println(\"--- REFRESHING TOKEN ---\")\n\n    if !(viper.IsSet(\"cloud_url\")) {\n        log.Fatal(\"Please provide a `cloud_url` in your config file! You can copy this directly from your Cloud dashboard\")\n    }\n\n    configCloudURL := viper.GetString(\"cloud_url\")\n    parsedURL, err := url.Parse(configCloudURL)\n    if err != nil {\n        fmt.Println(\"Error parsing URL:\", err)\n        return err\n    }\n    newPath := path.Dir(parsedURL.Path)\n    parsedURL.Path = newPath\n    authEndpoint, _ := parsedURL.Parse(\".\/authenticate\")\n\n    authURL := authEndpoint.String()\n    method := \"POST\"\n\n    user := viper.GetString(\"cloud_username\")\n    pass := viper.GetString(\"cloud_pass\")\n    payloadStr := fmt.Sprintf(`{\"username\": \"%s\", \"password\": \"%s\" }`, user, pass)\n    payload := strings.NewReader(payloadStr)\n\n    client := &http.Client{}\n    req, err := http.NewRequest(method, authURL, payload)\n    if err != nil {\n        log.Fatal(err)\n    }\n    defer req.Body.Close()\n\n    req.Header.Add(\"Content-Type\", \"application\/json\")\n    resp, err := client.Do(req)\n    if err != nil {\n        fmt.Println(\"error with client DO: \", err)\n    }\n    CheckForErrors(resp)\n\n    body, err := io.ReadAll(resp.Body)\n    if err != nil {\n        return err\n    }\n\n    if err := json.Unmarshal(body, &m); err != nil {\n        log.Fatalf(\"Error unmarshaling access token %s\", err)\n    }\n\n    if err := m.saveToken(); err != nil {\n        fmt.Println(\"Warning: Could not save token to cache:\", err)\n    }\n\n    return nil\n}\n\nfunc MakeNewRequest(method, endpoint string, body io.Reader) (req *http.Request, e error) {\n\n    if !(viper.IsSet(\"cloud_url\")) {\n        log.Fatal(\"Please provide a `cloud_url` in your config file! You can copy this directly from your Cloud dashboard\")\n    }\n\n    url := viper.GetString(\"cloud_url\")\n    req, err := http.NewRequest(method, url+endpoint, body)\n    if err != nil {\n        fmt.Println(\"error with request:\", err)\n        return req, err\n    }\n    tokenManager.getAndAddValidToken(req)\n    return req, nil\n}<\/code><\/pre>\n<\/div>\n<p>As usual, source code can be found in the GitHub page for the tool itself.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GridDB Cloud version 3.1 is now out and there are some new features we would like to showcase, namely the main two: the ability to connect to your Cloud instance via an Azure Virtual Network (vnet) peering connection, and then also for a new way to authenticate your Web API Requests with web tokens (bearer [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":52275,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[121],"tags":[],"class_list":["post-52274","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GridDB Cloud v3.1 - How to Use the Native APIs with Azure&#039;s VNET Peering | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"GridDB Cloud version 3.1 is now out and there are some new features we would like to showcase, namely the main two: the ability to connect to your Cloud\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GridDB Cloud v3.1 - How to Use the Native APIs with Azure&#039;s VNET Peering | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"GridDB Cloud version 3.1 is now out and there are some new features we would like to showcase, namely the main two: the ability to connect to your Cloud\" \/>\n<meta property=\"og:url\" content=\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/\" \/>\n<meta property=\"og:site_name\" content=\"GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/griddbcommunity\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-21T08:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-05T21:30:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_bndnszbndnszbndn-scaled-1-1024x536.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"536\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Israel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:site\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Israel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/\"},\"author\":{\"name\":\"Israel\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740\"},\"headline\":\"GridDB Cloud v3.1 &#8211; How to Use the Native APIs with Azure&#8217;s VNET Peering\",\"datePublished\":\"2025-11-21T08:00:00+00:00\",\"dateModified\":\"2026-02-05T21:30:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/\"},\"wordCount\":2071,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_bndnszbndnszbndn-scaled-1.png\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/\",\"name\":\"GridDB Cloud v3.1 - How to Use the Native APIs with Azure's VNET Peering | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_bndnszbndnszbndn-scaled-1.png\",\"datePublished\":\"2025-11-21T08:00:00+00:00\",\"dateModified\":\"2026-02-05T21:30:53+00:00\",\"description\":\"GridDB Cloud version 3.1 is now out and there are some new features we would like to showcase, namely the main two: the ability to connect to your Cloud\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_bndnszbndnszbndn-scaled-1.png\",\"contentUrl\":\"\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_bndnszbndnszbndn-scaled-1.png\",\"width\":2560,\"height\":1339},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/\",\"name\":\"GridDB: Open Source Time Series Database for IoT\",\"description\":\"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL\",\"publisher\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"contentUrl\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"width\":200,\"height\":83,\"caption\":\"Fixstars\"},\"image\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/griddbcommunity\/\",\"https:\/\/x.com\/GridDBCommunity\",\"https:\/\/www.linkedin.com\/company\/griddb-by-toshiba\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740\",\"name\":\"Israel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g\",\"caption\":\"Israel\"},\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/author\/israel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GridDB Cloud v3.1 - How to Use the Native APIs with Azure's VNET Peering | GridDB: Open Source Time Series Database for IoT","description":"GridDB Cloud version 3.1 is now out and there are some new features we would like to showcase, namely the main two: the ability to connect to your Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/","og_locale":"en_US","og_type":"article","og_title":"GridDB Cloud v3.1 - How to Use the Native APIs with Azure's VNET Peering | GridDB: Open Source Time Series Database for IoT","og_description":"GridDB Cloud version 3.1 is now out and there are some new features we would like to showcase, namely the main two: the ability to connect to your Cloud","og_url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2025-11-21T08:00:00+00:00","article_modified_time":"2026-02-05T21:30:53+00:00","og_image":[{"width":1024,"height":536,"url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_bndnszbndnszbndn-scaled-1-1024x536.png","type":"image\/png"}],"author":"Israel","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"Written by":"Israel","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#article","isPartOf":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/"},"author":{"name":"Israel","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740"},"headline":"GridDB Cloud v3.1 &#8211; How to Use the Native APIs with Azure&#8217;s VNET Peering","datePublished":"2025-11-21T08:00:00+00:00","dateModified":"2026-02-05T21:30:53+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/"},"wordCount":2071,"commentCount":0,"publisher":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_bndnszbndnszbndn-scaled-1.png","articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/","name":"GridDB Cloud v3.1 - How to Use the Native APIs with Azure's VNET Peering | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#primaryimage"},"image":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_bndnszbndnszbndn-scaled-1.png","datePublished":"2025-11-21T08:00:00+00:00","dateModified":"2026-02-05T21:30:53+00:00","description":"GridDB Cloud version 3.1 is now out and there are some new features we would like to showcase, namely the main two: the ability to connect to your Cloud","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-cloud-v3-1-how-to-use-the-native-apis-with-azures-vnet-peering\/#primaryimage","url":"\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_bndnszbndnszbndn-scaled-1.png","contentUrl":"\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_bndnszbndnszbndn-scaled-1.png","width":2560,"height":1339},{"@type":"WebSite","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/","name":"GridDB: Open Source Time Series Database for IoT","description":"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL","publisher":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization","name":"Fixstars","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/","url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","contentUrl":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","width":200,"height":83,"caption":"Fixstars"},"image":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/griddbcommunity\/","https:\/\/x.com\/GridDBCommunity","https:\/\/www.linkedin.com\/company\/griddb-by-toshiba"]},{"@type":"Person","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740","name":"Israel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g","caption":"Israel"},"url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/author\/israel\/"}]}},"_links":{"self":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/posts\/52274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/comments?post=52274"}],"version-history":[{"count":2,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/posts\/52274\/revisions"}],"predecessor-version":[{"id":55001,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/posts\/52274\/revisions\/55001"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/media\/52275"}],"wp:attachment":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/media?parent=52274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/categories?post=52274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/tags?post=52274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}