{"id":90,"date":"2019-11-22T14:06:46","date_gmt":"2019-11-22T13:06:46","guid":{"rendered":"https:\/\/blog.nubisoft.pl\/?p=90"},"modified":"2020-01-14T20:47:17","modified_gmt":"2020-01-14T19:47:17","slug":"amazon-quantum-ledger-database-qldb-as-a-blockchain-database-as-a-service","status":"publish","type":"post","link":"https:\/\/nubisoft.io\/blog\/amazon-quantum-ledger-database-qldb-as-a-blockchain-database-as-a-service\/","title":{"rendered":"Amazon Quantum Ledger Database (QLDB) as a blockchain database as a service"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Nowadays, everybody talks about blockchain technologies but not many understand all the concepts behind it. Even less have any practical experience with these issues. Therefore here, we will try to put some light on it.<\/h2>\n\n\n\n<p>When in June our request for preview access to the QLDB service was approved, we all rubbed our hands together to test it ASAP.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"661\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB-invitation-1024x661.png\" alt=\"\" class=\"wp-image-93\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB-invitation-1024x661.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB-invitation-300x194.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB-invitation-768x496.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB-invitation-1536x992.png 1536w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB-invitation-2048x1322.png 2048w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB-invitation-1200x775.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB-invitation-1980x1279.png 1980w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>But before we start with some practice, first let&#8217;s talk a bit about theory. Blockchain is a concept of implementation of nonrepudiation by means of chaining blocks of transactions. Each block contains data describing issued transactions and some additional data derived from the previous block (most often being the product of hash function). When the current block is completed, its stamp (hash value) is put to the next one. This way blocks form the consistent chain (being distributed transactions ledger) and this consistency could be easily verified by everyone using the previously mentioned function.<\/p>\n\n\n\n<p>All the above is of course only the generic concept. As they say &#8211; the devil is in the details. And the details here are among others issues on:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>who calculates stamp of blocks,<\/li><li> who confirms the correctness of the above calculations (how the consensus is achieved),<\/li><li> how the stamps are calculated,<\/li><li> how the whole ledger is distributed so everyone might check its consistency,<\/li><li> who may join the ledger,<\/li><li> how he is authenticated or authorized,<\/li><li> is he authorized to see all transactions or only ones that concern him?<\/li><\/ul>\n\n\n\n<p>Start digging on the above topics leads us to the concepts of proof-of-work, proof-of-state, Byzantine Generals Problem, etc. It will turn out that the way of implementing all these concepts causes a number of problems on various levels:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>efficiency,<\/li><li> scalability,<\/li><li> security,<\/li><li> privacy,<\/li><li> legal regulations (e.g. GDPR).<\/li><\/ul>\n\n\n\n<p>All this means that the practical application of these technologies is often disputable and except for the cryptocurrency area, these technologies have not yet found a widespread and obvious application. But it is worth noting that separation of the concepts of block chaining (BC) and distributing ledger (DLT) is very much possible. Leaving the last one, things become simpler, but at the expense of the need to trust the central \/ trusted entity again.<\/p>\n\n\n\n<p>This observation has led to the creation of such platforms as Corda, BigchainDB, and eventually Amazon Quantum Ledger Database from the AWS, which was first announced at <a href=\"https:\/\/reinvent.awsevents.com\/\">AWS re:Invent<\/a> 2018 and today available in production form in five AWS regions.<\/p>\n\n\n\n<p>The concept of QLDB is based on chaining database log. QLDB maintains the so-called &#8220;current state&#8221; of data but also provides access to all the &#8220;historical states&#8221;, so it is possible to track all past data changes. It is not a typical SQL database but rather a document-oriented one (<a href=\"http:\/\/amzn.github.io\/ion-docs\/\">ION <\/a>format), however, thanks to implementing <a href=\"https:\/\/partiql.org\/\">PartiQL<\/a> query language (since 10 September 2019), data can be queried, managed, and updated with SQL operators. It also provides an API that allows you to cryptographically verify that the history is accurate and legitimate. The QLDB is serverless what means it offered as a service and one needs not to worry about provisioning capacity or configuring read and write limits.<\/p>\n\n\n\n<p>So, let&#8217;s start with a simple interactive example. First, we create a ledger.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"738\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_1_create-1024x738.png\" alt=\"\" class=\"wp-image-98\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_1_create-1024x738.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_1_create-300x216.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_1_create-768x553.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_1_create-1536x1106.png 1536w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_1_create-1200x864.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_1_create.png 1752w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The system is preparing the environment and in a few minutes (which turn out to be seconds) the ledger gets created.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"412\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_2_create-1024x412.png\" alt=\"\" class=\"wp-image-99\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_2_create-1024x412.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_2_create-300x121.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_2_create-768x309.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_2_create-1536x618.png 1536w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_2_create-1200x483.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_2_create.png 1756w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Next, using the query editor we can create and populate simple database schema.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE Book\n\nCREATE INDEX ON Book (ISBN)\n\nINSERT INTO Book\n&lt;&lt; {\n    'ISBN' : '978-0547928227',\n    'Title' : 'The Hobbit',\n    'Year' : '2012'\n},\n{\n    'ISBN' : '978-0395489321',\n    'Title' : 'The Lord of the Rings',\n    'Year' : '1988'\n},\n{\n    'ISBN' : '978-1328613042',\n    'Title' : 'The Fall of Gondolin',\n    'Year' : '2019'\n} >><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"995\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_3_create-1024x995.png\" alt=\"\" class=\"wp-image-100\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_3_create-1024x995.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_3_create-300x291.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_3_create-768x746.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_3_create-1536x1492.png 1536w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_3_create-1200x1166.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_3_create.png 1642w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Now, we can query our database.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"850\" height=\"1024\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_4_create-850x1024.png\" alt=\"\" class=\"wp-image-102\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_4_create-850x1024.png 850w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_4_create-249x300.png 249w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_4_create-768x925.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_4_create-1275x1536.png 1275w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_4_create-1200x1445.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_4_create.png 1346w\" sizes=\"auto, (max-width: 850px) 100vw, 850px\" \/><\/figure>\n\n\n\n<p>We can also update some data.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>update Book as b\nset b.Title = 'The Fall of Gondolin!'\nwhere b.ISBN = '978-1328613042'<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"664\" height=\"1024\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_5_update-664x1024.png\" alt=\"\" class=\"wp-image-103\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_5_update-664x1024.png 664w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_5_update-195x300.png 195w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_5_update-768x1184.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_5_update-996x1536.png 996w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_5_update.png 1050w\" sizes=\"auto, (max-width: 664px) 100vw, 664px\" \/><\/figure>\n\n\n\n<p>And now we can query the modification history of a table or a specific document in a table,  with the possibility to find modifications within a certain range and on a  particular document. In our example, we ask for all records from the beginning of 2019 to now (as we don&#8217;t specify the second datetime).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>select * from history(Book, `2019T`)<\/code><\/pre>\n\n\n\n<p>And we see that each transaction is tagged with a hash value that is a crucial part of the chainblock, and we can see all versions of a given document.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"494\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_7_history-1024x494.png\" alt=\"\" class=\"wp-image-107\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_7_history-1024x494.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_7_history-300x145.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_7_history-768x370.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_7_history-1536x741.png 1536w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_7_history-2048x987.png 2048w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_7_history-1200x579.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_7_history-1980x955.png 1980w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"882\" height=\"871\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_8_history.png\" alt=\"\" class=\"wp-image-105\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_8_history.png 882w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_8_history-300x296.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_8_history-768x758.png 768w\" sizes=\"auto, (max-width: 882px) 100vw, 882px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"879\" height=\"857\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_9_history.png\" alt=\"\" class=\"wp-image-106\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_9_history.png 879w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_9_history-300x292.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_9_history-768x749.png 768w\" sizes=\"auto, (max-width: 879px) 100vw, 879px\" \/><\/figure>\n\n\n\n<p>We can also verify the integrity of documents that are stored within out ledger\u2019s journal, what has described in <a href=\"https:\/\/docs.aws.amazon.com\/qldb\/latest\/developerguide\/getting-started-step-6.html\">Verify a Document in a Ledger<\/a>, and is a great example of the power (and value) of cryptographic verification. At any time we can get the digest of the transaction.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"441\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_10_digest-1024x441.png\" alt=\"\" class=\"wp-image-111\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_10_digest-1024x441.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_10_digest-300x129.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_10_digest-768x331.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_10_digest-1536x662.png 1536w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_10_digest-1200x517.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_10_digest.png 1913w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"253\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_11_digest-1024x253.png\" alt=\"\" class=\"wp-image-109\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_11_digest-1024x253.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_11_digest-300x74.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_11_digest-768x189.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_11_digest-1536x379.png 1536w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_11_digest-1200x296.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_11_digest-1980x488.png 1980w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_11_digest.png 1995w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"971\" height=\"710\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_12_digest.png\" alt=\"\" class=\"wp-image-110\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_12_digest.png 971w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_12_digest-300x219.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_12_digest-768x562.png 768w\" sizes=\"auto, (max-width: 971px) 100vw, 971px\" \/><\/figure>\n\n\n\n<p>And at any time we can verify the ledger against the formerly downloaded digest.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"578\" src=\"https:\/\/blog.nubisoft.pl\/wp-content\/uploads\/2019\/11\/bc-QLDB_13_digest-1024x578.png\" alt=\"\" class=\"wp-image-112\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_13_digest-1024x578.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_13_digest-300x169.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_13_digest-768x434.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_13_digest-1536x867.png 1536w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_13_digest-1200x677.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2019\/11\/bc-QLDB_13_digest.png 1908w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Worth mentions that all the above-described operations can be performed using not only AWS Management Console but also <a href=\"https:\/\/aws.amazon.com\/cli\/\">AWS Command Line Interface (CLI)<\/a>, a CloudFormation template, or by making calls to the QLDB API. <\/p>\n\n\n\n<p><strong>As we see, the threshold to enter the world of blockchain is fairy-tale simple, isn&#8217;t it?<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"> Another view angles <\/h2>\n\n\n\n<ol class=\"wp-block-list\"><li>We have to pay attention that despite involving a subset of blockchain technologies the QLDB still implements nonrepudiation by means of trust in the central institution (in this case AWS corp).<\/li><li> Although QLDB is only available as a service, there are similar solutions that can be implemented as on-premises. In a case of such deployment scenarios, we must trust in entities who operate them.<\/li><li>Sometimes in case of institutional parties, it is only needed to build trust between parties (this is often scenario in banking) that are involved in a given transaction. Then <a href=\"https:\/\/www.corda.net\/\">Corda <\/a>platform seems to be an ideal solution.<\/li><\/ol>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nowadays, everybody talks about blockchain technologies but not many understand all the concepts behind it. Even less have any practical experience with these issues. Therefore here, we will try to put some light on it. When in June our request for preview access to the QLDB service was approved, we all rubbed our hands together [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":91,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_case_study_excerpt":"","footnotes":""},"categories":[5,3],"tags":[32,31,34,35,33],"class_list":["post-90","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-infrastructure","category-software-development","tag-aws","tag-blockchain","tag-database","tag-preview","tag-qldb"],"_links":{"self":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/90","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/comments?post=90"}],"version-history":[{"count":12,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/90\/revisions"}],"predecessor-version":[{"id":191,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/90\/revisions\/191"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/media\/91"}],"wp:attachment":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/media?parent=90"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/categories?post=90"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/tags?post=90"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}