{"id":884,"date":"2016-07-20T09:45:36","date_gmt":"2016-07-20T14:45:36","guid":{"rendered":"https:\/\/www.teamdesk.net\/blog\/?p=884"},"modified":"2016-07-20T09:45:53","modified_gmt":"2016-07-20T14:45:53","slug":"call-url-action-improvements","status":"publish","type":"post","link":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/","title":{"rendered":"Call URL Action Improvements"},"content":{"rendered":"<p>Today we\u2019ve added an ability to supply additional headers and perform POST, PUT, PATCH and DELETE HTTP calls to Call URL Action. Action\u2019s setup interface is extended with Method, Headers and Body fields; latter is visible when method selected is POST, PUT or PATCH. Support for more HTTP methods opens the road for the database to perform API calls to many services such as Twitter or IFTTT. In addition, we added conditional content generation and improved hidden logic behind &lt;% %&gt; code blocks.<\/p>\n<p><!--more--><\/p>\n<h2>Recap<\/h2>\n<p>We introduced code blocks first with XHTML \u2013 Formulas. The idea behind code blocks was to allow writing XHTML markup directly, eliminating quoting and escaping the string needed in regular formulas, with placeholders for database-provided content. Also, placeholders escape characters that have special meaning in HTML automatically. Later we\u2019ve added format blocks that perform implicit call to Format() function to produce locale-aware text representation \u00a0for dates, times and numbers. As primary function of XHTML \u2013 Formulas\u00a0is to\u00a0provide HTML styling for column\u2019s content, the formula produces no markup when one of the format\/code block\u2019s calculated value is NULL. If there is no content, no markup needed.<\/p>\n<p>We took this logic intact to Call URL\u2019s Request property, but there it introduced a problem \u2013 nullifying whole URL when one code block evaluates to NULL results to failures on attempt to call web server with no URL provided. It became clear that further expansion of this logic XML and JSON will lead to more errors as empty content is not valid in either XML or JSON. So, we have decided to change format\/code blocks behavior: restrict their usage to well-defined positions and adopt the behavior to the context code\/format block is used in to ensure its output won\u2019t break the result. Plus, we are introducing conditional content generation via &lt;%? <em>condition<\/em> %&gt;<em>content<\/em>&lt;%?%&gt;. Changes only apply to Call URL formulas, XHTML \u2013 Formula behavior is left intact.<\/p>\n<p>Let\u2019s see how new logic will work for each type of content.<\/p>\n<h3>Request URL<\/h3>\n<p>URL can be divided into logical parts \u2013 server address:<\/p>\n<p>protocol:\/\/server\/path\/to\/api<\/p>\n<p>\u2026and optional query string part<\/p>\n<p>?param=value&amp;param=value\u2026<\/p>\n<p>If query string part is detected in Request URL formula we break it into name=value pairs. As code blocks are used to generate database-provided values you can use them in place of parameter <em>values<\/em> only. It is unlikely that parameter <em>name<\/em> is database controlled. When value contains code block(s) and one of code blocks outputs NULL we\u2019ll remove preceding ampersand, parameter name and equal sign, so instead of no-value-no-URL it\u2019s now no-value-no-parameter logic. If you want to keep parameter in place you can always wrap code block expression with Nz(). Non-empty content produced by code block is automatically encoded according to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Percent-encoding\">URL encoding<\/a> rules.<\/p>\n<p>Conditional blocks can only appear either in the beginning or end of query string and around ampersands \u2013 this way you can safely remove any number of name-value pairs without a chance of generating malformed query string.<\/p>\n<p>Back to request URL, in server address part restrictions are relaxed, and condition and code blocks can be placed anywhere. The only restriction is that condition block cannot include question mark though it is not fatal \u2013 presence of question mark with no query string has no special meaning nothing, but absence of question mark due to false condition will make query string the part of server address which is obviously an error.<\/p>\n<h4><em>Note on format code blocks<\/em><\/h4>\n<p>Format blocks are allowed to keep the compatibility with formulas already written but their use may lead to unexpected results. The service to call likely expects dates, times and numbers in certain predefined format. As format block performs implicit Format([Column]) call, the value is formatted according to locale preferences: in case Call URL action is triggered from Time-Dependent or Periodic trigger this is the locale of the database, but in case of Record Change triggers this is the locale of the <em>user<\/em> performing the change \u2013 in case of, say, server expecting the date in US format and user\u2019s UK locale you\u2019ll likely get back completely unexpected result. Instead of using format blocks we would recommend to use code blocks performing explicit Format() call explicitly supplying locale identifier.<\/p>\n<p>The only real use for format blocks is an injection of raw URL content via &lt;%=[URL Column]%&gt; or &lt;%=[URL Formula]%&gt;. Since format block refers to URL column\/formula type we do not perform encoding.<\/p>\n<h3>Headers<\/h3>\n<p>HTTP headers consist of name:value pairs each pair is placed on separate line. As each header type require value in its own format we do not expect much use for database content. Nevertheless, headers behave similar to quest strings. Code blocks are allowed in place of values only; NULL value generated by code block removes whole name:value pair; condition blocks are allowed only at the beginning or end of line.<\/p>\n<p>As there is no standard for encoding header values, code block results are placed verbatim to the formula output with one special case for <a href=\"https:\/\/en.wikipedia.org\/wiki\/Basic_access_authentication\">basic access authentication<\/a> (BA). To authorize via BA you must supply<\/p>\n<p>Authorization: Basic &lt;base64-encoded-username-colon-password&gt;<\/p>\n<p>You can supply username and password separated by colon either pre-encoded with base64 (won\u2019t contain colon) or in plain text (should contain colon even if password is empty); in latter case we\u2019ll encode it via base64 algorithm automatically.<\/p>\n<h3>Request Body: Form<\/h3>\n<p>This type mimics the functionality implemented in the browser to send user input to the server. As with query string part of Request URL input consist of <em>param=value<\/em> pairs separated by ampersand except of there is no question mark at the beginning. Logic is similar as well: code blocks can only be placed in a value part, NULL value produced by code block remove preceding ampersand, parameter name and equal sign, condition blocks are allowed in the beginning or end of the formula or around ampersand. Use of format blocks is disabled due there is no well-defined formatting rules; use code blocks, and format date, time and numbers manually according third-party service specification.<\/p>\n<h3>Request Body: XML<\/h3>\n<p>Here we have two distinct behaviors for code blocks placed inside of attribute value quotes and code blocks between tag names. Any format\/code block inside attribute value quotes resulting to NULL will remove preceding attribute name, equal sign and surrounding quotes. Format\/Code blocks placed between tags and resulting to NULL render no text but keep surrounding content intact.<\/p>\n<p>To exclude elements from rendering condition blocks can be placed in a text between tags, but not between attributes or at the document level, and should wrap both opening and closing tag. As XML has well defined culture-invariant type system, format blocks are no longer restricted to only column references (from where we derive formatting in case of Request URL). You can write any expression that will be formatted according to XML rules. Boolean expressions are formatted as true\/false. Numbers contain no group separator and always use dot as a decimal point. Dates are formatted as yyyy-mm-dd. Times are rendered in hh:mm:ss using 24 hour format. Timestamps are formatted as composition of date and time using capital letter T as a separator between parts and Z at the end to designate UTC timezone. Durations are dumped as a number of seconds in PTnnnnS format.<\/p>\n<h3>Request Body: JSON<\/h3>\n<p>JSON core concept is value, either primitive (null, true\/false for booleans, numbers, or text enclosed in quotes) or composite &#8211; array or object. Array is a comma separated list of values (primitive, arrays or objects) enclosed in square brackets. Object is comma separated list of &#8220;name&#8221;: value pairs surrounded by curly braces. Top level content is a single value, primitive and composite. No empty content is allowed. There is no special format for dates, times or timestamps, they are typically produced as quoted strings in <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_8601\">ISO 8601<\/a> format like timestamps in XML.<\/p>\n<p>Format blocks can appear wherever value is expected. Since JSON data is typed they support expressions and produce culture-invariant formatted values. As string can be rendered either as <em>&#8220;some text&#8221;<\/em> or <em>null<\/em>, format blocks cannot appear inside of quotes; use code blocks instead.<\/p>\n<p>Condition blocks can only appear inside of objects or arrays after opening bracket, before closing bracket or around commas.<\/p>\n<h3>Request Body: Text<\/h3>\n<p>This type can be used to generate any kind of structured or unstructured text content. Condition\/code\/format blocks are allowed everywhere. No encoding is performed. Format blocks produce locale-aware formatted values.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today we\u2019ve added an ability to supply additional headers and perform POST, PUT, PATCH and DELETE HTTP calls to Call URL Action. Action\u2019s setup interface is extended with Method, Headers and Body fields; latter is visible when method selected is POST, PUT or PATCH. Support for more HTTP methods opens the road for the database [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":885,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-884","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-whats-new"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Call URL Action Improvements - TeamDesk Blog<\/title>\n<meta name=\"description\" content=\"We\u2019ve added an ability to supply additional headers and perform POST, PUT, PATCH and DELETE HTTP calls to Call URL Action\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Call URL Action Improvements - TeamDesk Blog\" \/>\n<meta property=\"og:description\" content=\"We\u2019ve added an ability to supply additional headers and perform POST, PUT, PATCH and DELETE HTTP calls to Call URL Action\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/\" \/>\n<meta property=\"og:site_name\" content=\"TeamDesk Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-07-20T14:45:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-07-20T14:45:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.teamdesk.net\/blog\/wp-content\/uploads\/2016\/07\/wordle.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1648\" \/>\n\t<meta property=\"og:image:height\" content=\"1107\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Kirill Bondar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirill Bondar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/\"},\"author\":{\"name\":\"Kirill Bondar\",\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/#\\\/schema\\\/person\\\/22c4c05bd657513c8b00122fa364c8d2\"},\"headline\":\"Call URL Action Improvements\",\"datePublished\":\"2016-07-20T14:45:36+00:00\",\"dateModified\":\"2016-07-20T14:45:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/\"},\"wordCount\":1432,\"commentCount\":5,\"image\":{\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/07\\\/wordle.png\",\"articleSection\":[\"What's New\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/\",\"url\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/\",\"name\":\"Call URL Action Improvements - TeamDesk Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/07\\\/wordle.png\",\"datePublished\":\"2016-07-20T14:45:36+00:00\",\"dateModified\":\"2016-07-20T14:45:53+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/#\\\/schema\\\/person\\\/22c4c05bd657513c8b00122fa364c8d2\"},\"description\":\"We\u2019ve added an ability to supply additional headers and perform POST, PUT, PATCH and DELETE HTTP calls to Call URL Action\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/07\\\/wordle.png\",\"contentUrl\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/07\\\/wordle.png\",\"width\":1648,\"height\":1107},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/whats-new\\\/call-url-action-improvements\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Call URL Action Improvements\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/\",\"name\":\"TeamDesk Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/#\\\/schema\\\/person\\\/22c4c05bd657513c8b00122fa364c8d2\",\"name\":\"Kirill Bondar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc5bc844095b5753ccc73c589c028bf16615674f289668146bbd59205a08a52d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc5bc844095b5753ccc73c589c028bf16615674f289668146bbd59205a08a52d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc5bc844095b5753ccc73c589c028bf16615674f289668146bbd59205a08a52d?s=96&d=mm&r=g\",\"caption\":\"Kirill Bondar\"},\"url\":\"https:\\\/\\\/www.teamdesk.net\\\/blog\\\/author\\\/kirill-bondar\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Call URL Action Improvements - TeamDesk Blog","description":"We\u2019ve added an ability to supply additional headers and perform POST, PUT, PATCH and DELETE HTTP calls to Call URL Action","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:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/","og_locale":"en_US","og_type":"article","og_title":"Call URL Action Improvements - TeamDesk Blog","og_description":"We\u2019ve added an ability to supply additional headers and perform POST, PUT, PATCH and DELETE HTTP calls to Call URL Action","og_url":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/","og_site_name":"TeamDesk Blog","article_published_time":"2016-07-20T14:45:36+00:00","article_modified_time":"2016-07-20T14:45:53+00:00","og_image":[{"width":1648,"height":1107,"url":"https:\/\/www.teamdesk.net\/blog\/wp-content\/uploads\/2016\/07\/wordle.png","type":"image\/png"}],"author":"Kirill Bondar","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirill Bondar","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/#article","isPartOf":{"@id":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/"},"author":{"name":"Kirill Bondar","@id":"https:\/\/www.teamdesk.net\/blog\/#\/schema\/person\/22c4c05bd657513c8b00122fa364c8d2"},"headline":"Call URL Action Improvements","datePublished":"2016-07-20T14:45:36+00:00","dateModified":"2016-07-20T14:45:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/"},"wordCount":1432,"commentCount":5,"image":{"@id":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/#primaryimage"},"thumbnailUrl":"https:\/\/www.teamdesk.net\/blog\/wp-content\/uploads\/2016\/07\/wordle.png","articleSection":["What's New"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/","url":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/","name":"Call URL Action Improvements - TeamDesk Blog","isPartOf":{"@id":"https:\/\/www.teamdesk.net\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/#primaryimage"},"image":{"@id":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/#primaryimage"},"thumbnailUrl":"https:\/\/www.teamdesk.net\/blog\/wp-content\/uploads\/2016\/07\/wordle.png","datePublished":"2016-07-20T14:45:36+00:00","dateModified":"2016-07-20T14:45:53+00:00","author":{"@id":"https:\/\/www.teamdesk.net\/blog\/#\/schema\/person\/22c4c05bd657513c8b00122fa364c8d2"},"description":"We\u2019ve added an ability to supply additional headers and perform POST, PUT, PATCH and DELETE HTTP calls to Call URL Action","breadcrumb":{"@id":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/#primaryimage","url":"https:\/\/www.teamdesk.net\/blog\/wp-content\/uploads\/2016\/07\/wordle.png","contentUrl":"https:\/\/www.teamdesk.net\/blog\/wp-content\/uploads\/2016\/07\/wordle.png","width":1648,"height":1107},{"@type":"BreadcrumbList","@id":"https:\/\/www.teamdesk.net\/blog\/whats-new\/call-url-action-improvements\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.teamdesk.net\/blog\/"},{"@type":"ListItem","position":2,"name":"Call URL Action Improvements"}]},{"@type":"WebSite","@id":"https:\/\/www.teamdesk.net\/blog\/#website","url":"https:\/\/www.teamdesk.net\/blog\/","name":"TeamDesk Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.teamdesk.net\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.teamdesk.net\/blog\/#\/schema\/person\/22c4c05bd657513c8b00122fa364c8d2","name":"Kirill Bondar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/dc5bc844095b5753ccc73c589c028bf16615674f289668146bbd59205a08a52d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/dc5bc844095b5753ccc73c589c028bf16615674f289668146bbd59205a08a52d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dc5bc844095b5753ccc73c589c028bf16615674f289668146bbd59205a08a52d?s=96&d=mm&r=g","caption":"Kirill Bondar"},"url":"https:\/\/www.teamdesk.net\/blog\/author\/kirill-bondar\/"}]}},"_links":{"self":[{"href":"https:\/\/www.teamdesk.net\/blog\/wp-json\/wp\/v2\/posts\/884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.teamdesk.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.teamdesk.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.teamdesk.net\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.teamdesk.net\/blog\/wp-json\/wp\/v2\/comments?post=884"}],"version-history":[{"count":1,"href":"https:\/\/www.teamdesk.net\/blog\/wp-json\/wp\/v2\/posts\/884\/revisions"}],"predecessor-version":[{"id":886,"href":"https:\/\/www.teamdesk.net\/blog\/wp-json\/wp\/v2\/posts\/884\/revisions\/886"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.teamdesk.net\/blog\/wp-json\/wp\/v2\/media\/885"}],"wp:attachment":[{"href":"https:\/\/www.teamdesk.net\/blog\/wp-json\/wp\/v2\/media?parent=884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.teamdesk.net\/blog\/wp-json\/wp\/v2\/categories?post=884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.teamdesk.net\/blog\/wp-json\/wp\/v2\/tags?post=884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}