{"id":717,"date":"2020-06-02T16:04:04","date_gmt":"2020-06-02T15:04:04","guid":{"rendered":"https:\/\/marketaylor.synology.me\/?p=717"},"modified":"2020-06-04T09:44:29","modified_gmt":"2020-06-04T08:44:29","slug":"mq-go-package-version-modules","status":"publish","type":"post","link":"https:\/\/marketaylor.synology.me\/?p=717","title":{"rendered":"A &#8220;major&#8221; update to the MQ Go package version"},"content":{"rendered":"\n<p>The Go language and toolchain did not have a good version control system when created. Systems built on Go could not easily define the levels of the dependencies underpinning the system. Various tools were developed to help with that such as <code>dep<\/code> and <code>glide<\/code>. But more recently, the Go compiler environment has defined <strong>modules <\/strong>as the way forward. The <a rel=\"noreferrer noopener\" aria-label=\"MQ Go packages (opens in a new tab)\" href=\"https:\/\/github.com\/ibm-messaging\/mq-golang\" target=\"_blank\">MQ Go packages<\/a> are now available in a format that works with modules, with a major number version update to match. This post describes what has been done in the core MQ packages. <\/p>\n\n\n\n<p>A <a href=\"https:\/\/marketaylor.synology.me\/?p=721\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"separate post (opens in a new tab)\">separate post<\/a> talks about changes in the <a rel=\"noreferrer noopener\" aria-label=\"mq-metric-samples (opens in a new tab)\" href=\"https:\/\/github.com\/ibm-messaging\/mq-metric-samples\" target=\"_blank\">mq-metric-samples<\/a> repository that exploits these packages and enables monitoring in tools like Prometheus and Influx.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Modules<\/h2>\n\n\n\n<p>Many programing languages and tools support some kind of dependency management. If you are writing Java programs and using <strong>maven <\/strong>as a build tool, then the <em>pom.xm<\/em>l file defines all your direct dependencies and their versions; if you are writing Node.js programs, then <strong>npm <\/strong>with <em>package.json<\/em> fulfills a similar role. <\/p>\n\n\n\n<p>These dependency managers all have good and bad points. One aspect in particular that can be problematic is when two components declare dependencies on the same package, but at different versions. The decision of which version to use can be confusing, and there may be no guarantees that you end up with a working system.<\/p>\n\n\n\n<p>The design chosen for Go programs is known as <a rel=\"noreferrer noopener\" aria-label=\"modules (opens in a new tab)\" href=\"https:\/\/blog.golang.org\/using-go-modules\" target=\"_blank\">modules<\/a>. Packages declare which version they are, and consumers of those packages say which version they want to use. In this environment, the MAJOR number associated with a package (for example, the &#8220;4&#8221; in &#8220;v4.1&#8221;) is especially important as it can help to simplify the multiple-version resolution. The<a rel=\"noreferrer noopener\" aria-label=\" semantic version (opens in a new tab)\" href=\"https:\/\/semver.org\/\" target=\"_blank\"> semantic version<\/a> (<em>semver<\/em>) rules are assumed and applied. Within a given major version, compatibility is a given &#8211; while new function can be added within that major version, nothing that already exists will be removed or changed. Breaking API changes can be made only with a new major number. That simplifies the options for picking which versions to use.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Modules in the MQ Go interface<\/h3>\n\n\n\n<p>The mq-golang repository contains two packages: <em>ibmmq <\/em>and <em>mqmetric<\/em>. A single module can contain multiple packages and so these share the same version. The repository on GitHub had already gone through several incompatible changes as the APIs evolved, and had reached v4.1.4. I wrote an introduction to the API in its early days in <a href=\"https:\/\/marketaylor.synology.me\/?p=264\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"this post (opens in a new tab)\">this post<\/a>.<\/p>\n\n\n\n<p>One aspect of the Go module support is that it is relatively easy to add it for repositories that are still at v0 or v1. But once you get beyond that, migrating to modules essentially requires a new major version. And so there had to be a v5.0.0 release.<\/p>\n\n\n\n<p>There has been no real change to the <em>ibmmq <\/em>APIs in this release but using modules means that references to it need to change. There were a few changes to the <em>mqmetric <\/em>APIs used by monitoring programs. While I could have introduced those changes in a compatible way, I took advantage of knowing that there was a new major version.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Application Programming with the MQ module<\/h3>\n\n\n\n<p>The changes to use modules in your applications are made in two places.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>You create a <em>go.mod<\/em> file in the root of your application code that lists all of your application&#8217;s dependencies and the versions required:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">require (\n  github.com\/ibm-messaging\/mq-golang\/v5 v5.0.0\n)<\/pre>\n\n\n\n<p>This file can be automatically created with the <code>go mod init<\/code> command with references to the various modules and packages called from your program though you may need to edit it to get the correct version. While there is only a v5.0.0 today as I write this, there will be future v5.x.y levels. It will be possible to force use of those when you need them by updating that reference in the<em> go.mod<\/em> file.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>In your source code (the<em> .go<\/em> files), import references to the specific packages need to be modified to use the major number in the path:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">import (\n<code>  ibmmq    \"github.com\/ibm-messaging\/mq-golang\/v5\/ibmmq\"<\/code>\n<code>  mqmetric \"github.com\/ibm-messaging\/mq-golang\/v5\/mqmetric\"<\/code>\n)<\/pre>\n\n\n\n<p>Now, when you run <code>go build<\/code> the modules can be automatically downloaded, cached, and included in the compilation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Migration and compatibility<\/h2>\n\n\n\n<p>If your application does not already use modules, then you can continue to use the older versions of the MQ packages. Tools like <code>dep<\/code> can be used to force use of particular older versions. For example, you might have a <em>Gopkg.toml<\/em> file containing:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[[constraint]]\n   name = \"github.com\/ibm-messaging\/mq-golang\"\n   version = \"4.1.4\"<\/pre>\n\n\n\n<p>Version 4.1.4 was the &#8220;final&#8221; version before switching over to the v5 stream.<\/p>\n\n\n\n<p>That can continue to  be used but newer levels will not be available to you. However, many public packages are now being maintained only via module versioning. So you will likely have to make the small changes at some point, even if it&#8217;s just to pick up new fixes or features from some other component.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p> My original plan had been to make this release coincident with the next   LTS release of MQ itself. There was no technical reason for that plan,  it just seemed tidy. But I was finding that there were a number of features queued up, particularly in changes I wanted to make in the monitoring programs. Rather than release them later or piecemeal I  decided I would do the whole thing earlier than expected. Especially as I had  the  module modifications working and waiting.<\/p>\n\n\n\n<p>While getting the mq-golang repository modified to present itself via a module interface took a while to get right, I found migrating application code to use the module has been fairly quick and painless. I&#8217;d recommend anyone using these packages to convert.<\/p>\n<p class=\"last-modified\" style=\"border:1px solid;padding: 10px;\">This post was last updated on June 4th, 2020 at 09:44 am<\/p>","protected":false},"excerpt":{"rendered":"<p>The Go language and toolchain did not have a good version control system when created. Systems built on Go could not easily define the levels of the dependencies underpinning the system. Various tools were developed to help with that such as dep and glide. But more recently, the Go compiler environment has defined modules as &hellip; <a href=\"https:\/\/marketaylor.synology.me\/?p=717\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;A &#8220;major&#8221; update to the MQ Go package version&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":723,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[36,35,20],"class_list":["post-717","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mq","tag-golang","tag-ibmmq","tag-mqseries"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>A &quot;major&quot; update to the MQ Go package version - Mark Taylor&#039;s Blog<\/title>\n<meta name=\"description\" content=\"There is a new MQ Go package version to support Go modules. This post explains the changes and describes what you may need to change.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/marketaylor.synology.me\/?p=717\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A &quot;major&quot; update to the MQ Go package version - Mark Taylor&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"There is a new MQ Go package version to support Go modules. This post explains the changes and describes what you may need to change.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/marketaylor.synology.me\/?p=717\" \/>\n<meta property=\"og:site_name\" content=\"Mark Taylor&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-02T15:04:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-06-04T08:44:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/06\/go-gopher.png\" \/>\n\t<meta property=\"og:image:width\" content=\"158\" \/>\n\t<meta property=\"og:image:height\" content=\"158\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mark\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@marketaylor\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mark\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717\"},\"author\":{\"name\":\"Mark\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"headline\":\"A &#8220;major&#8221; update to the MQ Go package version\",\"datePublished\":\"2020-06-02T15:04:04+00:00\",\"dateModified\":\"2020-06-04T08:44:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717\"},\"wordCount\":916,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/go-gopher.png\",\"keywords\":[\"golang\",\"ibmmq\",\"mqseries\"],\"articleSection\":[\"IBM MQ\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717\",\"name\":\"A \\\"major\\\" update to the MQ Go package version - Mark Taylor&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/go-gopher.png\",\"datePublished\":\"2020-06-02T15:04:04+00:00\",\"dateModified\":\"2020-06-04T08:44:29+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"description\":\"There is a new MQ Go package version to support Go modules. This post explains the changes and describes what you may need to change.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717#primaryimage\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/go-gopher.png\",\"contentUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/go-gopher.png\",\"width\":158,\"height\":158,\"caption\":\"Go Gopher\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=717#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/marketaylor.synology.me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A &#8220;major&#8221; update to the MQ Go package version\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/\",\"name\":\"Mark Taylor&#039;s Blog\",\"description\":\"Messaging, Music and Moving Around\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/marketaylor.synology.me\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\",\"name\":\"Mark\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"caption\":\"Mark\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/marketaylor\"],\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A \"major\" update to the MQ Go package version - Mark Taylor&#039;s Blog","description":"There is a new MQ Go package version to support Go modules. This post explains the changes and describes what you may need to change.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/marketaylor.synology.me\/?p=717","og_locale":"en_GB","og_type":"article","og_title":"A \"major\" update to the MQ Go package version - Mark Taylor&#039;s Blog","og_description":"There is a new MQ Go package version to support Go modules. This post explains the changes and describes what you may need to change.","og_url":"https:\/\/marketaylor.synology.me\/?p=717","og_site_name":"Mark Taylor&#039;s Blog","article_published_time":"2020-06-02T15:04:04+00:00","article_modified_time":"2020-06-04T08:44:29+00:00","og_image":[{"width":158,"height":158,"url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/06\/go-gopher.png","type":"image\/png"}],"author":"Mark","twitter_card":"summary_large_image","twitter_creator":"@marketaylor","twitter_misc":{"Written by":"Mark","Estimated reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/marketaylor.synology.me\/?p=717#article","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/?p=717"},"author":{"name":"Mark","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"headline":"A &#8220;major&#8221; update to the MQ Go package version","datePublished":"2020-06-02T15:04:04+00:00","dateModified":"2020-06-04T08:44:29+00:00","mainEntityOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=717"},"wordCount":916,"commentCount":0,"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=717#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/06\/go-gopher.png","keywords":["golang","ibmmq","mqseries"],"articleSection":["IBM MQ"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/marketaylor.synology.me\/?p=717#respond"]}]},{"@type":"WebPage","@id":"https:\/\/marketaylor.synology.me\/?p=717","url":"https:\/\/marketaylor.synology.me\/?p=717","name":"A \"major\" update to the MQ Go package version - Mark Taylor&#039;s Blog","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=717#primaryimage"},"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=717#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/06\/go-gopher.png","datePublished":"2020-06-02T15:04:04+00:00","dateModified":"2020-06-04T08:44:29+00:00","author":{"@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"description":"There is a new MQ Go package version to support Go modules. This post explains the changes and describes what you may need to change.","breadcrumb":{"@id":"https:\/\/marketaylor.synology.me\/?p=717#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/marketaylor.synology.me\/?p=717"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/marketaylor.synology.me\/?p=717#primaryimage","url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/06\/go-gopher.png","contentUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/06\/go-gopher.png","width":158,"height":158,"caption":"Go Gopher"},{"@type":"BreadcrumbList","@id":"https:\/\/marketaylor.synology.me\/?p=717#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/marketaylor.synology.me\/"},{"@type":"ListItem","position":2,"name":"A &#8220;major&#8221; update to the MQ Go package version"}]},{"@type":"WebSite","@id":"https:\/\/marketaylor.synology.me\/#website","url":"https:\/\/marketaylor.synology.me\/","name":"Mark Taylor&#039;s Blog","description":"Messaging, Music and Moving Around","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/marketaylor.synology.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c","name":"Mark","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","caption":"Mark"},"sameAs":["https:\/\/x.com\/marketaylor"],"url":"https:\/\/marketaylor.synology.me\/?author=1"}]}},"jetpack_featured_media_url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/06\/go-gopher.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/717","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=717"}],"version-history":[{"count":7,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/717\/revisions"}],"predecessor-version":[{"id":734,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/717\/revisions\/734"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/media\/723"}],"wp:attachment":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=717"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=717"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}