{"id":1362,"date":"2024-09-29T21:40:24","date_gmt":"2024-09-29T14:40:24","guid":{"rendered":"https:\/\/fstack.io.vn\/?p=1362"},"modified":"2024-10-15T23:35:22","modified_gmt":"2024-10-15T16:35:22","slug":"data-fetching-trong-nextjs-ma-ban-nen-biet","status":"publish","type":"post","link":"https:\/\/fstack.io.vn\/blog\/data-fetching-trong-nextjs-ma-ban-nen-biet\/","title":{"rendered":"Data Fetching Trong NextJs M\u00e0 B\u1ea1n N\u00ean Bi\u1ebft"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"1362\" class=\"elementor elementor-1362\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0220b0b e-flex e-con-boxed e-con e-parent\" data-id=\"0220b0b\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-34b69ba elementor-widget elementor-widget-heading\" data-id=\"34b69ba\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Data Fetching and Caching<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-28be298 elementor-widget elementor-widget-text-editor\" data-id=\"28be298\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd h\u01b0\u1edbng d\u1eabn b\u1ea1n nh\u1eefng \u0111i\u1ec1u c\u01a1 b\u1ea3n v\u1ec1 vi\u1ec7c truy xu\u1ea5t v\u00e0 l\u01b0u tr\u1eef d\u1eef li\u1ec7u trong <a href=\"https:\/\/fstack.io.vn\/blog\/nextjs-la-gi-kien-thuc-co-ban-ve-nextjs-ban-nen-biet\/\">Next.js<\/a>, cung c\u1ea5p c\u00e1c v\u00ed d\u1ee5 th\u1ef1c t\u1ebf v\u00e0 c\u00e1c bi\u1ec7n ph\u00e1p th\u1ef1c h\u00e0nh t\u1ed1t nh\u1ea5t.<\/p><p>Sau \u0111\u00e2y l\u00e0 m\u1ed9t v\u00ed d\u1ee5 t\u1ed1i thi\u1ec3u v\u1ec1 vi\u1ec7c truy xu\u1ea5t d\u1eef li\u1ec7u trong Next.js:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-df87e43 elementor-widget elementor-widget-code-highlight\" data-id=\"df87e43\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>export default async function Page() {\n  let data = await fetch('https:\/\/api.vercel.app\/blog')\n  let posts = await data.json()\n  return (\n    <ul>\n      {posts.map((post) => (\n        <li key={post.id}>{post.title}<\/li>\n      ))}\n    <\/ul>\n  )\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc06943 elementor-widget elementor-widget-text-editor\" data-id=\"fc06943\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>V\u00ed d\u1ee5 n\u00e0y tr\u00ecnh b\u00e0y c\u00e1ch truy xu\u1ea5t d\u1eef li\u1ec7u c\u01a1 b\u1ea3n ph\u00eda m\u00e1y ch\u1ee7 b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng API truy xu\u1ea5t trong Th\u00e0nh ph\u1ea7n m\u00e1y ch\u1ee7 <a href=\"https:\/\/fstack.io.vn\/blog\/react-query-la-gi-tai-sao-nen-dung-react-query\/\">React<\/a> kh\u00f4ng \u0111\u1ed3ng b\u1ed9 (React <a href=\"https:\/\/fstack.io.vn\/blog\/rendering-server-component-trong-next-js-ma-ban-nen-biet\/\">Server Component<\/a>).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-073d234 elementor-widget elementor-widget-text-editor\" data-id=\"073d234\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>V\u00ed d\u1ee5 l\u00e0m l\u1ea5y d\u1eef li\u1ec7u tr\u00ean m\u00e1y ch\u1ee7 b\u1eb1ng <strong>Fetch<\/strong> API\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e06f420 elementor-widget elementor-widget-code-highlight\" data-id=\"e06f420\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>export default async function Page() {\n  let data = await fetch('https:\/\/api.vercel.app\/blog')\n  let posts = await data.json()\n  return (\n    <ul>\n      {posts.map((post) => (\n        <li key={post.id}>{post.title}<\/li>\n      ))}\n    <\/ul>\n  )\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-26e5926 elementor-widget elementor-widget-text-editor\" data-id=\"26e5926\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Th\u00e0nh ph\u1ea7n n\u00e0y s\u1ebd l\u1ea5y v\u00e0 hi\u1ec3n th\u1ecb danh s\u00e1ch c\u00e1c b\u00e0i \u0111\u0103ng tr\u00ean <a href=\"https:\/\/fstack.io.vn\/blog\/\">blog<\/a>. Ph\u1ea3n h\u1ed3i t\u1eeb l\u1ea5y s\u1ebd \u0111\u01b0\u1ee3c t\u1ef1 \u0111\u1ed9ng l\u01b0u v\u00e0o b\u1ed9 nh\u1edb \u0111\u1ec7m.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ff2aa6d elementor-widget elementor-widget-text-editor\" data-id=\"ff2aa6d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>N\u1ebfu b\u1ea1n kh\u00f4ng s\u1eed d\u1ee5ng b\u1ea5t k\u1ef3 <a href=\"https:\/\/nextjs.org\/docs\/app\/building-your-application\/rendering\/server-components#dynamic-rendering\" rel=\"nofollow noopener\" target=\"_blank\">h\u00e0m \u0111\u1ed9ng<\/a> n\u00e0o \u1edf b\u1ea5t k\u1ef3 n\u01a1i n\u00e0o kh\u00e1c trong tuy\u1ebfn \u0111\u01b0\u1eddng n\u00e0y, n\u00f3 s\u1ebd \u0111\u01b0\u1ee3c k\u1ebft xu\u1ea5t tr\u01b0\u1edbc trong qu\u00e1 tr\u00ecnh x\u00e2y d\u1ef1ng ti\u1ebfp theo th\u00e0nh m\u1ed9t trang t\u0129nh. Sau \u0111\u00f3, d\u1eef li\u1ec7u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng <a href=\"https:\/\/nextjs.org\/docs\/app\/building-your-application\/data-fetching\/incremental-static-regeneration\" rel=\"nofollow noopener\" target=\"_blank\">Incremental Static Regeneration.<\/a><\/p><p>N\u1ebfu b\u1ea1n kh\u00f4ng mu\u1ed1n l\u01b0u tr\u1eef ph\u1ea3n h\u1ed3i t\u1eeb qu\u00e1 tr\u00ecnh t\u00ecm n\u1ea1p, b\u1ea1n c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n nh\u01b0 sau:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bf08004 elementor-widget elementor-widget-code-highlight\" data-id=\"bf08004\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>let data = await fetch('https:\/\/api.vercel.app\/blog', { cache: 'no-store' })<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e3b61e6 elementor-widget elementor-widget-text-editor\" data-id=\"e3b61e6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>L\u1ea5y d\u1eef li\u1ec7u tr\u00ean m\u00e1y ch\u1ee7 b\u1eb1ng ORM ho\u1eb7c c\u01a1 s\u1edf d\u1eef li\u1ec7u<\/p><p>Th\u00e0nh ph\u1ea7n n\u00e0y s\u1ebd l\u1ea5y v\u00e0 hi\u1ec3n th\u1ecb danh s\u00e1ch c\u00e1c b\u00e0i \u0111\u0103ng tr\u00ean blog. Ph\u1ea3n h\u1ed3i t\u1eeb c\u01a1 s\u1edf d\u1eef li\u1ec7u kh\u00f4ng \u0111\u01b0\u1ee3c l\u01b0u v\u00e0o b\u1ed9 nh\u1edb \u0111\u1ec7m theo m\u1eb7c \u0111\u1ecbnh nh\u01b0ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c l\u01b0u v\u00e0o b\u1ed9 nh\u1edb \u0111\u1ec7m v\u1edbi\u00a0<a href=\"https:\/\/nextjs.org\/docs\/app\/building-your-application\/data-fetching\/fetching#caching-data-with-an-orm-or-database\" rel=\"nofollow noopener\" target=\"_blank\">c\u1ea5u h\u00ecnh b\u1ed5 sung<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dafc6ed elementor-widget elementor-widget-code-highlight\" data-id=\"dafc6ed\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>import { db, posts } from '@\/lib\/db'\n \nexport default async function Page() {\n  let allPosts = await db.select().from(posts)\n  return (\n    <ul>\n      {allPosts.map((post) => (\n        <li key={post.id}>{post.title}<\/li>\n      ))}\n    <\/ul>\n  )\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d19282e elementor-widget elementor-widget-text-editor\" data-id=\"d19282e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>N\u1ebfu b\u1ea1n kh\u00f4ng s\u1eed d\u1ee5ng b\u1ea5t k\u1ef3 h\u00e0m \u0111\u1ed9ng n\u00e0o \u1edf b\u1ea5t k\u1ef3 n\u01a1i n\u00e0o kh\u00e1c trong tuy\u1ebfn \u0111\u01b0\u1eddng n\u00e0y, n\u00f3 s\u1ebd \u0111\u01b0\u1ee3c k\u1ebft xu\u1ea5t tr\u01b0\u1edbc trong qu\u00e1 tr\u00ecnh x\u00e2y d\u1ef1ng ti\u1ebfp theo th\u00e0nh m\u1ed9t trang t\u0129nh. Sau \u0111\u00f3, d\u1eef li\u1ec7u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng Incremental Static Regeneration.<\/p><p>\u0110\u1ec3 ng\u0103n trang k\u1ebft xu\u1ea5t tr\u01b0\u1edbc, b\u1ea1n c\u00f3 th\u1ec3 th\u00eam n\u1ed9i dung sau v\u00e0o t\u1ec7p c\u1ee7a m\u00ecnh:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38f9b6c elementor-widget elementor-widget-code-highlight\" data-id=\"38f9b6c\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>export const dynamic = 'force-dynamic'<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e355b8b elementor-widget elementor-widget-text-editor\" data-id=\"e355b8b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Tuy nhi\u00ean, b\u1ea1n th\u01b0\u1eddng s\u1eed d\u1ee5ng c\u00e1c h\u00e0m nh\u01b0\u00a0<code>cookies()<\/code>,\u00a0<code>headers()<\/code> ho\u1eb7c \u0111\u1ecdc\u00a0<code>searchParams<\/code>\u00a0\u0111\u1ebfn t\u1eeb c\u00e1c thu\u1ed9c t\u00ednh trang, \u0111i\u1ec1u n\u00e0y s\u1ebd t\u1ef1 \u0111\u1ed9ng khi\u1ebfn trang hi\u1ec3n th\u1ecb \u0111\u1ed9ng. Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, b\u1ea1n\u00a0<em>kh\u00f4ng<\/em>\u00a0c\u1ea7n ph\u1ea3i s\u1eed d\u1ee5ng r\u00f5 r\u00e0ng\u00a0<code>force-dynamic<\/code>.<\/p><p>L\u1ea5y d\u1eef li\u1ec7u v\u1edbi Client Component<\/p><p>Ch\u00fang t\u00f4i khuy\u00ean b\u1ea1n n\u00ean th\u1eed l\u1ea5y d\u1eef li\u1ec7u \u1edf ph\u00eda m\u00e1y ch\u1ee7 tr\u01b0\u1edbc.<\/p><p>Tuy nhi\u00ean, v\u1eabn c\u00f3 nh\u1eefng tr\u01b0\u1eddng h\u1ee3p m\u00e0 vi\u1ec7c l\u1ea5y d\u1eef li\u1ec7u \u1edf ph\u00eda m\u00e1y kh\u00e1ch l\u00e0 h\u1ee3p l\u00fd. Trong c\u00e1c tr\u01b0\u1eddng h\u1ee3p n\u00e0y, b\u1ea1n c\u00f3 th\u1ec3 g\u1ecdi th\u1ee7 c\u00f4ng <code>fetch<\/code> trong <code>useEffect<\/code> (kh\u00f4ng khuy\u1ebfn kh\u00edch) ho\u1eb7c d\u1ef1a v\u00e0o c\u00e1c th\u01b0 vi\u1ec7n React ph\u1ed5 bi\u1ebfn trong c\u1ed9ng \u0111\u1ed3ng (ch\u1eb3ng h\u1ea1n nh\u01b0 <a href=\"https:\/\/swr.vercel.app\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">SWR<\/a> ho\u1eb7c <a href=\"https:\/\/tanstack.com\/query\/latest\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">React Query<\/a>) \u0111\u1ec3 truy xu\u1ea5t d\u1eef li\u1ec7u t\u1eeb m\u00e1y kh\u00e1ch.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bf0fa69 elementor-widget elementor-widget-code-highlight\" data-id=\"bf0fa69\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>'use client'\n \nimport { useState, useEffect } from 'react'\n \nexport function Posts() {\n  const [posts, setPosts] = useState(null)\n \n  useEffect(() => {\n    async function fetchPosts() {\n      let res = await fetch('https:\/\/api.vercel.app\/blog')\n      let data = await res.json()\n      setPosts(data)\n    }\n    fetchPosts()\n  }, [])\n \n  if (!posts) return <div>Loading...<\/div>\n \n  return (\n    <ul>\n      {posts.map((post) => (\n        <li key={post.id}>{post.title}<\/li>\n      ))}\n    <\/ul>\n  )\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4756aeb elementor-widget elementor-widget-text-editor\" data-id=\"4756aeb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><a href=\"https:\/\/nextjs.org\/docs\/app\/building-your-application\/data-fetching\/fetching\" rel=\"nofollow noopener\" target=\"_blank\"><strong>C\u1ee5 th\u1ec3 b\u1ea1n c\u00f3 th\u1ec3 \u0111\u1ecdc th\u00eam t\u1ea1i \u0111\u00e2y<\/strong><\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Data Fetching and Caching H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd h\u01b0\u1edbng d\u1eabn b\u1ea1n nh\u1eefng \u0111i\u1ec1u c\u01a1 b\u1ea3n v\u1ec1 vi\u1ec7c truy xu\u1ea5t v\u00e0 l\u01b0u tr\u1eef d\u1eef li\u1ec7u trong Next.js, cung c\u1ea5p c\u00e1c v\u00ed d\u1ee5 th\u1ef1c t\u1ebf v\u00e0 c\u00e1c bi\u1ec7n ph\u00e1p th\u1ef1c h\u00e0nh t\u1ed1t nh\u1ea5t. Sau \u0111\u00e2y l\u00e0 m\u1ed9t v\u00ed d\u1ee5 t\u1ed1i thi\u1ec3u v\u1ec1 vi\u1ec7c truy xu\u1ea5t d\u1eef li\u1ec7u [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1363,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25,1],"tags":[],"class_list":["post-1362","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-nextjs","category-cong-nghe"],"acf":[],"jetpack_featured_media_url":"https:\/\/fstack.io.vn\/blog\/wp-content\/uploads\/2024\/09\/nextjs-server-side-rendering-diagram.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fstack.io.vn\/blog\/wp-json\/wp\/v2\/posts\/1362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fstack.io.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fstack.io.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fstack.io.vn\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fstack.io.vn\/blog\/wp-json\/wp\/v2\/comments?post=1362"}],"version-history":[{"count":19,"href":"https:\/\/fstack.io.vn\/blog\/wp-json\/wp\/v2\/posts\/1362\/revisions"}],"predecessor-version":[{"id":2325,"href":"https:\/\/fstack.io.vn\/blog\/wp-json\/wp\/v2\/posts\/1362\/revisions\/2325"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fstack.io.vn\/blog\/wp-json\/wp\/v2\/media\/1363"}],"wp:attachment":[{"href":"https:\/\/fstack.io.vn\/blog\/wp-json\/wp\/v2\/media?parent=1362"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fstack.io.vn\/blog\/wp-json\/wp\/v2\/categories?post=1362"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fstack.io.vn\/blog\/wp-json\/wp\/v2\/tags?post=1362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}