{"id":7417,"date":"2018-10-03T07:30:42","date_gmt":"2018-10-03T10:30:42","guid":{"rendered":"http:\/\/www.fernandoquadro.com.br\/html\/?p=7417"},"modified":"2018-09-25T14:48:37","modified_gmt":"2018-09-25T17:48:37","slug":"como-realizar-backup-no-geoserver-parte-3","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2018\/10\/03\/como-realizar-backup-no-geoserver-parte-3\/","title":{"rendered":"Como realizar backup no GeoServer &#8211; Parte 3"},"content":{"rendered":"<p>Neste post irei apresentar como gerenciar o backup e a restaura\u00e7\u00e3o das informa\u00e7\u00f5es do GeoServer atrav\u00e9s de sua API REST.<\/p>\n<p><strong>5. Backup atrav\u00e9s da API REST do GeoServer <\/strong><\/p>\n<p>A API REST de backup e restaura\u00e7\u00e3o consiste em alguns recursos destinados a serem usados \u200b\u200bde maneira ass\u00edncrona:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/api_backup.png\" alt=\"\" width=\"756\" height=\"333\" class=\"aligncenter size-full wp-image-7418\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/api_backup.png 756w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/api_backup-300x132.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/api_backup-600x264.png 600w\" sizes=\"auto, (max-width: 756px) 100vw, 756px\" \/><\/p>\n<p>Vamos usar a ferramenta de linha de comando cURL para enviar solicita\u00e7\u00f5es HTTP REST para o GeoServer.<\/p>\n<p>Os endpoints \/rest\/br\/backup\/ e \/rest\/br\/restore aceitam um sufixo de formato opcional que permite que o arquivo de Backup\/Restaura\u00e7\u00e3o seja transmitido de\/para o cliente em vez de ser gravado\/lido no sistema de arquivos.<\/p>\n<p><strong>5.1 Iniciar um backup<\/strong><\/p>\n<p>Prepare um arquivo contendo um objeto JSON representando a configura\u00e7\u00e3o do procedimento de backup.<\/p>\n<pre>\r\n{\r\n   \"backup\":{\r\n      \"archiveFile\":\"\/home\/sg\/BackupAndRestore\/test_rest_1.zip\",\r\n      \"overwrite\":true,\r\n      \"options\":{\r\n      }\r\n   }\r\n}\r\n<\/pre>\n<p>Neste caso, n\u00e3o especificamos nenhuma op\u00e7\u00e3o na configura\u00e7\u00e3o de backup, de forma que os valores padr\u00e3o ser\u00e3o usados.<\/p>\n<p>As op\u00e7\u00f5es dispon\u00edveis s\u00e3o:<\/p>\n<p><em>BK_BEST_EFFORT<\/em>: Ignore quaisquer recursos com falha e continue com o procedimento de backup<br \/>\n<em>BK_PARAM_PASSWORDS<\/em>: Se as senhas do armazenamento de sa\u00edda devem ser parametrizadas no backup. Com essa op\u00e7\u00e3o, todas as senhas armazenadas ser\u00e3o substitu\u00eddas por um token parecido com ${workspaceName:storeName.passwd.encryptedValue}<br \/>\n<em>BK_SKIP_SECURITY<\/em>: Isso excluir\u00e1 as configura\u00e7\u00f5es de seguran\u00e7a do backup (Experimental).<br \/>\n<em>BK_SKIP_SETTINGS<\/em>: Isso tentar\u00e1 excluir a maioria das configura\u00e7\u00f5es globais do backup, bem como as configura\u00e7\u00f5es de seguran\u00e7a (Experimental).<\/p>\n<p>Al\u00e9m disso, um opcional Filter pode ser passado para restringir o escopo da opera\u00e7\u00e3o de restaura\u00e7\u00e3o a uma lista de espa\u00e7os de trabalho. Por exemplo:<\/p>\n<pre>\r\n{\r\n   \"backup\":{\r\n      \"archiveFile\":\"\/home\/sg\/BackupAndRestore\/test_rest_1.zip\",\r\n\"overwrite\":true,\r\n      \"options\":{\r\n        \"option\": [\"BK_BEST_EFFORT=true\"]\r\n      },\r\n\"filter\": \"name IN ('topp','geosolutions-it')\"\r\n   }\r\n}\r\n<\/pre>\n<p>O procedimento de backup ser\u00e1 iniciado. Aqui est\u00e1 uma amostra da resposta:<\/p>\n<pre>\r\nHTTP\/1.1 201 Created\r\nDate: Mon, 01 Aug 2016 14:35:44 GMT\r\nLocation: http:\/\/mygeoserver\/geoserver\/rest\/br\/backup\/1\r\nServer: Noelios-Restlet-Engine\/1.0..8\r\nContent-Type: application\/json\r\nTransfer-Encoding: chunked\r\n\r\n{\r\n   \"backup\":{\r\n      \"totalNumberOfSteps\":9,\r\n      \"execution\":{\r\n         \"id\":1,\r\n         \"version\":1,\r\n         \"stepExecutions\":{\r\n            \"@class\":\"java.util.concurrent.CopyOnWriteArraySet\"\r\n         },\r\n         \"status\":[\r\n            \"STARTED\"\r\n         ],\r\n         \"startTime\":\"2016-08-01 14:35:44.802 UTC\",\r\n         \"createTime\":\"2016-08-01 14:35:44.798 UTC\",\r\n         \"lastUpdated\":\"2016-08-01 14:35:44.803 UTC\",\r\n         \"exitStatus\":{\r\n            \"exitCode\":\"UNKNOWN\",\r\n            \"exitDescription\":\"\"\r\n         },\r\n         \"progress\":\"1\\\/9\"\r\n      },\r\n      \"options\":{\r\n         \"@class\":\"synchList\",\r\n         \"option\":[\r\n            \"OVERWRITE=true\"\r\n         ]\r\n      },\r\n      \"warningsList\":{\r\n         \"@class\":\"synchList\"\r\n      },\r\n      \"archiveFile\":{\r\n         \"@class\":\"resource\",\r\n         \"$\":\"\\\/home\\\/sg\\\/BackupAndRestore\\\/test_rest_1.zip\"\r\n      },\r\n      \"overwrite\":true\r\n   }\r\n}\r\n<\/pre>\n<p>No final do procedimento de backup, voc\u00ea poder\u00e1 fazer o download do arquivo gerado para o seu sistema de arquivos local, fazendo uma solicita\u00e7\u00e3o HTTP GET para o mesmo endpoint, usando o ID de backup como abaixo e adicionando a extens\u00e3o .zip no final.<\/p>\n<pre>\r\ncurl -u \"admin:geoserver\" -i -X GET  \"http:\/\/mygeoserver\/geoserver\/rest\/br\/backup\/1.zip\" -o 1.zip\r\n<\/pre>\n<p>O status da opera\u00e7\u00e3o pode ser consultado fazendo uma solicita\u00e7\u00e3o HTTP GET para o local listado na resposta:<\/p>\n<pre>\r\n http:\/\/mygeoserver\/geoserver\/rest\/br\/backup\/$ID.{json\/xml}\r\n<\/pre>\n<p>Substitua $ID pela ID da opera\u00e7\u00e3o de backup que voc\u00ea gostaria de inspecionar:<\/p>\n<pre>\r\ncurl -u \"admin:geoserver\" http:\/\/mygeoserver\/geoserver\/rest\/br\/backup\/1.json\r\n\r\nOU\r\n\r\ncurl -u \"admin:geoserver\" http:\/\/mygeoserver\/geoserver\/rest\/br\/backup\/1.xml\r\n<\/pre>\n<p>O GeoServer responder\u00e1 com o status do backup correspondente a esse ID:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/usagerest002.png\" alt=\"\" width=\"613\" height=\"849\" class=\"aligncenter size-full wp-image-7426\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/usagerest002.png 613w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/usagerest002-217x300.png 217w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/usagerest002-600x831.png 600w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/><\/p>\n<p>Aqui voc\u00ea pode ver o status de todas as etapas envolvidas no procedimento de backup com hora de cria\u00e7\u00e3o, hora de in\u00edcio, hora de t\u00e9rmino, status de sa\u00edda, etc.<\/p>\n<p><strong>5.2 Cancelar um backup<\/strong><\/p>\n<p>Para cancelar um backup em andamento, \u00e9 necess\u00e1rio enviar uma solicita\u00e7\u00e3o HTTP DELETE com o ID da tarefa:<\/p>\n<pre>\r\ncurl -v -XDELETE -u \"admin:geoserver\" http:\/\/mygeoserver\/geoserver\/rest\/br\/backup\/$ID\r\n<\/pre>\n<p>Substitua $IDpela ID da opera\u00e7\u00e3o de backup que voc\u00ea deseja cancelar.<\/p>\n<p><strong>5.3 Restaurando um backup<\/strong><\/p>\n<p>Prepare um arquivo com um objeto JSON representando a configura\u00e7\u00e3o do procedimento de Restore:<\/p>\n<pre>\r\n{\r\n   \"restore\":{\r\n      \"archiveFile\":\"\/home\/sg\/BackupAndRestore\/test_rest_1.zip\",\r\n      \"options\":{\r\n      }\r\n   }\r\n}\r\n<\/pre>\n<p>Neste caso, n\u00e3o especificamos nenhuma op\u00e7\u00e3o na configura\u00e7\u00e3o de restaura\u00e7\u00e3o para que os valores padr\u00e3o sejam usados.<\/p>\n<p>Op\u00e7\u00f5es dispon\u00edveis s\u00e3o:<\/p>\n<p><em>BK_DRY_RUN<\/em>: Apenas testar o arquivo e n\u00e3o persistir a configura\u00e7\u00e3o restaurada<\/p>\n<p><em>BK_BEST_EFFORT<\/em>: Ignorar quaisquer recursos com falha e continuar com o procedimento de restaura\u00e7\u00e3o<\/p>\n<p><em>BK_PASSWORD_TOKENS<\/em>: Uma lista separada por v\u00edrgula de chave e valores separados por sinal de igual deve ser substitu\u00edda em senhas de armazenamento de dados em um backup de entrada. Por exemplo:<\/p>\n<pre>\r\nBK_PASSWORD_TOKENS=${workspace:store1.passwd.encryptedValye}=foo,${workspace:store2.passwd.encryptedValue}=bar\r\n<\/pre>\n<p><em>BK_SKIP_SECURITY<\/em>: Isso excluir\u00e1 as configura\u00e7\u00f5es de seguran\u00e7a da restaura\u00e7\u00e3o. Padr\u00e3o: falso (Experimental).<\/p>\n<p><em>BK_SKIP_SETTINGS<\/em>: Isso tentar\u00e1 excluir a maioria das configura\u00e7\u00f5es globais do backup, bem como as configura\u00e7\u00f5es de seguran\u00e7a. Padr\u00e3o: falso (Experimental).<\/p>\n<p><em>BK_PURGE_RESOURCES<\/em>: Isso ir\u00e1 ignorar a exclus\u00e3o de recursos sempre que poss\u00edvel. Em particular, os espa\u00e7os de trabalho existentes n\u00e3o ser\u00e3o exclu\u00eddos durante a restaura\u00e7\u00e3o. Padr\u00e3o: true (Experimental).<\/p>\n<p>Al\u00e9m disso, um opcional <em>Filter <\/em>pode ser passado para restituir o escopo da opera\u00e7\u00e3o de restaura\u00e7\u00e3o a uma lista de espa\u00e7os de trabalho. Por exemplo:<\/p>\n<pre>\r\n{\r\n   \"restore\":{\r\n      \"archiveFile\":\"\/home\/sg\/BackupAndRestore\/test_rest_1.zip\",\r\n      \"options\":{\r\n        \"option\": [\"BK_DRY_RUN=true\"]\r\n      },\r\n\"filter\": \"name IN ('topp','geosolutions-it')\"\r\n   }\r\n}\r\n<\/pre>\n<p>Se o caminho for especificado, o arquivo especificado nesse caminho (remoto) ser\u00e1 usado para iniciar o procedimento de restaura\u00e7\u00e3o. Caso contr\u00e1rio, voc\u00ea precisa inserir o arquivo do seu sistema local.<\/p>\n<p>Em seguida, fa\u00e7a uma solicita\u00e7\u00e3o POST HTTP para a interface REST do GeoServer para o procedimento de restaura\u00e7\u00e3o:<\/p>\n<p>curl -u &#8220;admin:geoserver&#8221; -i -H &#8220;Content-Type: application\/json&#8221; -X POST &#8211;data @restore_post.json http:\/\/mygeoserver\/geoserver\/rest\/br\/restore\/<\/p>\n<p>O procedimento de restaura\u00e7\u00e3o ser\u00e1 iniciado. Aqui est\u00e1 uma resposta de exemplo:<\/p>\n<p>HTTP\/1.1 201 Created<br \/>\nDate: Mon, 01 Aug 2016 15:07:29 GMT<br \/>\nLocation: http:\/\/mygeoserver\/geoserver\/rest\/br\/restore\/2<br \/>\nServer: Noelios-Restlet-Engine\/1.0..8<br \/>\nContent-Type: application\/json<br \/>\nTransfer-Encoding: chunked<\/p>\n<p>{<br \/>\n   &#8220;restore&#8221;:{<br \/>\n      &#8220;totalNumberOfSteps&#8221;:9,<br \/>\n      &#8220;execution&#8221;:{<br \/>\n         &#8220;id&#8221;:2,<br \/>\n         &#8220;version&#8221;:1,<br \/>\n         &#8220;stepExecutions&#8221;:{<br \/>\n            &#8220;@class&#8221;:&#8221;java.util.concurrent.CopyOnWriteArraySet&#8221;<br \/>\n         },<br \/>\n         &#8220;status&#8221;:[<br \/>\n            &#8220;STARTED&#8221;<br \/>\n         ],<br \/>\n         &#8220;startTime&#8221;:&#8221;2016-08-01 15:07:29.398 UTC&#8221;,<br \/>\n         &#8220;createTime&#8221;:&#8221;2016-08-01 15:07:29.393 UTC&#8221;,<br \/>\n         &#8220;lastUpdated&#8221;:&#8221;2016-08-01 15:07:29.398 UTC&#8221;,<br \/>\n         &#8220;exitStatus&#8221;:{<br \/>\n            &#8220;exitCode&#8221;:&#8221;UNKNOWN&#8221;,<br \/>\n            &#8220;exitDescription&#8221;:&#8221;&#8221;<br \/>\n         },<br \/>\n         &#8220;progress&#8221;:&#8221;0\\\/9&#8243;<br \/>\n      },<br \/>\n      &#8220;options&#8221;:{<br \/>\n         &#8220;@class&#8221;:&#8221;synchList&#8221;<br \/>\n      },<br \/>\n      &#8220;warningsList&#8221;:{<br \/>\n         &#8220;@class&#8221;:&#8221;synchList&#8221;<br \/>\n      },<br \/>\n      &#8220;archiveFile&#8221;:{<br \/>\n         &#8220;@class&#8221;:&#8221;resource&#8221;,<br \/>\n         &#8220;$&#8221;:&#8221;\\\/home\\\/sg\\\/BackupAndRestore\\\/test_rest_1.zip&#8221;<br \/>\n      }<br \/>\n   }<br \/>\n}<\/p>\n<p>Para carregar o arquivo do nosso sistema local, omita o par\u00e2metro <em>archiveFile<\/em> no objeto JSON e passe o  &#8211;upload-file para o cURL:<\/p>\n<pre>\r\n{\r\n   \"restore\":{\r\n      \"options\":{\r\n      },\r\n   }\r\n}\r\n<\/pre>\n<pre>\r\ncurl -u \"admin:geoserver\" -i -H \"Content-Type: application\/json\" --upload-file \"archive_to_restore.zip\" -X POST --data @restore_post.json http:\/\/localhost:8081\/geoserver\/rest\/br\/restore\/\r\n<\/pre>\n<p>O arquivo archive_to_restore.zip (local) ser\u00e1 carregado e usado pelo processo de restaura\u00e7\u00e3o.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/usagerest005.png\" alt=\"\" width=\"882\" height=\"670\" class=\"aligncenter size-full wp-image-7429\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/usagerest005.png 882w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/usagerest005-300x228.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/usagerest005-768x583.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/09\/usagerest005-600x456.png 600w\" sizes=\"auto, (max-width: 882px) 100vw, 882px\" \/><\/p>\n<p>Consulta para o status de opera\u00e7\u00f5es de restaura\u00e7\u00e3o:<\/p>\n<pre>\r\n http:\/\/mygeoserver\/geoser\/restore\/$ID.{json\/xml}\r\n<\/pre>\n<pre>\r\n{\r\n   \"restore\":{\r\n      \"execution\":{\r\n         \"hash\":2,\r\n         \"key\":{\r\n            \"@class\":\"long\",\r\n            \"$\":\"2\"\r\n         },\r\n         \"val\":{\r\n            \"@class\":\"restore\",\r\n            \"totalNumberOfSteps\":9,\r\n            \"execution\":{\r\n               \"id\":2,\r\n               \"version\":2,\r\n               \"stepExecutions\":{\r\n                  \"@class\":\"java.util.concurrent.CopyOnWriteArraySet\",\r\n                  \"step\":[\r\n                     {\r\n                        \"name\":\"restoreNamespaceInfos\",\r\n                        \"status\":\"COMPLETED\",\r\n                        \"exitStatus\":{\r\n                           \"exitCode\":\"COMPLETED\",\r\n                           \"exitDescription\":\"\"\r\n                        },\r\n                        \"startTime\":\"8\\\/1\\\/16 3:07 PM\",\r\n                        \"endTime\":\"8\\\/1\\\/16 3:07 PM\",\r\n                        \"lastUpdated\":\"8\\\/1\\\/16 3:07 PM\",\r\n                        \"parameters\":{\r\n                           \"input.file.path\":\"file:\\\/\\\/\\\/opt\\\/tomcat-geoserver-2.9.x\\\/temp\\\/tmpbbe2388a-f26d-4f26-a20f-88c653d88aec\",\r\n                           \"time\":1470064049392\r\n                        },\r\n                        \"readCount\":1,\r\n                        \"writeCount\":1,\r\n                        \"failureExceptions\":\"\"\r\n                     },\r\n                    ...\r\n                     {\r\n                        \"name\":\"restoreGeoServerSecurityManager\",\r\n                        \"status\":\"COMPLETED\",\r\n                        \"exitStatus\":{\r\n                           \"exitCode\":\"COMPLETED\",\r\n                           \"exitDescription\":\"\"\r\n                        },\r\n                        \"startTime\":\"8\\\/1\\\/16 3:07 PM\",\r\n                        \"endTime\":\"8\\\/1\\\/16 3:07 PM\",\r\n                        \"lastUpdated\":\"8\\\/1\\\/16 3:07 PM\",\r\n                        \"parameters\":{\r\n                           \"input.file.path\":\"file:\\\/\\\/\\\/opt\\\/tomcat-geoserver-2.9.x\\\/temp\\\/tmpbbe2388a-f26d-4f26-a20f-88c653d88aec\",\r\n                           \"time\":1470064049392\r\n                        },\r\n                        \"readCount\":0,\r\n                        \"writeCount\":0,\r\n                        \"failureExceptions\":\"\"\r\n                     }\r\n                  ]\r\n               },\r\n               \"status\":\"COMPLETED\",\r\n               \"startTime\":\"2016-08-01 15:07:29.398 UTC\",\r\n               \"createTime\":\"2016-08-01 15:07:29.393 UTC\",\r\n               \"endTime\":\"2016-08-01 15:07:30.356 UTC\",\r\n               \"lastUpdated\":\"2016-08-01 15:07:30.772 UTC\",\r\n               \"exitStatus\":{\r\n                  \"exitCode\":\"COMPLETED\",\r\n                  \"exitDescription\":\"\"\r\n               },\r\n               \"progress\":\"9\\\/9\"\r\n            },\r\n            \"options\":{\r\n               \"@class\":\"synchList\"\r\n            },\r\n            \"warningsList\":{\r\n               \"@class\":\"synchList\"\r\n            },\r\n            \"archiveFile\":{\r\n               \"@class\":\"resource\",\r\n               \"$\":\"\\\/home\\\/sg\\\/BackupAndRestore\\\/test_rest_1.zip\"\r\n            }\r\n         }\r\n      }\r\n    ...\r\n<\/pre>\n<p>Aqui voc\u00ea pode ver o status de todas as etapas envolvidas no procedimento de restaura\u00e7\u00e3o com hora de cria\u00e7\u00e3o, hora de in\u00edcio, hora de t\u00e9rmino, status de sa\u00edda, etc.<\/p>\n<p><strong>5.4 Cancelar uma restaura\u00e7\u00e3o<\/strong><\/p>\n<p>Par cancelar uma restaura\u00e7\u00e3o em andamento, envie uma solicita\u00e7\u00e3o HTTP DELETE:<\/p>\n<pre>\r\ncurl -v -XDELETE -u \"admin:geoserver\" http:\/\/mygeoserver\/geoserver\/rest\/br\/restore\/$ID\r\n<\/pre>\n<p>Substitua $ID pelo ID da opera\u00e7\u00e3o de restaura\u00e7\u00e3o que voc\u00ea deseja cancelar.<\/p>\n<p>Fonte: <a href=\"http:\/\/docs.geoserver.org\/latest\/en\/user\/community\/backuprestore\/index.html\" rel=\"noopener\" target=\"_blank\">GeoServer Documentation<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste post irei apresentar como gerenciar o backup e a restaura\u00e7\u00e3o das informa\u00e7\u00f5es do GeoServer atrav\u00e9s de sua API REST. 5. Backup atrav\u00e9s da API REST do GeoServer A API REST de backup e restaura\u00e7\u00e3o consiste em alguns recursos destinados&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2018\/10\/03\/como-realizar-backup-no-geoserver-parte-3\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":7420,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[288,208,327,289],"class_list":["post-7417","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-backup","tag-geoserver","tag-rest-api","tag-restore"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7417","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/comments?post=7417"}],"version-history":[{"count":10,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7417\/revisions"}],"predecessor-version":[{"id":7431,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7417\/revisions\/7431"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/7420"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=7417"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=7417"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=7417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}