{"id":32849,"date":"2024-11-01T09:11:58","date_gmt":"2024-11-01T09:11:58","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=32849"},"modified":"2024-11-01T11:21:45","modified_gmt":"2024-11-01T11:21:45","slug":"react-course-diary-app-deployment","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/32849\/","title":{"rendered":"React Course: [Diary App] Deployment"},"content":{"rendered":"<p><body><\/p>\n<p>React is currently one of the most popular front-end libraries, offering a variety of features that make it easy to build complex user interfaces. In this tutorial, we will explore how to create a simple diary app using React and how to actually deploy it.<\/p>\n<h2>1. Project Overview<\/h2>\n<p>First, let&#8217;s take a look at the basic features of the diary app. This app will allow users to write, edit, and delete their diaries and view the diaries they have written in a list format. The basic UI elements are as follows:<\/p>\n<ul>\n<li>Diary list display<\/li>\n<li>Diary writing form<\/li>\n<li>Diary detail view<\/li>\n<li>Edit \/ delete diary functionality<\/li>\n<\/ul>\n<h2>2. Environment Setup<\/h2>\n<p>We will use Create React App to set up the React development environment. Open the terminal and enter the command below to create a new project:<\/p>\n<pre><code>npx create-react-app diary-app<\/code><\/pre>\n<p>After moving to the project directory, we will install the necessary packages:<\/p>\n<pre><code>cd diary-app<\/code><\/pre>\n<pre><code>npm install axios react-router-dom<\/code><\/pre>\n<p>Here, <code>axios<\/code> is a library for making API calls, and <code>react-router-dom<\/code> is a library for navigation between pages.<\/p>\n<h2>3. Basic Structure Design<\/h2>\n<p>The basic structure of the diary app is designed as follows:<\/p>\n<pre><code>\nsrc\/\n|-- components\/\n|   |-- DiaryList.js\n|   |-- DiaryForm.js\n|   |-- DiaryDetail.js\n|-- App.js\n|-- index.js\n<\/code><\/pre>\n<p>The roles of each component are as follows:<\/p>\n<ul>\n<li><strong>DiaryList.js<\/strong>: The component that shows the list of diaries<\/li>\n<li><strong>DiaryForm.js<\/strong>: The form for writing a new diary<\/li>\n<li><strong>DiaryDetail.js<\/strong>: The page that shows the details of the selected diary<\/li>\n<\/ul>\n<h2>4. Component Implementation<\/h2>\n<h3>4.1 DiaryList.js<\/h3>\n<p>Let&#8217;s implement the component that displays the list of diaries. It fetches data from the API and displays it in a list format:<\/p>\n<pre><code>\nimport React, { useEffect, useState } from 'react';\nimport axios from 'axios';\n\nconst DiaryList = () => {\n    const [diaries, setDiaries] = useState([]);\n\n    useEffect(() => {\n        const fetchDiaries = async () => {\n            const response = await axios.get('\/api\/diaries');\n            setDiaries(response.data);\n        };\n        fetchDiaries();\n    }, []);\n\n    return (\n        <div>\n            <h2>My Diary List<\/h2>\n            <ul>\n                {diaries.map((diary) => (\n                    <li key=\"{diary.id}\">{diary.title}<\/li>\n                ))}\n            <\/ul>\n        <\/div>\n    );\n};\n\nexport default DiaryList;\n<\/code><\/pre>\n<h3>4.2 DiaryForm.js<\/h3>\n<p>Let&#8217;s create a form for writing diaries:<\/p>\n<pre><code>\nimport React, { useState } from 'react';\nimport axios from 'axios';\n\nconst DiaryForm = () => {\n    const [title, setTitle] = useState('');\n    const [content, setContent] = useState('');\n\n    const handleSubmit = async (e) => {\n        e.preventDefault();\n        const newDiary = { title, content };\n        await axios.post('\/api\/diaries', newDiary);\n        \/\/ reset state\n        setTitle('');\n        setContent('');\n    };\n\n    return (\n        <form onsubmit=\"{handleSubmit}\">\n            <input onchange=\"{(e)\" placeholder=\"Title\" type=\"text\" value=\"{title}\"\/> setTitle(e.target.value)}\n            \/&gt;\n            <textarea onchange=\"{(e)\" placeholder=\"Content\" value=\"{content}\"> setContent(e.target.value)}\n            \/&gt;\n            <button type=\"submit\">Submit<\/button>\n        <\/textarea><\/form>\n    );\n};\n\nexport default DiaryForm;\n<\/code><\/pre>\n<h3>4.3 DiaryDetail.js<\/h3>\n<p>Let&#8217;s implement the diary detail view page:<\/p>\n<pre><code>\nimport React, { useEffect, useState } from 'react';\nimport axios from 'axios';\n\nconst DiaryDetail = ({ match }) => {\n    const [diary, setDiary] = useState({});\n\n    useEffect(() => {\n        const fetchDiary = async () => {\n            const response = await axios.get(`\/api\/diaries\/${match.params.id}`);\n            setDiary(response.data);\n        };\n        fetchDiary();\n    }, [match.params.id]);\n\n    return (\n        <div>\n            <h2>{diary.title}<\/h2>\n            <p>{diary.content}<\/p>\n        <\/div>\n    );\n};\n\nexport default DiaryDetail;\n<\/code><\/pre>\n<h2>5. Routing Setup<\/h2>\n<p>Now we will set up routing between pages using <code>react-router-dom<\/code>:<\/p>\n<pre><code>\nimport React from 'react';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\nimport DiaryList from '.\/components\/DiaryList';\nimport DiaryForm from '.\/components\/DiaryForm';\nimport DiaryDetail from '.\/components\/DiaryDetail';\n\nconst App = () => {\n    return (\n        <router>\n            <switch>\n                <route component=\"{DiaryList}\" exact=\"\" path=\"\/\"><\/route>\n                <route component=\"{DiaryForm}\" path=\"\/new\"><\/route>\n                <route component=\"{DiaryDetail}\" path=\"\/diary\/:id\"><\/route>\n            <\/switch>\n        <\/router>\n    );\n};\n\nexport default App;\n<\/code><\/pre>\n<h2>6. Backend Setup<\/h2>\n<p>Before deploying the diary app, we need to set up the backend. We will create a simple RESTful API using Express.js. Create a new directory with the command below and install Express:<\/p>\n<pre><code>mkdir diary-backend && cd diary-backend<\/code><\/pre>\n<pre><code>npm init -y<\/code><\/pre>\n<pre><code>npm install express body-parser cors<\/code><\/pre>\n<p>Now, create the <code>server.js<\/code> file and add the code below:<\/p>\n<pre><code>\nconst express = require('express');\nconst bodyParser = require('body-parser');\nconst cors = require('cors');\n\nconst app = express();\nconst PORT = 5000;\n\napp.use(cors());\napp.use(bodyParser.json());\n\nlet diaries = [];\n\napp.get('\/api\/diaries', (req, res) => {\n    res.json(diaries);\n});\n\napp.post('\/api\/diaries', (req, res) => {\n    const newDiary = { id: diaries.length + 1, ...req.body };\n    diaries.push(newDiary);\n    res.json(newDiary);\n});\n\napp.get('\/api\/diaries\/:id', (req, res) => {\n    const diary = diaries.find(d => d.id === parseInt(req.params.id));\n    res.json(diary);\n});\n\napp.listen(PORT, () => {\n    console.log(`Server is running on port ${PORT}.`);\n});\n<\/code><\/pre>\n<h2>7. Preparing for Deployment<\/h2>\n<p>Before deploying the app, we need to perform a few tasks. We will build the client and server to get them ready to run in a production environment.<\/p>\n<pre><code>npm run build<\/code><\/pre>\n<p>Now the client build has been generated in the <code>build\/<\/code> directory. We need to configure this directory&#8217;s contents to be served by the backend server.<\/p>\n<h2>8. Deployment<\/h2>\n<p>You can deploy the app using a cloud hosting service. For example, you can use Heroku.<\/p>\n<pre><code>heroku create diary-app<\/code><\/pre>\n<pre><code>git add .<\/code><\/pre>\n<pre><code>git commit -m \"Deploying diary app\"<\/code><\/pre>\n<pre><code>git push heroku master<\/code><\/pre>\n<h2>9. Conclusion<\/h2>\n<p>In this way, we have learned how to build and deploy a diary app using React and Express. Throughout this process, we were able to learn everything from the basic concepts of React to API integration and deployment. Now, try to build your own diary app!<\/p>\n<h2>10. Additional Resources<\/h2>\n<ul>\n<li><a href=\"https:\/\/reactjs.org\/docs\/getting-started.html\" target=\"_blank\" rel=\"noopener\">Official React Documentation<\/a><\/li>\n<li><a href=\"https:\/\/expressjs.com\/en\/starter\/installing.html\" target=\"_blank\" rel=\"noopener\">Official Express.js Documentation<\/a><\/li>\n<li><a href=\"https:\/\/axios-http.com\/docs\/intro\" target=\"_blank\" rel=\"noopener\">Axios Documentation<\/a><\/li>\n<li><a href=\"https:\/\/reactrouter.com\/web\/guides\/quick-start\" target=\"_blank\" rel=\"noopener\">React Router Documentation<\/a><\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>React is currently one of the most popular front-end libraries, offering a variety of features that make it easy to build complex user interfaces. In this tutorial, we will explore how to create a simple diary app using React and how to actually deploy it. 1. Project Overview First, let&#8217;s take a look at the &hellip; <a href=\"https:\/\/atmokpo.com\/w\/32849\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;React Course: [Diary App] Deployment&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[123],"tags":[],"class_list":["post-32849","post","type-post","status-publish","format-standard","hentry","category-react-basics-course"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>React Course: [Diary App] Deployment - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/32849\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React Course: [Diary App] Deployment - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"React is currently one of the most popular front-end libraries, offering a variety of features that make it easy to build complex user interfaces. In this tutorial, we will explore how to create a simple diary app using React and how to actually deploy it. 1. Project Overview First, let&#8217;s take a look at the &hellip; \ub354 \ubcf4\uae30 &quot;React Course: [Diary App] Deployment&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/32849\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:11:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:21:45+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/32849\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32849\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"React Course: [Diary App] Deployment\",\"datePublished\":\"2024-11-01T09:11:58+00:00\",\"dateModified\":\"2024-11-01T11:21:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32849\/\"},\"wordCount\":455,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"React basics course\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/32849\/\",\"url\":\"https:\/\/atmokpo.com\/w\/32849\/\",\"name\":\"React Course: [Diary App] Deployment - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:11:58+00:00\",\"dateModified\":\"2024-11-01T11:21:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32849\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/32849\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/32849\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React Course: [Diary App] Deployment\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"React Course: [Diary App] Deployment - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","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:\/\/atmokpo.com\/w\/32849\/","og_locale":"ko_KR","og_type":"article","og_title":"React Course: [Diary App] Deployment - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"React is currently one of the most popular front-end libraries, offering a variety of features that make it easy to build complex user interfaces. In this tutorial, we will explore how to create a simple diary app using React and how to actually deploy it. 1. Project Overview First, let&#8217;s take a look at the &hellip; \ub354 \ubcf4\uae30 \"React Course: [Diary App] Deployment\"","og_url":"https:\/\/atmokpo.com\/w\/32849\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:11:58+00:00","article_modified_time":"2024-11-01T11:21:45+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"4\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/32849\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/32849\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"React Course: [Diary App] Deployment","datePublished":"2024-11-01T09:11:58+00:00","dateModified":"2024-11-01T11:21:45+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/32849\/"},"wordCount":455,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["React basics course"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/32849\/","url":"https:\/\/atmokpo.com\/w\/32849\/","name":"React Course: [Diary App] Deployment - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:11:58+00:00","dateModified":"2024-11-01T11:21:45+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/32849\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/32849\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/32849\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"React Course: [Diary App] Deployment"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32849","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=32849"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32849\/revisions"}],"predecessor-version":[{"id":32850,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32849\/revisions\/32850"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=32849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=32849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=32849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}