{"id":1436,"date":"2016-04-14T15:32:57","date_gmt":"2016-04-14T19:32:57","guid":{"rendered":"http:\/\/codinggorilla.domemtech.com\/?p=1436"},"modified":"2016-06-08T11:30:57","modified_gmt":"2016-06-08T15:30:57","slug":"mongo-restheart-and-dokku","status":"publish","type":"post","link":"http:\/\/165.227.223.229\/index.php\/2016\/04\/14\/mongo-restheart-and-dokku\/","title":{"rendered":"Mongo, Restheart, and Dokku"},"content":{"rendered":"<p><a href=\"https:\/\/www.mongodb.org\" target=\"_blank\">Mongo<\/a> is a popular <a href=\"https:\/\/en.wikipedia.org\/wiki\/NoSQL\" target=\"_blank\">NoSQL<\/a> database nowadays. It has <a href=\"http:\/\/www.infoworld.com\/article\/2863018\/nosql\/watch-out-for-nosql-washing-in-your-rdbms.html\">several advantages compared to relational databases<\/a>\u00c2\u00a0(schema-less, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Key-value_database\">key-value store<\/a>, scalable, distributed, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Eventual_consistency\">propagated consistency<\/a>) but the main advantage, IMHO, is that JSON is the <em>lingua franca<\/em> for the data structures it stores and the queries you\u00c2\u00a0use. JSON is a nice, simple data structure representation. It can be easily passed between the database and the application; and it can be converted to\/from a string and an object in the native language you use. Mongo has many native-language APIs available for interfacing your application with the database, so you should be able to connect your application with Mongo.<\/p>\n<p>Unfortunately, Xamarin Forms applications, written in C#, are <a href=\"http:\/\/blog.alxandr.me\/2014\/07\/20\/the-problems-with-portable-class-libraries-and-the-road-to-solving-them\/\" target=\"_blank\">Portable Class Library (PCL)<\/a>\u00c2\u00a0applications, and the <a href=\"https:\/\/docs.mongodb.org\/ecosystem\/drivers\/csharp\/\" target=\"_blank\">C# API for Mongo<\/a>\u00c2\u00a0can&#8217;t work.\u00c2\u00a0Unfortunately, <em>PCL apps and libraries can only link with other PCL libraries that have\u00c2\u00a0the same or additional target platforms<\/em>. So, a PCL app that is targeting Windows, Android, and iOS cannot link with a library that only targets Windows, or only Android, or only iOS.<\/p>\n<p>However, all is not lost.\u00c2\u00a0<a href=\"http:\/\/restheart.org\/\" target=\"_blank\">Restheart<\/a> is an open source REST API server for Mongo databases. You can easily write a layer to encapsulate the calls that you need to access your Mongo database. There aren&#8217;t many functions you have to write beyond the usual <a href=\"https:\/\/en.wikipedia.org\/wiki\/Create,_read,_update_and_delete\" target=\"_blank\">CRUD<\/a>, and the signatures for the method are just strings.<\/p>\n<h3>Setup<\/h3>\n<p>The <a href=\"https:\/\/docs.mongodb.org\/manual\/installation\/\" target=\"_blank\">installations instructions<\/a> are on the Mongo.org website.\u00c2\u00a0<a href=\"https:\/\/www.mongodb.org\/downloads#production\" target=\"_blank\">Get the latest production<\/a> version of Mongo. Then, execute the installation file. After it completes, create a directory for the database.<\/p>\n<pre>md data\/db<\/pre>\n<p>To run Mongo, type<\/p>\n<pre>mongod --dbpath data\/db<\/pre>\n<p>To set up Restheart, either copy the latest from <a href=\"https:\/\/github.com\/SoftInstigate\/RESTHeart\/releases\" target=\"_blank\">Restheart.org<\/a>, or clone the <a href=\"https:\/\/github.com\/SoftInstigate\/RESTHeart\" target=\"_blank\">git repository for Restheart<\/a>. If you are going to build it from scratch, you will need Maven, Java, and various other tools. Note, I highly recommend you build Restheart\u00c2\u00a0from git because the documentation is quite poor, and the only really good way to understand the server is to debug it.<\/p>\n<p>To run Restheart, type\u00c2\u00a0<em>java -jar .\/restheart\/target\/<\/em>restheart<em>.jar<\/em>, or the appropriate jar file.<em>\u00c2\u00a0<\/em>You can specify a configuration file for Restheart\u00c2\u00a0as a parameter when executing the jar.<\/p>\n<h3>CRUD<\/h3>\n<p>In a SQL database, data are stored in <a href=\"https:\/\/en.wikipedia.org\/wiki\/Table_(database)\" target=\"_blank\">tables<\/a>. In Mongo, data are stored in a <a href=\"https:\/\/docs.mongodb.org\/manual\/reference\/glossary\/#term-collection\" target=\"_blank\">collection<\/a>. As with SQL, Mongo has <a href=\"https:\/\/en.wikipedia.org\/wiki\/Create,_read,_update_and_delete\" target=\"_blank\">CRUD<\/a> statements for access to the database.\u00c2\u00a0The equivalent in Mongo of a row in a SQL table is a <a href=\"https:\/\/docs.mongodb.org\/manual\/reference\/glossary\/#term-document\" target=\"_blank\">document<\/a>, and is simply a JSON string. A <a href=\"https:\/\/en.wikipedia.org\/wiki\/Projection_(relational_algebra)\" target=\"_blank\">projection<\/a> of a JSON structure is equivalent to a projection in SQL. If you convert the JSON into a Newtonsoft JObject, you can make a projection of one key\/value pair using the [] operator. As in SQL, an index can be created to improve search time.<\/p>\n<h2>Examples<\/h2>\n<table style=\"height: 256px;\" width=\"753\">\n<tbody>\n<tr>\n<td style=\"word-wrap: break-word;\">\n<h6>SQL Op<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Operation<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Example<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Example in Mongo shell<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Example in Restheart<\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Create database<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Create a database named db1.<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Create a database named db1.<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>use db1<\/h6>\n<h6>NOTE: you need to insert a collection to actually create the database while using the Mongo shell.<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0<a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Database\" target=\"_blank\">PUT<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Database\" target=\"_blank\">http:\/\/localhost:8080\/db1\/<\/a><\/h6>\n<h6>NOTE: Do not set data or you will create a record with that data in the database. It can&#8217;t be deleted!<\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"word-wrap: break-word;\">\n<h6>Create table<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Create collection<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Create a collection named &#8220;col&#8221;.<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/docs.mongodb.org\/manual\/reference\/method\/db.createCollection\/#db.createCollection\" target=\"_blank\">db.createCollection(&#8220;col&#8221;)<\/a><\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Collection\" target=\"_blank\">PUT<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Collection\" target=\"_blank\">http:\/\/localhost:8080\/db1\/col<\/a><\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"word-wrap: break-word;\">\n<h6>Insert a row in a table<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Insert a document in a collecton<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Insert {&#8220;a1&#8243;:&#8221;b1&#8221;} in collection col.<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0<a href=\"https:\/\/docs.mongodb.org\/manual\/reference\/method\/db.collection.insert\/#db.collection.insert\" target=\"_blank\">db.col.insert({&#8220;a1&#8243;:&#8221;b1&#8221;})<\/a><\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">POST<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">http:\/\/localhost:8080\/db1\/col<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">payload is {&#8220;a1&#8243;:&#8221;b1&#8221;}<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">header is Content-Type: application\/json<\/a><\/h6>\n<h6>NOTE: The record type\/value doesn&#8217;t have to be unique. So, you can insert duplicates if you like.<\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"word-wrap: break-word;\">\n<h6>Read a row<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Read a document<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Find {} &#8212; find all records in collection col.<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/docs.mongodb.org\/manual\/reference\/method\/db.collection.find\/#db.collection.find\" target=\"_blank\">db.col.find({})<\/a><\/h6>\n<h6>or just db.col.find()<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">GET<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">http:\/\/localhost:8080\/db1\/col<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">header is Content-Type: application\/json<\/a><\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"word-wrap: break-word;\">\n<h6>Read a row<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Read a document<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Find { &#8220;a1&#8221; : &lt;value&gt; } &#8212; find all records with key a1 in collection col.<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/docs.mongodb.org\/manual\/reference\/method\/db.collection.find\/#db.collection.find\" target=\"_blank\">db.col.find({&#8220;a1&#8221;:{$regex : &#8220;.*&#8221; }})<\/a><\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">GET<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">http:\/\/localhost:8080\/db1\/col?filter={&#8220;a1&#8243;:{$regex:&#8221;.*&#8221;}}<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">NOTE: Make sure to note the correct syntax. The Restheart arg parser is very, very poor. E.g., using parentheses instead of equal sign:<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">http:\/\/localhost:8080\/db1\/col?filter={&#8220;a1&#8243;:{$regex:&#8221;.*&#8221;}}<\/a><\/h6>\n<h6>This will return all records with a1, which is not what you intended!<\/h6>\n<h6>To limit the find to the &#8220;first&#8221; record (whatever that means), add &#8216;&amp;pagelimit=1&#8217; to the args of the GET url.<\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"word-wrap: break-word;\">\n<h6>Read a row<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Read a document with projection<\/h6>\n<\/td>\n<td>\n<h6>Find { &#8220;a1&#8221; : &lt;value&gt; } &#8212; find all records with key a1 in collection col, but only show keys of &#8220;cc&#8221;. For example, suppose there is one record, {{&#8220;aa&#8221;:&#8221;bb&#8221;}, {&#8220;cc&#8221;:&#8221;dd&#8221;}}. Return {&#8220;cc&#8221;:&#8221;dd&#8221;}.<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/docs.mongodb.org\/manual\/reference\/method\/db.collection.find\/#db.collection.find\" target=\"_blank\">db.col.find({&#8220;aa&#8221;:{$regex : &#8220;.*&#8221; }})<\/a>.projection({&#8220;cc&#8221;:1})<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">http:\/\/localhost:8080\/db1\/col?filter={&#8220;aa&#8221;:{$regex:&#8221;.*&#8221;}}&amp;keys={&#8220;cc&#8221;:1}<\/a><\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Update a row<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Update a document<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>Update {&#8220;a1&#8243;:&#8221;*.&#8221;} to {&#8220;a1&#8243;:&#8221;asdf&#8221;}<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/docs.mongodb.org\/manual\/reference\/method\/db.collection.update\/\" target=\"_blank\">db.col.update({&#8220;a1&#8243;:{$regex:&#8221;.*&#8221;}},{&#8220;a1&#8243;:&#8221;xx&#8221;})<\/a><\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">PATCH<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">http:\/\/localhost:8080\/tb3\/col\/*?filter={&#8220;a1&#8243;:&#8221;.*&#8221;}<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">header is Content-Type: application\/json<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">payload is {&#8220;a1&#8243;:&#8221;asdf&#8221;}<\/a><\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Delete a row<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Delete a document<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Delete a record with a particular key\/value,\u00c2\u00a0{ &#8220;a1&#8221; : &lt;value&gt; }.<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0<a href=\"https:\/\/docs.mongodb.org\/manual\/reference\/method\/db.collection.remove\/#db.collection.remove\" target=\"_blank\">db.col.remove({&#8220;a1&#8243;:{$regex:&#8221;.*&#8221;}})<\/a><\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">\u00c2\u00a0DELETE<\/a><\/h6>\n<h6><a href=\"https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Reference+sheet#Referencesheet-Document\" target=\"_blank\">http:\/\/localhost:8080\/db1\/col\/*?filter={&#8220;aa&#8221;:{$regex:&#8221;.*&#8221;}}<\/a><\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Delete a table<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Delete a collection<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Nuke an entire collection col.<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0<a href=\"https:\/\/docs.mongodb.org\/manual\/reference\/method\/db.collection.drop\/#db.collection.drop\" target=\"_blank\">db.col.drop()<\/a><\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0DELETE<\/h6>\n<h6>http:\/\/localhost:8080\/db1\/col<\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Delete database<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Delete database<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0Nuke the entire database db1.<\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0<a href=\"https:\/\/docs.mongodb.org\/manual\/reference\/method\/db.dropDatabase\/#db.dropDatabase\" target=\"_blank\">db.dropDatabase()<\/a><\/h6>\n<\/td>\n<td style=\"word-wrap: break-word;\">\n<h6>\u00c2\u00a0DELETE<\/h6>\n<h6>header contains If-Match:<em>&lt;the id of the database&gt;<\/em>, e.g., 570e3dc71d9563251070fab3<\/h6>\n<h6>http:\/\/localhost:8080\/tb1\/<\/h6>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>NOTE: Restheart normally requires an &#8220;ETag&#8221; header entry, i.e., &#8220;If-Match: 570e3dc71d9563251070fab3&#8221;, where that number is an ID of the record to delete. You can turn off ETag checking in a configuration file, which you can specify on the java command line.<\/p>\n<p>To get a value, you will have to parse the json\u00c2\u00a0for the field of interest. You can use projection to help you with that.<\/p>\n<h2>Running Mongo and Restheart on Dokku<\/h2>\n<p>To run a Mongo database and a Restheart server on Dokku, you can get a copy of my Github example, then modify it for your needs. The example is <a href=\"https:\/\/bitbucket.org\/ken_domino\/restheart_dokku\" target=\"_blank\">here<\/a>.<\/p>\n<h2>References<\/h2>\n<p>https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Installation+and+Setup#InstallationandSetup-7.3.MongoDBauthenticationwithjustenoughpermissionsauth-with-jep<\/p>\n<p>https:\/\/softinstigate.atlassian.net\/wiki\/display\/RH\/Query+Documents<\/p>\n<p>http:\/\/www.tutorialspoint.com\/mongodb\/mongodb_query_document.htm<\/p>\n<p>https:\/\/docs.mongodb.org\/manual\/reference\/method\/db.collection.find\/<\/p>\n<p>https:\/\/www.mongodb.org\/downloads#production<\/p>\n<p>http:\/\/www.codeproject.com\/Articles\/1087008\/Mongo-DB-Tutorial-and-Mapping-of-SQL-and-Mongo-DB<\/p>\n<p>http:\/\/stackoverflow.com\/questions\/tagged\/restheart<\/p>\n<p>https:\/\/en.wikipedia.org\/wiki\/MongoDB<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mongo is a popular NoSQL database nowadays. It has several advantages compared to relational databases\u00c2\u00a0(schema-less, key-value store, scalable, distributed, propagated consistency) but the main advantage, IMHO, is that JSON is the lingua franca for the data structures it stores and the queries you\u00c2\u00a0use. JSON is a nice, simple data structure representation. It can be easily &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/165.227.223.229\/index.php\/2016\/04\/14\/mongo-restheart-and-dokku\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Mongo, Restheart, and Dokku&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/165.227.223.229\/index.php\/wp-json\/wp\/v2\/posts\/1436"}],"collection":[{"href":"http:\/\/165.227.223.229\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/165.227.223.229\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/165.227.223.229\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/165.227.223.229\/index.php\/wp-json\/wp\/v2\/comments?post=1436"}],"version-history":[{"count":0,"href":"http:\/\/165.227.223.229\/index.php\/wp-json\/wp\/v2\/posts\/1436\/revisions"}],"wp:attachment":[{"href":"http:\/\/165.227.223.229\/index.php\/wp-json\/wp\/v2\/media?parent=1436"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/165.227.223.229\/index.php\/wp-json\/wp\/v2\/categories?post=1436"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/165.227.223.229\/index.php\/wp-json\/wp\/v2\/tags?post=1436"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}