{"id":15612,"date":"2024-02-02T02:48:58","date_gmt":"2024-02-02T10:48:58","guid":{"rendered":"https:\/\/www.pingcap.com\/?p=15612"},"modified":"2024-02-21T19:08:54","modified_gmt":"2024-02-22T03:08:54","slug":"building-a-data-driven-backend-with-data-service","status":"publish","type":"post","link":"https:\/\/www.pingcap.com\/ko\/blog\/building-a-data-driven-backend-with-data-service\/","title":{"rendered":"Mastering TiDB Cloud Data Service\u2013Your Ultimate Guide to Building a Data-Driven Backend"},"content":{"rendered":"<p>In our previous <a href=\"https:\/\/www.pingcap.com\/ko\/blog\/low-code-development-backend-apps-tidb-cloud-data-services\/\">post<\/a>, we introduced TiDB Cloud Data Service (TCDS),&nbsp;a fully managed, low-code backend-as-a-service solution. By seamlessly integrating your data with any application or service through HTTPS, TCDS enables developers to rapidly construct secure and scalable data-driven applications.&nbsp;<\/p>\n\n\n\n<p>This blog guides you through building REST endpoints with TCDS while constructing a <a href=\"https:\/\/task-tracker-two-ashen.vercel.app\/\">Task Tracker app.<\/a> Focused on backend development, the tutorial covers creating clusters and tables, inserting data, and crafting APIs. It also provides steps for integrating the React frontend hosted on <a href=\"https:\/\/vercel.com\">Vercel<\/a> with the backend. By the end of this tutorial, you will gain a comprehensive understanding of TCDS and acquire a fully functional backend solution, catering to both beginners and seasoned developers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Set_up_a_TiDB_Serverless_Cluster\"><\/span>Set up a TiDB Serverless Cluster<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Take the steps below to create a free TiDB Serverless cluster:&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/tidbcloud.com\/\">Sign in<\/a> to your TiDB Cloud. Register a <a href=\"https:\/\/tidbcloud.com\/free-trial?__hstc=86493575.ea015085c8a32000ad5a5e1466ed2d06.1697839011824.1703268569892.1704819917984.73&amp;__hssc=86493575.2.1704819917984&amp;__hsfp=323772859\">TiDB Cloud<\/a> account if you haven\u2019t got one.<\/li>\n\n\n\n<li>Follow the on-screen instructions to create a free Serverless Tier cluster within seconds.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Create_a_Data_Model\"><\/span>Create a Data Model<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to the overview page of your cluster, and enter the <strong>Chat2Query<\/strong> interface on the left.<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"514\" src=\"https:\/\/static.pingcap.com\/files\/2024\/01\/31190606\/image-6-1024x514.png\" alt=\"\" class=\"wp-image-15624\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/01\/31190606\/image-6-1024x514.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/01\/31190606\/image-6-300x151.png 300w, https:\/\/static.pingcap.com\/files\/2024\/01\/31190606\/image-6-768x385.png 768w, https:\/\/static.pingcap.com\/files\/2024\/01\/31190606\/image-6-1536x771.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/01\/31190606\/image-6-1440x723.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/01\/31190606\/image-6.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li>\n\n\n\n<li>Execute the SQL script provided below to create both the <code>tasktracker<\/code> database and the <code>todos<\/code> table within it. The script includes the insertion of sample data into the todos table. The Task Tracker application relies on this table to store individual tasks along with their related information, including title, description, status, and timestamps.<pre class=\"wp-block-code\"><code>\nCREATE DATABASE tasktracker;\n\nUSE tasktracker;\n\nCREATE TABLE todos (\n    `id`INT AUTO_INCREMENT NOT NULL PRIMARY KEY,\n    `task`VARCHAR(255) NOT NULL,\n    `description` TEXT,\n    `status`VARCHAR(50) NOT NULL,\n    `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,\n    `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;\n\nINSERT INTO todos (task, description, status) VALUES\n('Grocery Shopping', 'Buy groceries for the week including fruits, vegetables, and dairy products', 'Incomplete'),\n('Email Client', 'Send the revised project proposal to the client by EOD', 'Incomplete'),\n('Gym Session', 'Attend the 6 PM cardio fitness class at the local gym', 'Completed'),\n('Book Flight Tickets', 'Book tickets for the upcoming business trip to New York', 'Incomplete'),\n('Annual Health Checkup', 'Schedule an annual health checkup appointment with Dr. Smith', 'Completed');\n\nSELECT * FROM todos;\n<\/code><\/pre><\/li>\n\n\n\n<li>Select all the statements in the script and execute them by clicking on the <strong>Run<\/strong> button.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Create_a_Data_App_with_GitHub_Integration\"><\/span>Create a Data App with GitHub Integration<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>A Data App is a container that consists of a collection of objects like Endpoints. <a href=\"https:\/\/docs.pingcap.com\/tidbcloud\/data-service-manage-data-app\/\">Creating a Data App<\/a> is the initial phase for generating REST Endpoints. To create a Data App:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select <strong>Data Service <\/strong>from the left navigation menu, and click the <strong>Create Data App<\/strong> button.<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"467\" class=\"wp-image-15625\" src=\"https:\/\/static.pingcap.com\/files\/2024\/01\/31190711\/image-7-1024x467.png\" alt=\"\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/01\/31190711\/image-7-1024x467.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/01\/31190711\/image-7-300x137.png 300w, https:\/\/static.pingcap.com\/files\/2024\/01\/31190711\/image-7-768x350.png 768w, https:\/\/static.pingcap.com\/files\/2024\/01\/31190711\/image-7-1536x700.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/01\/31190711\/image-7-1440x656.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/01\/31190711\/image-7.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li>\n\n\n\n<li>Create and configure a standard data app as below:\n<ul class=\"wp-block-list\">\n<li>Name Your App: Enter &#8220;Todo App&#8221; in the <strong>Data App Name<\/strong> field.<\/li>\n\n\n\n<li>Link Data Sources: Select a cluster to associate with your app. For this example, choose &#8220;Cluster0&#8221;.<\/li>\n\n\n\n<li>Describe your App: In the &#8216;Description&#8217; field, write &#8220;This is a Task Tracking Application designed to efficiently manage tasks.&#8221; This brief description outlines the app\u2019s purpose.<\/li>\n\n\n\n<li>App Type: Leave the &#8216;Data App Type&#8217; field at its default setting.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Connect to GitHub <strong>(Optional)<\/strong>:<p>By integrating with GitHub, you can link a GitHub repository and a specific branch to your TCDS project. This allows for the automatic deployment of your Data App&#8217;s metadata and endpoints directly to the connected project. Here:<\/p><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"973\" class=\"wp-image-15626\" src=\"https:\/\/static.pingcap.com\/files\/2024\/01\/31224946\/image-8-1024x973.png\" alt=\"\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/01\/31224946\/image-8-1024x973.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/01\/31224946\/image-8-300x285.png 300w, https:\/\/static.pingcap.com\/files\/2024\/01\/31224946\/image-8-768x730.png 768w, https:\/\/static.pingcap.com\/files\/2024\/01\/31224946\/image-8-1536x1459.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/01\/31224946\/image-8-1440x1368.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/01\/31224946\/image-8.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<ol class=\"wp-block-list\">\n<li>Log into your GitHub account and create a todo-app for the task tracker project.<\/li>\n\n\n\n<li>In the Create Data App screen, follow the on-screen instructions to install Data Service as an application in your target repository.<\/li>\n\n\n\n<li>Click Authorize to authorize access to the task tracker application on GitHub.<\/li>\n\n\n\n<li>Specify the todo-app repository, branch, and directory as shown in the screenshot for storing configuration files. This enables TCDS to complete the backend API creation process.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Click the <strong>Create<\/strong> button to create your Data App.<\/li>\n<\/ol>\n\n\n\n<p>After creating the Data App, you&#8217;ll land on the Data App Home page. For first-time users, a <strong>Getting Started with Data Service<\/strong> tutorial is available. For this tutorial, we&#8217;ll manually walk through each step of creating the endpoints.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Create_Endpoints\"><\/span>Create Endpoints<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>This section guides you through the process of setting up four HTTPS endpoints (<code>POST, GET, PUT, DELETE<\/code>) that will enable Create, Read, Update, and Delete (CRUD) operations on the &#8216;todos&#8217; table. For more detailed information, refer to our <a href=\"https:\/\/docs.pingcap.com\/tidbcloud\/data-service-manage-endpoint#create-an-endpoint\">documentation<\/a> on creating new endpoints.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>POST<\/strong> \/todos<\/h3>\n\n\n\n<p>The <code><strong>POST \/todos<\/strong><\/code> endpoint allows you to create a new task to the todos table. Follow the steps below to create the endpoint:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Initiate the endpoint creation<\/strong>: On the left navigation bar of the Todo App, click the \u201c+\u201d symbol, and select the <strong>Create Endpoint<\/strong><strong> <\/strong>option.&nbsp;<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01015327\/image-1024x576.png\" alt=\"\" class=\"wp-image-15632\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01015327\/image-1024x576.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/02\/01015327\/image-300x169.png 300w, https:\/\/static.pingcap.com\/files\/2024\/02\/01015327\/image-768x432.png 768w, https:\/\/static.pingcap.com\/files\/2024\/02\/01015327\/image-1536x864.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/02\/01015327\/image-1440x810.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/02\/01015327\/image.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li>\n\n\n\n<li><strong>Configure the endpoint properties<\/strong>. Navigate to the <strong>Properties<\/strong> tab: <ul><li>Enter the Path as &#8220;<strong>\/todos<\/strong>&#8220;.&nbsp;Set the Request Method to <strong>POST<\/strong>.<\/li>The endpoint name is automatically generated from the path value entered by default.<\/ul>&nbsp;<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"504\" class=\"wp-image-15635\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01055653\/image-1-1024x504.png\" alt=\"\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01055653\/image-1-1024x504.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/02\/01055653\/image-1-300x148.png 300w, https:\/\/static.pingcap.com\/files\/2024\/02\/01055653\/image-1-768x378.png 768w, https:\/\/static.pingcap.com\/files\/2024\/02\/01055653\/image-1-1536x756.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/02\/01055653\/image-1-1440x709.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/02\/01055653\/image-1.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li>\n\n\n\n<li><strong>Configure SQL.<\/strong> The SQL configuration defines the business logic for the endpoint. For this endpoint, use the following SQL script to insert a new task record:&nbsp;<pre class=\"wp-block-code\"><code>\nUSE tasktracker;\nINSERT INTO `todos` (`task`,`description`,`status`) \nVALUES (${task},${description},${status});   \n<\/code><\/pre>Copy the SQL script into the natively provided SQL Editor window:<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"503\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01060907\/image-2-1024x503.png\" alt=\"\" class=\"wp-image-15636\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01060907\/image-2-1024x503.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/02\/01060907\/image-2-300x147.png 300w, https:\/\/static.pingcap.com\/files\/2024\/02\/01060907\/image-2-768x377.png 768w, https:\/\/static.pingcap.com\/files\/2024\/02\/01060907\/image-2-1536x755.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/02\/01060907\/image-2-1440x707.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/02\/01060907\/image-2.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li>\n\n\n\n<li><strong>Configure endpoint parameters.<\/strong> Parameters are variables that add flexibility to your endpoint. They are automatically generated. You can make adjustments to suit your specific needs. <br>Navigate to the Params tab to explore numerous configuration options: <ul> <li>Set <strong>Required<\/strong> to make a parameter mandatory.Align parameter types with your data model.<\/li>Optional settings include <strong>enum value<\/strong>,<strong> default value<\/strong>, \uadf8\ub9ac\uace0 <strong>description<\/strong>. For our todos endpoint, default parameter settings are typically adequate. Refer to our <a href=\"https:\/\/docs.pingcap.com\/tidbcloud\/data-service-manage-endpoint#configure-parameters\">documentation<\/a> for comprehensive details on configuring endpoint parameters.<\/ul> <figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"507\" class=\"wp-image-15650\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01190458\/image-3-1024x507.png\" alt=\"\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01190458\/image-3-1024x507.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/02\/01190458\/image-3-300x149.png 300w, https:\/\/static.pingcap.com\/files\/2024\/02\/01190458\/image-3-768x380.png 768w, https:\/\/static.pingcap.com\/files\/2024\/02\/01190458\/image-3-1536x760.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/02\/01190458\/image-3-1440x713.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/02\/01190458\/image-3.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure> <\/li>\n<\/ol>\n\n\n\n<p>Congratulations on successfully creating your first <strong><code>POST \/todos<\/code><\/strong> endpoint!&nbsp;Now, let&#8217;s create the remaining endpoints with a similar procedure.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>GET<\/strong> \/todos&nbsp;<\/h3>\n\n\n\n<p>The <code><strong>GET \/todos <\/strong><\/code>endpoint retrieves all tasks stored in our todos table. Follow these steps to effectively create and configure this endpoint:&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to the <strong>Properties<\/strong> tab to configure the endpoint properties:\n<ul class=\"wp-block-list\">\n<li>Enter the Path as <strong>\/todos<\/strong>.&nbsp;<\/li>\n\n\n\n<li>Set the Request Method to <strong>GET<\/strong><strong> <\/strong><em>(default) <\/em>.&nbsp;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Copy the following SQL script into the SQL Editor window:<pre class=\"wp-block-code\"><code>\nUSE tasktracker;\nSELECT * FROM `todos` ;<\/code><\/pre><\/li>\n<\/ol>\n\n\n\n<p><strong>Note<\/strong>: This end point does not have any parameters.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>PUT<\/strong> \/todos<\/h3>\n\n\n\n<p>The<strong> <code>PUT \/todos<\/code><\/strong> endpoint updates a task, especially when the task status changes.&nbsp;Follow these steps to effectively create and configure this endpoint:&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to the Properties tab to configure endpoint properties:\n<ul class=\"wp-block-list\">\n<li>Enter the Path as &#8220;<strong>\/todos<\/strong>&#8220;.&nbsp;<\/li>\n\n\n\n<li>Set the Request Method to <strong>PUT <\/strong>.&nbsp;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Copy the following SQL script into the <strong>SQL Editor<\/strong> window:<pre class=\"wp-block-code\"><code>\nUSE tasktracker;\nUPDATE `todos` SET \n`status` = IF(length(${status})&gt;0,${status},`status`),\n`task` = IF(length(${task})&gt;0,${task},`task`),\n`description` = IF(length(${description})&gt;0,${description},`description`)\n WHERE `id` = ${id} ;\n<\/code><\/pre><\/li>\n\n\n\n<li>The above SQL script uses the id of each task for identification and updates. Therefore, it&#8217;s essential to correctly configure the ID parameters as below:\n<ul class=\"wp-block-list\">\n<li>Set the id parameter as <strong>Required<\/strong>.<\/li>\n\n\n\n<li>Change its type from the default string to <strong>Number<\/strong>. This aligns with the id field&#8217;s type in the todos table.<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"396\" height=\"1024\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01220743\/image-4-396x1024.png\" alt=\"\" class=\"wp-image-15653\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01220743\/image-4-396x1024.png 396w, https:\/\/static.pingcap.com\/files\/2024\/02\/01220743\/image-4-116x300.png 116w, https:\/\/static.pingcap.com\/files\/2024\/02\/01220743\/image-4.png 458w\" sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/figure><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>DEL<\/strong> \/todos<\/h3>\n\n\n\n<p>The <code><strong>DELETE \/todos<\/strong><\/code> endpoint deletes tasks. Follow these steps to effectively create and configure this endpoint:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to the <strong>Properties<\/strong> tab to configure endpoint properties:\n<ul class=\"wp-block-list\">\n<li>Enter the Path as <strong>\/todos<\/strong>.&nbsp;<\/li>\n\n\n\n<li>Set the Request Method to <strong>DELETE<\/strong><strong> <\/strong>.&nbsp;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong> <\/strong>Copy the following SQL script into the <strong>SQL Edito<\/strong>r windo<strong>w<\/strong>:<pre class=\"wp-block-code\"><code>\nUSE tasktracker;\nDELETE FROM `todos` WHERE `id` = ${id} ;\n<\/code><\/pre><\/li>\n\n\n\n<li>Use the same setting as the PUT \/todos endpoint to configure endpoint parameters:\n<ul class=\"wp-block-list\">\n<li>Set the id parameter as <strong>Required<\/strong>.<\/li>\n\n\n\n<li>Change its type from the default string to <strong>Number<\/strong>. This aligns with the id field&#8217;s type in the todos table.<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"628\" height=\"584\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01222545\/image-5.png\" alt=\"\" class=\"wp-image-15654\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01222545\/image-5.png 628w, https:\/\/static.pingcap.com\/files\/2024\/02\/01222545\/image-5-300x279.png 300w\" sizes=\"auto, (max-width: 628px) 100vw, 628px\" \/><\/figure><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Testing_the_Endpoints\"><\/span>Testing the Endpoints<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Before we integrate the new endpoints into the actual application, it&#8217;s important to test them locally to ensure that they function as expected. Let&#8217;s use the <code><strong>POST \/todos<\/strong><\/code> endpoint as an example to guide you through the testing process:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the Endpoints list, select <strong>POST<\/strong> \/todos.<\/li>\n\n\n\n<li>Under the <strong>Params<\/strong> tab, navigate to the <strong>Test Values<\/strong> section, and configure the test values as below:\n<ul class=\"wp-block-list\">\n<li>Enter &#8220;Pay Internet Bill&#8221; for task.&nbsp;<\/li>\n\n\n\n<li>Input &#8220;May Internet Bill&#8221; for description.&nbsp;<\/li>\n\n\n\n<li>Enter &#8220;Incomplete&#8221; for status.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>After configuring the test value, click the <strong>Test<\/strong> button on the upper right corner of the screen.<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1012\" height=\"524\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01223223\/image-6.png\" alt=\"\" class=\"wp-image-15655\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01223223\/image-6.png 1012w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223223\/image-6-300x155.png 300w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223223\/image-6-768x398.png 768w\" sizes=\"auto, (max-width: 1012px) 100vw, 1012px\" \/><\/figure><\/li>\n<\/ol>\n\n\n\n<p>Upon executing the test, you should receive an HTTP response with a status code 200. This indicates a successful test of the <code><strong>POST \/todos<\/strong><\/code> endpoint. In the same way, validate the remaining endpoints to ensure the overall robustness and reliability of your application.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Deploy_the_Endpoints\"><\/span>Deploy the Endpoints<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>After thorough testing, it\u2019s time to deploy your endpoints to make them accessible to external clients. Here&#8217;s how you can deploy each endpoint:&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On the top right corner, click the <strong>Deploy<\/strong> button. A<strong> Review Changes<\/strong> dialog will pop up.<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"579\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01223539\/image-7-1024x579.png\" alt=\"\" class=\"wp-image-15656\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01223539\/image-7-1024x579.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223539\/image-7-300x170.png 300w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223539\/image-7-768x434.png 768w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223539\/image-7-1536x868.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223539\/image-7-1440x814.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223539\/image-7.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li>\n\n\n\n<li>Perform a final verification of your edits to ensure everything is configured correctly.<\/li>\n\n\n\n<li>Click the <strong>Deploy and Push to GitHub<\/strong> button. This makes the endpoint publicly available and pushes the changes to your GitHub repository.<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"480\" class=\"wp-image-15657\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01223843\/image-8-1024x480.png\" alt=\"\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01223843\/image-8-1024x480.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223843\/image-8-300x141.png 300w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223843\/image-8-768x360.png 768w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223843\/image-8-1440x676.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223843\/image-8.png 1509w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li>\n\n\n\n<li>Repeat the same deployment process for the remaining endpoints.<\/li>\n\n\n\n<li>Navigate to GitHub to verify if the <strong>backend\/http_endpoints<\/strong> folder, which you configured earlier, contains configuration files for the deployed endpoint.<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"201\" class=\"wp-image-15658\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01223952\/image-9-1024x201.png\" alt=\"\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01223952\/image-9-1024x201.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223952\/image-9-300x59.png 300w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223952\/image-9-768x151.png 768w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223952\/image-9-1536x301.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223952\/image-9-1440x283.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/02\/01223952\/image-9.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"apikey\"><span class=\"ez-toc-section\" id=\"Create_an_API_Key\"><\/span>Create an API Key<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Before exploring your new endpoints, you\u2019ll need to set up an API Key for secure authentication. Here\u2019s how to create one:<\/p>\n\n\n\n<ol class=\"wp-block-list\" id=\"api-key\">\n<li>Click on the Todo App to navigate to your Data App\u2019s home page.<\/li>\n\n\n\n<li>Inside the <strong>Settings<\/strong> menu, find the authentication section and click the <strong>Create API Key<\/strong> button.<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"358\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01224123\/image-10-1024x358.png\" alt=\"\" class=\"wp-image-15659\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01224123\/image-10-1024x358.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224123\/image-10-300x105.png 300w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224123\/image-10-768x268.png 768w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224123\/image-10-1536x537.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224123\/image-10-1440x503.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224123\/image-10.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li>\n\n\n\n<li>In the <strong>Create API Key<\/strong> popup window, specify the following:\n<ul class=\"wp-block-list\" id=\"api-key\">\n<li><strong>Description:<\/strong> Input \u201cTaskTrackerKey<strong><em>\u201d.<\/em><\/strong><\/li>\n\n\n\n<li><strong>Role:<\/strong> Set the role to \u201cReadAndWrite<em>\u201d<\/em>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click <strong>Next <\/strong>to generate a Public Key and a Private Key. Copy and securely store both keys in a safe and easily accessible place.<\/li>\n\n\n\n<li>Click <strong>Done<\/strong> to return to the <strong>Data App<\/strong> home screen.<\/li>\n<\/ol>\n\n\n\n<p>Your API Key is now successfully created and ready for use in authentication with your newly created endpoints.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Explore_Your_Endpoints\"><\/span><strong>Explore Your Endpoints<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>With your API Key in place, it\u2019s time to explore the functionality of your newly created endpoints. There are two primary methods for this:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>API Docs: <\/strong>Utilize the built-in Swagger documentation in TCDS.<\/li>\n\n\n\n<li><strong>Postman:<\/strong> Leverage the integrated Postman support within TCDS.<\/li>\n<\/ul>\n\n\n\n<p>For this tutorial, we will use API Documentation via&nbsp;Swagger UI. For details on Postman integration, refer to our <a href=\"https:\/\/docs.pingcap.com\/tidbcloud\/data-service-postman-integration\">documentation<\/a>.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On the Data App home page, click <strong>View API Docs.<\/strong> The API Docs window pops up and presents the API documentation generated through Swagger UI.<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"574\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01224615\/image-11-1024x574.png\" alt=\"\" class=\"wp-image-15660\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01224615\/image-11-1024x574.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224615\/image-11-300x168.png 300w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224615\/image-11-768x431.png 768w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224615\/image-11-1536x861.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224615\/image-11-1440x807.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224615\/image-11.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li>\n\n\n\n<li>In the top right corner, click the <strong>Authorize<\/strong> button to authorize the endpoint access. You will be using the API keys you obtained from the <a href=\"#api-key\">previous step<\/a>:\n<ul class=\"wp-block-list\">\n<li>Enter the Public Key you as the username.<\/li>\n\n\n\n<li>Enter the Private Key as the password. <\/li>\n\n\n\n<li><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"824\" class=\"wp-image-15662\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01224702\/image-13-1024x824.png\" alt=\"\" srcset=\"https:\/\/static.pingcap.com\/files\/2024\/02\/01224702\/image-13-1024x824.png 1024w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224702\/image-13-300x242.png 300w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224702\/image-13-768x618.png 768w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224702\/image-13-1536x1236.png 1536w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224702\/image-13-1440x1159.png 1440w, https:\/\/static.pingcap.com\/files\/2024\/02\/01224702\/image-13.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>This concludes the process of creating our backend application.&nbsp;<\/p>\n\n\n\n<p>You can now create, retrieve, update, and delete data in the todos table using the secure endpoints through the POST, GET, PUT, and DELETE methods.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Visualize_Task_Tracker_with_Vercel\"><\/span>Visualize Task Tracker with Vercel<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Congratulations! You&#8217;re just a few steps away from completing your task tracker app. To finalize the frontend presentation, we&#8217;ll deploy using Vercel. Detailed deployment steps are available in the <a href=\"https:\/\/github.com\/tidbcloud\/task-tracker?tab=readme-ov-file#visualizing-with-vercel\">GitHub Readme <\/a>\uadf8\ub9ac\uace0 <a href=\"http:\/\/vercel.com\/docs\">Vercel&#8217;s documentation<\/a>. <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Integrate Frontend Code.<\/strong> Follow <a href=\"https:\/\/github.com\/tidbcloud\/task-tracker?tab=readme-ov-file#integrate-frontend-code\">these steps<\/a> to copy the frontend code to your own repository.<\/li>\n\n\n\n<li><strong>Configure Vercel Project<\/strong>. After you&#8217;ve integrated the frontend code, it\u2019s time to <a href=\"https:\/\/github.com\/tidbcloud\/task-tracker?tab=readme-ov-file#configure-vercel-project\">configure your Vercel project<\/a>.<\/li>\n\n\n\n<li><strong>Deploy Vercel Project<\/strong>. With all configurations in place, you are now ready to <a href=\"https:\/\/github.com\/tidbcloud\/task-tracker?tab=readme-ov-file#deploy-vercel-project\">deploy your project<\/a> on Vercel. This final step will bring your task tracker app to life, making it accessible online.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>TCDS offers a user-friendly, scalable, and reliable platform for application building and management. As showcased in this guide, TCDS enables swift creation of CRUD endpoints, facilitating rapid application development and deployment.<\/p>\n\n\n\n<p>Ready to dive into the world of low-code development with TCDS? Getting started is easy and rewarding.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/tidbcloud.com\/free-trial?__hstc=86493575.ea015085c8a32000ad5a5e1466ed2d06.1697839011824.1703268569892.1704819917984.73&amp;__hssc=86493575.2.1704819917984&amp;__hsfp=323772859\">Sign up for TiDB Serverless<\/a>, follow our <a href=\"https:\/\/docs.pingcap.com\/tidbcloud\/data-service-overview\/\">guides<\/a>, and you&#8217;ll be on your way to mastering TCDS. Stay tuned for our upcoming how-to blogs, packed with guides and best practices to maximize your potential with TCDS.&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>In our previous post, we introduced TiDB Cloud Data Service (TCDS),&nbsp;a fully managed, low-code backend-as-a-service solution. By seamlessly integrating your data with any application or service through HTTPS, TCDS enables developers to rapidly construct secure and scalable data-driven applications.&nbsp; This blog guides you through building REST endpoints with TCDS while constructing a Task Tracker app. [&hellip;]<\/p>\n","protected":false},"author":216,"featured_media":15675,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ub_ctt_via":"","footnotes":""},"categories":[13],"tags":[163,237,249,208],"class_list":["post-15612","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-product","tag-app-developer","tag-backend-management","tag-data-service","tag-tidb-serverless"],"acf":[],"featured_image_src":"https:\/\/static.pingcap.com\/files\/2024\/02\/02023423\/tcds-backend-banner.jpeg","author_info":{"display_name":"Arun Vijayraghavan","author_link":"https:\/\/www.pingcap.com\/ko\/blog\/author\/arun-vijayraghavan\/"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building Data-driven Backend with TiDB Cloud Data Service<\/title>\n<meta name=\"description\" content=\"Learn how to leverage TiDB Cloud Data Service for low-code backend development and unleash its full potential.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/building-a-data-driven-backend-with-data-service\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building Data-driven Backend with TiDB Cloud Data Service\" \/>\n<meta property=\"og:description\" content=\"Learn how to leverage TiDB Cloud Data Service for low-code backend development and unleash its full potential.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pingcap.com\/ko\/blog\/building-a-data-driven-backend-with-data-service\/\" \/>\n<meta property=\"og:site_name\" content=\"TiDB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/pingcap2015\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-02T10:48:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-22T03:08:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/static.pingcap.com\/files\/2024\/02\/02023458\/tcds-backend-social.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1875\" \/>\n\t<meta property=\"og:image:height\" content=\"937\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Arun Vijayraghavan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/static.pingcap.com\/files\/2024\/02\/02023458\/tcds-backend-social.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:site\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arun Vijayraghavan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/\"},\"author\":{\"name\":\"Arun Vijayraghavan\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/8a9e54493a2a21018fd222e0a32b1ffd\"},\"headline\":\"Mastering TiDB Cloud Data Service\u2013Your Ultimate Guide to Building a Data-Driven Backend\",\"datePublished\":\"2024-02-02T10:48:58+00:00\",\"dateModified\":\"2024-02-22T03:08:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/\"},\"wordCount\":1828,\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.pingcap.com\/files\/2024\/02\/02023423\/tcds-backend-banner.jpeg\",\"keywords\":[\"App Developer\",\"Backend Management\",\"Data Service\",\"TiDB Serverless\"],\"articleSection\":[\"Product\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/\",\"url\":\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/\",\"name\":\"Building Data-driven Backend with TiDB Cloud Data Service\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.pingcap.com\/files\/2024\/02\/02023423\/tcds-backend-banner.jpeg\",\"datePublished\":\"2024-02-02T10:48:58+00:00\",\"dateModified\":\"2024-02-22T03:08:54+00:00\",\"description\":\"Learn how to leverage TiDB Cloud Data Service for low-code backend development and unleash its full potential.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#primaryimage\",\"url\":\"https:\/\/static.pingcap.com\/files\/2024\/02\/02023423\/tcds-backend-banner.jpeg\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2024\/02\/02023423\/tcds-backend-banner.jpeg\",\"width\":1875,\"height\":625},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.pingcap.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mastering TiDB Cloud Data Service\u2013Your Ultimate Guide to Building a Data-Driven Backend\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.pingcap.com\/#website\",\"url\":\"https:\/\/www.pingcap.com\/\",\"name\":\"TiDB\",\"description\":\"TiDB | SQL at Scale\",\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.pingcap.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.pingcap.com\/#organization\",\"name\":\"PingCAP\",\"url\":\"https:\/\/www.pingcap.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"width\":811,\"height\":232,\"caption\":\"PingCAP\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/pingcap2015\",\"https:\/\/x.com\/PingCAP\",\"https:\/\/linkedin.com\/company\/pingcap\",\"https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/8a9e54493a2a21018fd222e0a32b1ffd\",\"name\":\"Arun Vijayraghavan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"caption\":\"Arun Vijayraghavan\"},\"description\":\"TiDB Cloud Product Manager\",\"url\":\"https:\/\/www.pingcap.com\/ko\/blog\/author\/arun-vijayraghavan\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building Data-driven Backend with TiDB Cloud Data Service","description":"Learn how to leverage TiDB Cloud Data Service for low-code backend development and unleash its full potential.","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:\/\/www.pingcap.com\/ko\/blog\/building-a-data-driven-backend-with-data-service\/","og_locale":"ko_KR","og_type":"article","og_title":"Building Data-driven Backend with TiDB Cloud Data Service","og_description":"Learn how to leverage TiDB Cloud Data Service for low-code backend development and unleash its full potential.","og_url":"https:\/\/www.pingcap.com\/ko\/blog\/building-a-data-driven-backend-with-data-service\/","og_site_name":"TiDB","article_publisher":"https:\/\/facebook.com\/pingcap2015","article_published_time":"2024-02-02T10:48:58+00:00","article_modified_time":"2024-02-22T03:08:54+00:00","og_image":[{"width":1875,"height":937,"url":"https:\/\/static.pingcap.com\/files\/2024\/02\/02023458\/tcds-backend-social.jpeg","type":"image\/jpeg"}],"author":"Arun Vijayraghavan","twitter_card":"summary_large_image","twitter_image":"https:\/\/static.pingcap.com\/files\/2024\/02\/02023458\/tcds-backend-social.jpeg","twitter_creator":"@PingCAP","twitter_site":"@PingCAP","twitter_misc":{"Written by":"Arun Vijayraghavan","Est. reading time":"10\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#article","isPartOf":{"@id":"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/"},"author":{"name":"Arun Vijayraghavan","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/8a9e54493a2a21018fd222e0a32b1ffd"},"headline":"Mastering TiDB Cloud Data Service\u2013Your Ultimate Guide to Building a Data-Driven Backend","datePublished":"2024-02-02T10:48:58+00:00","dateModified":"2024-02-22T03:08:54+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/"},"wordCount":1828,"publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2024\/02\/02023423\/tcds-backend-banner.jpeg","keywords":["App Developer","Backend Management","Data Service","TiDB Serverless"],"articleSection":["Product"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/","url":"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/","name":"Building Data-driven Backend with TiDB Cloud Data Service","isPartOf":{"@id":"https:\/\/www.pingcap.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#primaryimage"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2024\/02\/02023423\/tcds-backend-banner.jpeg","datePublished":"2024-02-02T10:48:58+00:00","dateModified":"2024-02-22T03:08:54+00:00","description":"Learn how to leverage TiDB Cloud Data Service for low-code backend development and unleash its full potential.","breadcrumb":{"@id":"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#primaryimage","url":"https:\/\/static.pingcap.com\/files\/2024\/02\/02023423\/tcds-backend-banner.jpeg","contentUrl":"https:\/\/static.pingcap.com\/files\/2024\/02\/02023423\/tcds-backend-banner.jpeg","width":1875,"height":625},{"@type":"BreadcrumbList","@id":"https:\/\/www.pingcap.com\/blog\/building-a-data-driven-backend-with-data-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pingcap.com\/"},{"@type":"ListItem","position":2,"name":"Mastering TiDB Cloud Data Service\u2013Your Ultimate Guide to Building a Data-Driven Backend"}]},{"@type":"WebSite","@id":"https:\/\/www.pingcap.com\/#website","url":"https:\/\/www.pingcap.com\/","name":"\ud2f0DB","description":"TiDB | SQL at Scale","publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pingcap.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.pingcap.com\/#organization","name":"PingCAP","url":"https:\/\/www.pingcap.com\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/","url":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","width":811,"height":232,"caption":"PingCAP"},"image":{"@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/pingcap2015","https:\/\/x.com\/PingCAP","https:\/\/linkedin.com\/company\/pingcap","https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA"]},{"@type":"Person","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/8a9e54493a2a21018fd222e0a32b1ffd","name":"Arun Vijayraghavan","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/","url":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","contentUrl":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","caption":"Arun Vijayraghavan"},"description":"TiDB Cloud Product Manager","url":"https:\/\/www.pingcap.com\/ko\/blog\/author\/arun-vijayraghavan\/"}]}},"grav_blocks":false,"card_markup":"<a class=\"card-resource bg-white\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/building-a-data-driven-backend-with-data-service\/\"><div class=\"card-resource__image-container\"><img class=\"card-resource__image\" alt=\"tcds-backend-banner\" src=\"https:\/\/static.pingcap.com\/files\/2024\/02\/02023423\/tcds-backend-banner.jpeg\" loading=\"lazy\" width=1875 height=625 \/><\/div><div class=\"card-resource__content-container\"><div class=\"card-resource__content-head\"><div class=\"card-resource__category\">Product<\/div><\/div><h5 class=\"card-resource__title\">Mastering TiDB Cloud Data Service\u2013Your Ultimate Guide to Building a Data-Driven Backend<\/h5><\/div><\/a>","_links":{"self":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/15612","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/users\/216"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/comments?post=15612"}],"version-history":[{"count":12,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/15612\/revisions"}],"predecessor-version":[{"id":15892,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/15612\/revisions\/15892"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media\/15675"}],"wp:attachment":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media?parent=15612"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/categories?post=15612"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/tags?post=15612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}