{"id":623,"date":"2020-03-28T22:30:01","date_gmt":"2020-03-28T13:30:01","guid":{"rendered":"https:\/\/www.typea.info\/blog\/?p=623"},"modified":"2020-10-30T13:04:04","modified_gmt":"2020-10-30T04:04:04","slug":"firebase-hosting-firestore","status":"publish","type":"post","link":"https:\/\/www.typea.info\/blog\/index.php\/2020\/03\/28\/firebase-hosting-firestore\/","title":{"rendered":"Firebase Hosting \u3068 Firestore \u3092\u8a66\u3059"},"content":{"rendered":"<p><a href=\"https:\/\/www.amazon.co.jp\/%E5%AE%9F%E8%B7%B5Firestore-%E6%8A%80%E8%A1%93%E3%81%AE%E6%B3%89%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%88NextPublishing%EF%BC%89-%E7%A6%8F%E7%94%B0-%E9%9B%84%E8%B2%B4\/dp\/484437852X\/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=Firebase&amp;qid=1585400933&amp;sr=8-1&amp;linkCode=li2&amp;tag=typea09-22&amp;linkId=c019a556f7e3f3add3b0ca9a781aaac2\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"\/\/ws-fe.amazon-adsystem.com\/widgets\/q?_encoding=UTF8&amp;ASIN=484437852X&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=typea09-22\" border=\"0\" \/><\/a><img loading=\"lazy\" decoding=\"async\" style=\"margin: 0px !important; border: currentcolor !important; border-image: none !important !important;\" src=\"https:\/\/ir-jp.amazon-adsystem.com\/e\/ir?t=typea09-22&amp;l=li2&amp;o=9&amp;a=484437852X\" alt=\"\" width=\"1\" height=\"1\" border=\"0\" \/><\/p>\n<ul>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2020\/03\/17\/google-cloud-functinos\/\">Cloud Functions \u3092\u8a66\u3057\u3066\u307f\u308b<\/a><\/li>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2020\/03\/22\/cloud_functions_for_firebase_dev_env\/\">Cloud Functions for Firebase\u306e\u958b\u767a\u74b0\u5883\u3092\u3068\u3068\u306e\u3048\u308b<\/a><\/li>\n<\/ul>\n<p>Cloud Functions\u3092\u8a66\u3057\u306a\u304c\u3089\u3001Firebase Tools\u306e\u4f7f\u3044\u65b9\u306a\u3069\u308f\u304b\u3063\u3066\u304d\u305f\u306e\u3067\u3001\u5f15\u304d\u7d9a\u304d Hosting \u3068 Database\u3092\u8a66\u3059\u3002<\/p>\n<h2>1.Firebase Hosting<\/h2>\n<p><a href=\"https:\/\/firebase.google.com\/docs\/hosting\/\">https:\/\/firebase.google.com\/docs\/hosting\/<\/a><\/p>\n<blockquote><p>Firebase Hosting \u306f\u3001\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u3001\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u3068\u52d5\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u3001\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u5411\u3051\u306e\u9ad8\u901f\u3067\u5b89\u5168\u6027\u306e\u9ad8\u3044\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p><\/blockquote>\n<p><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2020\/03\/22\/cloud_functions_for_firebase_dev_env\/\">Firebase Functions\u3092\u8a66\u3059\u3057\u305f\u3068\u304d\u306b\u5c0e\u5165\u3057\u305f\u3001Firebase CLI\u3092\u4f7f\u7528\u3057\u3066<\/a>Firebase Hosting\u3082\u540c\u69d8\u306b\u5c0e\u5165\u3059\u308b\u3002<\/p>\n<h3>1.1 \u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c<\/h3>\n<p>\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067firebase init \u3067\u751f\u6210\u3055\u308c\u305f\u3001Hosting\u306e\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u3092\u5b9f\u884c\u3059\u308b\u3002<\/p>\n<pre class=\"prettyprint\">&gt; firebase serve --only hosting<\/pre>\n<p>\u7acb\u3061\u4e0a\u304c\u3063\u305f\u3002OK<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_hosting.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"firebase_hosting\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_hosting_thumb.png\" alt=\"firebase_hosting\" width=\"568\" height=\"439\" border=\"0\" \/><\/a><\/p>\n<h2>2.Firestore<\/h2>\n<blockquote><p>Cloud Firestore \u306f\u3001Firebase \u3068 Google Cloud Platform \u304b\u3089\u306e\u30e2\u30d0\u30a4\u30eb\u3001\u30a6\u30a7\u30d6\u3001\u30b5\u30fc\u30d0\u30fc\u958b\u767a\u306b\u5bfe\u5fdc\u3057\u305f\u3001\u67d4\u8edf\u3067\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3059\u3002Firebase Realtime Database \u3068\u540c\u69d8\u306b\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0 \u30ea\u30b9\u30ca\u30fc\u3092\u4ecb\u3057\u3066\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 \u30a2\u30d7\u30ea\u9593\u3067\u30c7\u30fc\u30bf\u3092\u540c\u671f\u3057\u3001\u30e2\u30d0\u30a4\u30eb\u3068\u30a6\u30a7\u30d6\u306e\u30aa\u30d5\u30e9\u30a4\u30f3 \u30b5\u30dd\u30fc\u30c8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u9045\u5ef6\u3084\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u63a5\u7d9a\u306b\u95a2\u4fc2\u306a\u304f\u6a5f\u80fd\u3059\u308b\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6 \u30a2\u30d7\u30ea\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002Cloud Firestore \u306f\u3001\u305d\u306e\u4ed6\u306e Firebase \u304a\u3088\u3073 Google Cloud Platform \u30d7\u30ed\u30c0\u30af\u30c8\uff08Cloud Functions \u306a\u3069\uff09\u3068\u306e\u30b7\u30fc\u30e0\u30ec\u30b9\u306a\u7d71\u5408\u3082\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p><\/blockquote>\n<h3>2.1 Firestore\u3092\u5229\u7528\u3059\u308b\u30a2\u30d7\u30ea<\/h3>\n<p><a href=\"https:\/\/firebase.google.com\/docs\/firestore\/quickstart?hl=ja\">https:\/\/firebase.google.com\/docs\/firestore\/quickstart?hl=ja<\/a><\/p>\n<p><a title=\"https:\/\/youtu.be\/2Vf1D-rUMwE\" href=\"https:\/\/youtu.be\/2Vf1D-rUMwE\">https:\/\/youtu.be\/2Vf1D-rUMwE<\/a><\/p>\n<p>\u4e0a\u8a18\u306e\u52d5\u753b\u3092\u898b\u306a\u304c\u3089\u3001Firestore\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u3001\u4e0a\u8a18Hosting\u306e\u30b5\u30f3\u30d7\u30ebindex.html\u3092\u7de8\u96c6\u3059\u308b\u3002<\/p>\n<p>\u4e0b\u8a18\u3001TODO\u306e\u90e8\u5206\u3002<\/p>\n<p>firebase init \u3067\u751f\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u5408\u308f\u305b\u3066\u3001\u4e0a\u8a18\u52d5\u753b\u306e\u30b3\u30fc\u30c9\u3092\u82e5\u5e72\u4fee\u6b63\u3002TODO\u30b3\u30e1\u30f3\u30c8\u306e\u500b\u6240\u3092\u5909\u66f4\u3002<\/p>\n<ul>\n<li>firestore \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u53c2\u7167<\/li>\n<li>HTML\u30d5\u30a9\u30fc\u30e0\u3092\u8ffd\u52a0\u3002firestore\u306b\u4fdd\u5b58\u3059\u308b\u5185\u5bb9\u306e\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u3068\u4fdd\u5b58\u3001\u8aad\u307f\u8fbc\u307f\u30dc\u30bf\u30f3<\/li>\n<li>\u4fdd\u5b58\u30dc\u30bf\u30f3\u62bc\u4e0b\u3067firestore\u306b\u66f8\u304d\u8fbc\u307f<\/li>\n<li>\u8aad\u307f\u8fbc\u307f\u30dc\u30bf\u30f3\u3067firestore\u304b\u3089\u8aad\u307f\u8fbc\u307f\u753b\u9762\u306b\u53cd\u6620<\/li>\n<\/ul>\n<pre class=\"prettyprint\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n  &lt;head&gt;\n    &lt;meta charset=\"utf-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n    &lt;title&gt;Welcome to Firebase Hosting&lt;\/title&gt;\n\n    &lt;!-- update the version number as needed --&gt;\n    &lt;script defer src=\"\/__\/firebase\/7.12.0\/firebase-app.js\"&gt;&lt;\/script&gt;\n    &lt;!-- include only the Firebase features as you need --&gt;\n    \/\/ TODO \u3053\u306e\u884c\u3092\u8ffd\u52a0\n    &lt;script defer src=\"\/__\/firebase\/7.12.0\/firebase-firestore.js\"&gt;&lt;\/script&gt;\n    \/\/ TODO \u3053\u306e\u884c\u3092\u8ffd\u52a0\n    &lt;script defer src=\"\/__\/firebase\/7.12.0\/firebase-auth.js\"&gt;&lt;\/script&gt;\n    &lt;script defer src=\"\/__\/firebase\/7.12.0\/firebase-database.js\"&gt;&lt;\/script&gt;\n    &lt;script defer src=\"\/__\/firebase\/7.12.0\/firebase-messaging.js\"&gt;&lt;\/script&gt;\n    &lt;script defer src=\"\/__\/firebase\/7.12.0\/firebase-storage.js\"&gt;&lt;\/script&gt;\n    &lt;!-- initialize the SDK after all desired features are loaded --&gt;\n    &lt;script defer src=\"\/__\/firebase\/init.js\"&gt;&lt;\/script&gt;\n\n    &lt;style media=\"screen\"&gt;\n      body { background: #ECEFF1; color: rgba(0,0,0,0.87); font-family: Roboto, Helvetica, Arial, sans-serif; margin: 0; padding: 0; }\n      #message { background: white; max-width: 360px; margin: 100px auto 16px; padding: 32px 24px; border-radius: 3px; }\n      #message h2 { color: #ffa100; font-weight: bold; font-size: 16px; margin: 0 0 8px; }\n      #message h1 { font-size: 22px; font-weight: 300; color: rgba(0,0,0,0.6); margin: 0 0 16px;}\n      #message p { line-height: 140%; margin: 16px 0 24px; font-size: 14px; }\n      #message a { display: block; text-align: center; background: #039be5; text-transform: uppercase; text-decoration: none; color: white; padding: 16px; border-radius: 4px; }\n      #message, #message a { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); }\n      #load { color: rgba(0,0,0,0.4); text-align: center; font-size: 13px; }\n      @media (max-width: 600px) {\n        body, #message { margin-top: 0; background: white; box-shadow: none; }\n        body { border-top: 16px solid #ffa100; }\n      }\n    &lt;\/style&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n    &lt;div id=\"message\"&gt;\n      &lt;h2&gt;Welcome&lt;\/h2&gt;\n      &lt;h1&gt;Firebase Hosting Setup Complete&lt;\/h1&gt;\n      &lt;p&gt;You're seeing this because you've successfully setup Firebase Hosting. Now it's time to go build something extraordinary!&lt;\/p&gt;\n      &lt;a target=\"_blank\" href=\"https:\/\/firebase.google.com\/docs\/hosting\/\"&gt;Open Hosting Documentation&lt;\/a&gt;\n    &lt;\/div&gt;\n    \n    &lt;!--TODO \u3053\u3053\u304b\u3089\u8ffd\u52a0 --&gt;\n    &lt;h1 id=\"hotDogStatus\"&gt;hot dog status&lt;\/h1&gt;\n    &lt;input type=\"textField\" id=\"latestHotDogStatus\" \/&gt;\n    &lt;button id=\"saveButton\"&gt;Save&lt;\/button&gt;\n    &lt;button id=\"loadButton\"&gt;Load&lt;\/button&gt;\n    &lt;!--TODO \u3053\u3053\u307e\u3067\u8ffd\u52a0 --&gt;\n    \n    &lt;p id=\"load\"&gt;Firebase SDK Loading\u2026&lt;\/p&gt;\n\n    &lt;script&gt;\n      document.addEventListener('DOMContentLoaded', function() {\n        \/\/ \/\/ \n        \/\/ \/\/ The Firebase SDK is initialized and available here!\n        \/\/\n        \/\/ firebase.auth().onAuthStateChanged(user =&gt; { });\n        \/\/ firebase.database().ref('\/path\/to\/ref').on('value', snapshot =&gt; { });\n        \/\/ firebase.messaging().requestPermission().then(() =&gt; { });\n        \/\/ firebase.storage().ref('\/path\/to\/ref').getDownloadURL().then(() =&gt; { });\n        \/\/\n        \/\/ \/\/ \n\n        try {\n          let app = firebase.app();\n          let features = ['auth', 'database', 'messaging', 'storage'].filter(feature =&gt; typeof app[feature] === 'function');\n          document.getElementById('load').innerHTML = `Firebase SDK loaded with ${features.join(', ')}`;\n\n          \/\/ TODO \u3053\u3053\u304b\u3089\u8ffd\u52a0\n          var firestore = firebase.firestore();\n          const docRef = firestore.doc(\"sample\/sandwichData\");\n          const outputHeader = document.querySelector(\"#hotDogStatus\");\n          const inputTextField = document.querySelector(\"#latestHotDogStatus\");\n          const saveButton = document.querySelector(\"#saveButton\");\n          const loadButton = document.querySelector(\"#loadButton\");\n          \n          saveButton.addEventListener(\n            \"click\",\n            function(){\n              const textToSave = inputTextField.value;\n              console.log(\"Save \" + textToSave + \" to Firebase\");\n              docRef.set({\n                hotDogStatus: textToSave\n              });\n            }\n          );\n\n          loadButton.addEventListener(\n            \"click\",\n            function(){\n              docRef.get().then(function(doc){\n                if(doc &amp;&amp; doc.exists) {\n                  const myData = doc.data();\n                  outputHeader.innerText = \"Hot Dog status: \" + myData.hotDogStatus;\n                }\n              }).catch(function(error) {\n                console.log(\"error\");\n              });\n            }\n          );\n          \/\/ TODO \u3053\u3053\u307e\u3067\u8ffd\u52a0\n        } catch (e) {\n          console.error(e);\n          document.getElementById('load').innerHTML = 'Error loading the Firebase SDK, check the console.';\n        }\n      });\n    &lt;\/script&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;\n<\/pre>\n<pre class=\"prettyprint\"><\/pre>\n<h3>2.2 Firestore\u30eb\u30fc\u30eb\u306e\u8a2d\u5b9a<\/h3>\n<p><a href=\"https:\/\/firebase.google.com\/docs\/firestore\/security\/get-started?hl=ja\">https:\/\/firebase.google.com\/docs\/firestore\/security\/get-started?hl=ja<\/a><\/p>\n<p>\u4e0a\u8a18\u3067Firestore\u3092\u4f7f\u7528\u3059\u308b\u30a2\u30d7\u30ea\u3092\u8a18\u8ff0\u3057\u305f\u304c\u3001Firebase\u306e\u30b3\u30f3\u30bd\u30fc\u30eb Database\uff0dCloud Firestore \uff0d \u30eb\u30fc\u30eb \u304b\u3089\u30a2\u30af\u30bb\u30b9\u30eb\u30fc\u30eb\u3092\u8a18\u8ff0\u3059\u308b\u3002<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_firestore_rules.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"firebase_firestore_rules\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_firestore_rules_thumb.png\" alt=\"firebase_firestore_rules\" width=\"813\" height=\"378\" border=\"0\" \/><\/a><\/p>\n<pre class=\"prettyprint\">service cloud.firestore {\n  match \/databases\/{database}\/documents {\n    match \/{document=**} {\n      allow read, write;\n    }\n  }\n}<\/pre>\n<h2>3.\u30c7\u30d7\u30ed\u30a4<\/h2>\n<p>\u3053\u3053\u307e\u3067\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3066\u52d5\u4f5c\u78ba\u8a8d<\/p>\n<pre class=\"prettyprint\">&gt; firebase deploy<\/pre>\n<h3>3.1\u78ba\u8a8d<\/h3>\n<p>\u3082\u3068\u3082\u3068\u306e\u30b5\u30f3\u30d7\u30eb\u306e\u4e0b\u306b\u3001\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u3068\u30dc\u30bf\u30f32\u3064\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u3002<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_hosting_deploy.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"firebase_hosting_deploy\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_hosting_deploy_thumb.png\" alt=\"firebase_hosting_deploy\" width=\"662\" height=\"549\" border=\"0\" \/><\/a><\/p>\n<p>\u9069\u5f53\u306a\u5024\u3092\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u306b\u5165\u529b\u3057\u3066\u3001Save\u30dc\u30bf\u30f3\u3092\u62bc\u4e0b<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_firestore_test.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"firebase_firestore_test\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_firestore_test_thumb.png\" alt=\"firebase_firestore_test\" width=\"500\" height=\"305\" border=\"0\" \/><\/a><\/p>\n<p>Firebase \u30b3\u30f3\u30bd\u30fc\u30eb Database \u30fc Cloud Firestore \u3067\u5185\u5bb9\u3092\u78ba\u8a8d\u3059\u308b\u3068\u3001\u5148\u307b\u3069\u767b\u9332\u3057\u305f\u5185\u5bb9\u304c\u4fdd\u5b58\u3055\u308c\u3066\u3044\u308b\u3002<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_firestore_saved.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"firebase_firestore_saved\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_firestore_saved_thumb.png\" alt=\"firebase_firestore_saved\" width=\"578\" height=\"363\" border=\"0\" \/><\/a><\/p>\n<p>Load\u30dc\u30bf\u30f3\u3067\u3001\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u8fbc\u307f\u3092\u884c\u3046\u3068\u3001\u30c7\u30fc\u30bf\u304c\u6b63\u3057\u304f\u8aad\u307f\u8fbc\u307e\u308c\u3001\u5185\u5bb9\u304c\u30e9\u30d9\u30eb\u306b\u8868\u793a\u3055\u308c\u305f\uff01OK<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_firestore_loaded.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"firebase_firestore_loaded\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/03\/firebase_firestore_loaded_thumb.png\" alt=\"firebase_firestore_loaded\" width=\"547\" height=\"197\" border=\"0\" \/><\/a><\/p>\n<p><a href=\"https:\/\/firebase.google.com\/docs\/rules\/unit-tests?hl=ja\">\u00a0<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cloud Functions \u3092\u8a66\u3057\u3066\u307f\u308b Cloud Functions for Firebase\u306e\u958b\u767a\u74b0\u5883\u3092\u3068\u3068\u306e\u3048\u308b Cloud Functions\u3092\u8a66\u3057\u306a\u304c\u3089\u3001Firebase Tools\u306e\u4f7f\u3044\u65b9\u306a\u3069\u308f\u304b\u3063\u3066\u304d [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","sitemap_hide":"","_veu_custom_css":"","veu_display_promotion_alert":"","vkexunit_cta_each_option":"","footnotes":""},"categories":[104,112],"tags":[],"class_list":["post-623","post","type-post","status-publish","format-standard","hentry","category-firebase","category-google-cloud-functions"],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/623","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=623"}],"version-history":[{"count":4,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/623\/revisions"}],"predecessor-version":[{"id":627,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/623\/revisions\/627"}],"wp:attachment":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=623"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=623"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=623"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}