{"id":22083,"date":"2020-06-16T17:03:38","date_gmt":"2020-06-16T17:03:38","guid":{"rendered":"http:\/\/get_ready_for_cloudinary_s_next_generation_javascript_sdks"},"modified":"2020-06-16T17:03:38","modified_gmt":"2020-06-16T17:03:38","slug":"get_ready_for_cloudinary_s_next_generation_javascript_sdks","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks","title":{"rendered":"Get Ready for Cloudinary\u2019s Next- Generation JavaScript SDKs"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Since its founding in 2012, Cloudinary has released software development kits (SDKs) in over a dozen languages and frameworks, adding feature after feature for numerous technologies. So far, those releases have proceeded in an evolutionary manner. We\u2019re now overhauling them to serve developers even better, starting with the JavaScript (JS) SDK. For details, see our recent post on <a href=\"https:\/\/cloudinary.com\/blog\/cloudinary_s_next_generation_developers_sdks\">Cloudinary\u2019s next-generation developer SDKs<\/a>.<\/p>\n<h2>A New Dawn<\/h2>\n<p>While building SDKs, we always ask ourselves these three same questions:<\/p>\n<ul>\n<li>What\u2019s the right balance between abstraction and primitives?<\/li>\n<li>How do we future-proof our internal features?<\/li>\n<li>How do we future-proof the JavaScript (JS) technology stack and browser updates?<\/li>\n<\/ul>\n<p>The answers are ever more important because, to meet the requirement of backwards compatibility, once the decisions are made and development proceeds, backtracking would be an astronomical task..<\/p>\n<p>Hence, we\u2019re brainstorming how to improve our entire stack of JS SDKs by modernizing our toolkit.<\/p>\n<p>Even though the process is still in the early stage, we\u2019d like to share with you our current thinking and solicit your feedback.<\/p>\n<h2>Our SDK Goals<\/h2>\n<p>We\u2019re aiming for four goals for our new SDKs:<\/p>\n<p><strong>simplicity, enhanced semantics, smaller bundle size, and code reuse.<\/strong><\/p>\n<h3>Simplicity More Desirable Than Flexibility<\/h3>\n<p>Instead of offering a jack-of-all-trades SDK, we\u2019ll focus on ease of use, which matters the most to developers. Ease of use is different things to different people, however. To us, it means that you can read your code as easily as running it.<\/p>\n<p>As flexible as our APIs are, that flexibility comes at the price of readability. Consider this snippet:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">tag = cl.image(<span class=\"hljs-string\">'sample.jpg'<\/span>, {\n          <span class=\"hljs-attr\">crop<\/span>: <span class=\"hljs-string\">\"scale\"<\/span>,\n          <span class=\"hljs-attr\">width<\/span>: <span class=\"hljs-string\">\"auto:breakpoints\"<\/span>,\n        })\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>The current API accepts a map of configuration parameters, which, though easily extensible,  are difficult to decipher in complex transformations.Plus, their seemingly unrelated properties (siblings) add to the confusion.<\/p>\n<p>We propose the following instead for much-improved readability in output along with grouping of relevant properties:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\">Let img = <span class=\"hljs-keyword\">New<\/span> TransformableImage(<span class=\"hljs-string\">'sample.jpg'<\/span>)\n\t.addAction(scale().width(<span class=\"hljs-string\">'auto'<\/span>))\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>In the current SDK, the relativity of the scale and width properties above is hidden. The new syntax clearly shows that they are related.<\/p>\n<p>Furthermore, we plan to use types behind the scenes since all modern IDEs feature the much desired auto-completion capability.<\/p>\n<h3>Semantics As a First-Class Citizen<\/h3>\n<p>For optimum flexibility, the Cloudinary URL represents an expression, not functionality.\nThe current SDK syntax bridges the functionality gap but falls short by merely renaming arguments and making them more accessible. Also lacking is an  in-depth understanding of how the properties, such as scale and width interact.<\/p>\n<p>As a contrast, the new SDK syntax takes semantics seriously. We\u2019ll define all the operations that are performed on assets as actions, e.g., resizing, scaling, and adjusting assets. Along with proper namespaces, enhanced semantics translates to a superb developer experience, enabling you to discover features much more readily.<\/p>\n<h3>Minimum Bundle Size Through Tree Shaking<\/h3>\n<p>The large footprint of the SDK has long been a sour point at Cloudinary. As more features are added, the SDK bundle size correspondingly grows. Additionally, the current SDK is one-size-fits-all. Even if you use only a small subset of its features, you must download the entire package.<\/p>\n<p>The new SDK will be ESM (ES Module) friendly, complete with full support for tree-shaking. That is, you bundle only what you use and throw away the rest.<\/p>\n<p>Also, in the works are new plugins you can install instead of having to incorporate them in the main bundle. See this example:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">Import * <span class=\"hljs-keyword\">as<\/span> Resize, {scale, resize, <span class=\"hljs-comment\">\/* and more *\/<\/span>  } <span class=\"hljs-keyword\">from<\/span> \u2018@cloudinary\/resize\u2019\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h3>Share Functionality Across SDKs<\/h3>\n<p>Since our SDKs were not developed in unison, some features exist in multiple versions but with slight variations. For consistency and uniformity, we\u2019ll unify all the code into shared libraries to support an ever-growing array of frameworks. That\u2019s the right formula for proper growth!<\/p>\n<h3>The Endgame<\/h3>\n<p>For all that the above goals won\u2019t be easy to achieve, we\u2019re committed to delivering the best developer experience possible. After all, coding should be a delight, not a chore.<\/p>\n<p>Our code has been open source from Day One so feel free to track its progress on <a href=\"https:\/\/github.com\/cloudinary\/cloudinary-js-base\">GitHub<\/a>.Above all, send us your thoughts.<\/p>\n<p>We\u2019ll be back soon with more updates.<\/p>\n<p><strong>The Cloudinary SDK team<\/strong><\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":22084,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[25,177,263],"class_list":["post-22083","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-asset-management","tag-javascript","tag-sdk"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Announcing the Next Generation Cloudinary JavaScript SDKs<\/title>\n<meta name=\"description\" content=\"Cloudinary JavaScript SDKs ensure that developers get exactly what they need for optimized websites accompanied by fast page loads\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Get Ready for Cloudinary\u2019s Next- Generation JavaScript SDKs\" \/>\n<meta property=\"og:description\" content=\"Cloudinary JavaScript SDKs ensure that developers get exactly what they need for optimized websites accompanied by fast page loads\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-16T17:03:38+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/cloudinary.com\/blog\/wp-content\/uploads\/sites\/12\/2022\/02\/JavaScript-SDKs.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1540\" \/>\n\t<meta property=\"og:image:height\" content=\"847\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Get Ready for Cloudinary\u2019s Next- Generation JavaScript SDKs\",\"datePublished\":\"2020-06-16T17:03:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks\"},\"wordCount\":9,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720230\/Web_Assets\/blog\/JavaScript-SDKs_220849332a\/JavaScript-SDKs_220849332a.png?_i=AA\",\"keywords\":[\"Asset Management\",\"Javascript\",\"SDK\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2020\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks\",\"url\":\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks\",\"name\":\"Announcing the Next Generation Cloudinary JavaScript SDKs\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720230\/Web_Assets\/blog\/JavaScript-SDKs_220849332a\/JavaScript-SDKs_220849332a.png?_i=AA\",\"datePublished\":\"2020-06-16T17:03:38+00:00\",\"description\":\"Cloudinary JavaScript SDKs ensure that developers get exactly what they need for optimized websites accompanied by fast page loads\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720230\/Web_Assets\/blog\/JavaScript-SDKs_220849332a\/JavaScript-SDKs_220849332a.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720230\/Web_Assets\/blog\/JavaScript-SDKs_220849332a\/JavaScript-SDKs_220849332a.png?_i=AA\",\"width\":1540,\"height\":847},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get Ready for Cloudinary\u2019s Next- Generation JavaScript SDKs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Announcing the Next Generation Cloudinary JavaScript SDKs","description":"Cloudinary JavaScript SDKs ensure that developers get exactly what they need for optimized websites accompanied by fast page loads","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:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks","og_locale":"en_US","og_type":"article","og_title":"Get Ready for Cloudinary\u2019s Next- Generation JavaScript SDKs","og_description":"Cloudinary JavaScript SDKs ensure that developers get exactly what they need for optimized websites accompanied by fast page loads","og_url":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks","og_site_name":"Cloudinary Blog","article_published_time":"2020-06-16T17:03:38+00:00","og_image":[{"width":1540,"height":847,"url":"http:\/\/cloudinary.com\/blog\/wp-content\/uploads\/sites\/12\/2022\/02\/JavaScript-SDKs.png","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks"},"author":{"name":"","@id":""},"headline":"Get Ready for Cloudinary\u2019s Next- Generation JavaScript SDKs","datePublished":"2020-06-16T17:03:38+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks"},"wordCount":9,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720230\/Web_Assets\/blog\/JavaScript-SDKs_220849332a\/JavaScript-SDKs_220849332a.png?_i=AA","keywords":["Asset Management","Javascript","SDK"],"inLanguage":"en-US","copyrightYear":"2020","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks","url":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks","name":"Announcing the Next Generation Cloudinary JavaScript SDKs","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720230\/Web_Assets\/blog\/JavaScript-SDKs_220849332a\/JavaScript-SDKs_220849332a.png?_i=AA","datePublished":"2020-06-16T17:03:38+00:00","description":"Cloudinary JavaScript SDKs ensure that developers get exactly what they need for optimized websites accompanied by fast page loads","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720230\/Web_Assets\/blog\/JavaScript-SDKs_220849332a\/JavaScript-SDKs_220849332a.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720230\/Web_Assets\/blog\/JavaScript-SDKs_220849332a\/JavaScript-SDKs_220849332a.png?_i=AA","width":1540,"height":847},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Get Ready for Cloudinary\u2019s Next- Generation JavaScript SDKs"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720230\/Web_Assets\/blog\/JavaScript-SDKs_220849332a\/JavaScript-SDKs_220849332a.png?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22083","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=22083"}],"version-history":[{"count":0,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22083\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/22084"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=22083"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=22083"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=22083"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}