{"id":6243,"date":"2020-05-07T18:04:17","date_gmt":"2020-05-07T18:04:17","guid":{"rendered":"https:\/\/max-drake.cc\/?p=6243"},"modified":"2020-05-15T16:37:13","modified_gmt":"2020-05-15T16:37:13","slug":"deploy-node-python-on-google-cloud-function","status":"publish","type":"post","link":"https:\/\/max-drake.cc\/?p=6243","title":{"rendered":"Deploy Node &#038; Python on Google Cloud function- a first attempt but NOT successful"},"content":{"rendered":"\n<p>I went to a python meetup where one of the presentors was running a Python app using a <strong><a rel=\"noreferrer noopener\" href=\"https:\/\/cloud.google.com\/functions\/\" target=\"_blank\">google cloud function<\/a><\/strong> (GCF). I had to have it explained to me what these were, the thicko in the room. It ends up as an online environment that will run your code. It is dormant until you trigger it (eg via a HTTP request) at which point it runs the code that you have on the function. Open source FaaS (<em>function as a service<\/em>) framework to run functions across multiple environments.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"531\" height=\"1024\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_09_58-Function-edit-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-531x1024.jpg\" alt=\"\" class=\"wp-image-6244 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_09_58-Function-edit-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-531x1024.jpg 531w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_09_58-Function-edit-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-156x300.jpg 156w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_09_58-Function-edit-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-50x96.jpg 50w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_09_58-Function-edit-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-26x50.jpg 26w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_09_58-Function-edit-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-100x193.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_09_58-Function-edit-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-52x100.jpg 52w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_09_58-Function-edit-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-332x640.jpg 332w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_09_58-Function-edit-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-399x768.jpg 399w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_09_58-Function-edit-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-560x1080.jpg 560w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_09_58-Function-edit-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform.jpg 631w\" data-sizes=\"(max-width: 531px) 100vw, 531px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 531px; --smush-placeholder-aspect-ratio: 531\/1024;\" \/><\/figure>\n\n\n\n<p>There are Node.JS and Python 3.7 functions that you can run, and they give you a URL to point to for the function. <\/p>\n\n\n\n<p>I was watching a node JS vid and saw the chap use GCF and I was keen to give it a crack. I&#8217;d set up a Google Cloud account (<em>there are free services but you have to give your credit card details for the account and billing<\/em>) when I was playing with the data collection app Collect, so used that account to setup a function. I got as far as getting the Hello World test to run on the app but when I tried to run the function from the given URL I got a <strong>403 Forbidden <\/strong>. <\/p>\n\n\n\n<p>You have to make sure, when setting up the function that you allow, under authorisation that you Allow Unorthenticated Invocations &#8211; for the testing. I may explore other alternatives later. If you do this then the URL will let you run the code. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"687\" height=\"1024\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-687x1024.jpg\" alt=\"\" class=\"wp-image-6245 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-687x1024.jpg 687w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-201x300.jpg 201w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-50x75.jpg 50w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-34x50.jpg 34w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-100x149.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-67x100.jpg 67w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-429x640.jpg 429w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-640x954.jpg 640w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-515x768.jpg 515w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform-724x1080.jpg 724w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-05-20_28_05-Create-function-\u2013-Cloud-Functions-\u2013-vast-\u2013-Google-Cloud-Platform.jpg 751w\" data-sizes=\"(max-width: 687px) 100vw, 687px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 687px; --smush-placeholder-aspect-ratio: 687\/1024;\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Project- Selfie App from code Train<\/h4>\n\n\n\n<p>After getting the basic function working with the &#8220;Hello World&#8221; test and also testing the URL link, which is a HTTPS link, so I can try and deploy the Selfie App that I deployed to Heroku previously. <\/p>\n\n\n\n<p>Why would I want to test that app? Well, one reason for the test is that the database is a file, once deployed on Heroku I couldn&#8217;t access that file or coy info from within the file. So my thinking is I&#8217;d test the GCF and see if I could access that file so be able to use that data elsewhere. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"674\" height=\"1024\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_42-Function-edit-\u2013-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-674x1024.jpg\" alt=\"\" class=\"wp-image-6246 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_42-Function-edit-\u2013-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-674x1024.jpg 674w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_42-Function-edit-\u2013-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-197x300.jpg 197w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_42-Function-edit-\u2013-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-50x76.jpg 50w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_42-Function-edit-\u2013-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-33x50.jpg 33w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_42-Function-edit-\u2013-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-100x152.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_42-Function-edit-\u2013-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-66x100.jpg 66w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_42-Function-edit-\u2013-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-421x640.jpg 421w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_42-Function-edit-\u2013-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-640x972.jpg 640w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_42-Function-edit-\u2013-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-505x768.jpg 505w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_42-Function-edit-\u2013-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform.jpg 693w\" data-sizes=\"(max-width: 674px) 100vw, 674px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 674px; --smush-placeholder-aspect-ratio: 674\/1024;\" \/><\/figure>\n\n\n\n<p>To upload the project I zipped up all the directory and used Zip upload (4 in image above) and it asks you for a cloud storage location. I had a cloud store from another project and used that (7). I poiinted to index.js (8) for the function I wanted to run.<\/p>\n\n\n\n<p>I then tried to run the function &amp; just got errors. It tells you you have an error and points to a log that isn&#8217;t created. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"753\" height=\"874\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_15-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform.jpg\" alt=\"\" class=\"wp-image-6247 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_15-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform.jpg 753w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_15-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-258x300.jpg 258w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_15-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-50x58.jpg 50w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_15-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-43x50.jpg 43w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_15-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-100x116.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_15-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-86x100.jpg 86w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_15-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-551x640.jpg 551w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_15-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-640x743.jpg 640w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_05_15-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-662x768.jpg 662w\" data-sizes=\"(max-width: 753px) 100vw, 753px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 753px; --smush-placeholder-aspect-ratio: 753\/874;\" \/><\/figure>\n\n\n\n<p>So a quick deployment did not happen. I think there are a couple of things that I need to check, in the Heroku deployment I had to point to  somewhere where Heroku would choose a port:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const port = process.env.PORT || 3000;\napp.listen(port, () => console.log(`listening at port ${port}`));<\/code><\/pre>\n\n\n\n<p>There is, in GCF a place where you can add environmental variables. <\/p>\n\n\n\n<p>Also, on the function edit image above the project is being stored as a ZIP file in the storage . So that will make it difficult to write to that db file if its zipped up. Also hard to access it as well. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"310\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-1024x310.jpg\" alt=\"\" class=\"wp-image-6248 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-1024x310.jpg 1024w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-300x91.jpg 300w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-768x232.jpg 768w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-1536x465.jpg 1536w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-2048x619.jpg 2048w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-50x15.jpg 50w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-165x50.jpg 165w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-100x30.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-331x100.jpg 331w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-640x194.jpg 640w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_30_16-Photos-1920x581.jpg 1920w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/310;\" \/><\/figure>\n\n\n\n<p>Another item that may be an issue is that the code was built up from Node version 12 on my PC, so the packages may not be the appropriate ones for the node version 10 in the app. <\/p>\n\n\n\n<p>I had thought of creating new files with the inline editor, but it doesn&#8217;t let you do that, as shown below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"799\" height=\"919\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_43_44-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform.jpg\" alt=\"\" class=\"wp-image-6249 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_43_44-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform.jpg 799w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_43_44-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-261x300.jpg 261w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_43_44-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-768x883.jpg 768w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_43_44-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-50x58.jpg 50w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_43_44-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-43x50.jpg 43w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_43_44-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-100x115.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_43_44-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-87x100.jpg 87w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_43_44-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-556x640.jpg 556w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_43_44-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-640x736.jpg 640w, https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-08-15_43_44-Cloud-Functions-\u2013-max-test1-\u2013-Google-Cloud-Platform-668x768.jpg 668w\" data-sizes=\"(max-width: 799px) 100vw, 799px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 799px; --smush-placeholder-aspect-ratio: 799\/919;\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">End comment<\/h3>\n\n\n\n<p>I was off on another project for a couple of days, so want to finish this article as I&#8217;ve broken my workflow. <\/p>\n\n\n\n<p>At first look this seems to be great, but doing a simple project that I have running on Heroku does not deploy that easily on GCF. The project was designed for Heroku so that is OK. It was just good to test similarities\/differences. <\/p>\n\n\n\n<p>The demo I saw was for a <strong>python piece of code to run on GCF <\/strong>and I do not think there is as much issue with version control as there may be for the Node js. <\/p>\n\n\n\n<p>At present I don&#8217;t want to get tangled with versioning in Node so I&#8217;ll put this aside for a later time. I can&#8217;t recollect that being an issue on Heroku. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>I went to a python meetup where one of the presentors was running a Python app using a google cloud function (GCF). I had to have it explained to me what these were, the thicko in the room. It ends up as an online environment that will run your code. It is dormant until you [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6230,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35,204,445,29],"tags":[],"class_list":["post-6243","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-api_json","category-automation","category-node_js","category-web"],"featured_image_src":"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-03-16_43_19-self-app-locate-\u00b7-Heroku-git-_-Heroku.jpg","featured_image_src_square":"https:\/\/max-drake.cc\/wp-content\/uploads\/2020\/05\/2020-05-03-16_43_19-self-app-locate-\u00b7-Heroku-git-_-Heroku.jpg","author_info":{"display_name":"Max Drake","author_link":"https:\/\/max-drake.cc\/?author=1"},"_links":{"self":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/posts\/6243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6243"}],"version-history":[{"count":0,"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/posts\/6243\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/media\/6230"}],"wp:attachment":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}