{"id":1542172,"date":"2022-04-07T13:41:29","date_gmt":"2022-04-07T20:41:29","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1542172"},"modified":"2022-04-19T11:25:47","modified_gmt":"2022-04-19T18:25:47","slug":"rest-is-up-to-the-task","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task","title":{"rendered":"Rest is up to the task"},"author":7451,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[738191],"tags":[764672,96582,27491,34741,29571],"industry":[],"product":[36831,36601],"class_list":["post-1542172","blog","type-blog","status-publish","format-standard","hentry","category-developers","tag-amd","tag-arcgis-api-for-javascript","tag-jsapi4","tag-rest","tag-tasks","product-js-api-arcgis","product-developers"],"acf":{"short_description":"Tasks have been deprecated since 4.20. They will be removed at 4.24.","flexible_content":[{"acf_fc_layout":"content","content":"<p>At version 4.20 of the ArcGIS API for JavaScript, we deprecated <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/4.20\/#deprecated-classes-properties-methods-events\" target=\"_blank\" rel=\"noopener\">Tasks<\/a> in favor of using more modular classes and objects found inside the <code>esri\/rest<\/code> folder. At <strong>version<\/strong> <strong>4.24<\/strong> (summer release) of the ArcGIS API for JavaScript, we will be <strong>removing<\/strong> support for Tasks.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1544332,"id":1544332,"title":"\"esri\/rest\" folder","filename":"all-REST-toc.png","filesize":1093477,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/all-REST-toc.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task\/all-rest-toc","alt":"\"esri\/rest\" folder","author":"7451","description":"\"esri\/rest\" folder","caption":"\"esri\/rest\" folder","name":"all-rest-toc","status":"inherit","uploaded_to":1542172,"date":"2022-04-06 21:03:00","modified":"2022-04-06 21:03:40","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":3226,"height":1810,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/all-REST-toc-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/all-REST-toc.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/all-REST-toc.png","medium_large-width":768,"medium_large-height":431,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/all-REST-toc.png","large-width":1920,"large-height":1077,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/all-REST-toc-1536x862.png","1536x1536-width":1536,"1536x1536-height":862,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/all-REST-toc-2048x1149.png","2048x2048-width":2048,"2048x2048-height":1149,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/all-REST-toc-826x463.png","card_image-width":826,"card_image-height":463,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/all-REST-toc-1920x1077.png","wide_image-width":1920,"wide_image-height":1077}},"image_position":"center","orientation":"horizontal","hyperlink":"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-rest-closestFacility.html"},{"acf_fc_layout":"content","content":"<p>These changes are already available for our users to test using <code>next<\/code> via CDN and NPM: <a href=\"https:\/\/github.com\/Esri\/feedback-js-api-next\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">https:\/\/github.com\/Esri\/feedback-js-api-next<\/a><\/p>\n<p>Why did we do this? This will make it easier to incorporate your code into a more modular app design, and also reduce unnecessary dependencies (you only import what you want). The new rest modules are functions, which do not require constructors, so you can use their methods immediately.<\/p>\n<p>Also, because of the more modular design, you can import just one or more methods of a rest module, instead of having to import the whole module. There is one caveat to that statement though, and we&#8217;ll discuss that after we see some code examples.<\/p>\n"},{"acf_fc_layout":"content","content":"<p>Now, let&#8217;s look at a couple of examples. First, this is how we used to handle querying using Tasks:<\/p>\n<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\"><span style=\"color: #998; font-style: italic;\">\/\/ example of using deprecated QueryTask<\/span>\r\n<span style=\"color: #0086b3;\">require<\/span>([\r\n  <span style=\"color: #d14;\">\"esri\/tasks\/QueryTask\"<\/span>, <span style=\"color: #d14;\">\"esri\/tasks\/support\/Query\"<\/span>, ...\r\n], <span style=\"color: #333; font-weight: bold;\">function<\/span>(QueryTask, Query, ...){\r\n\r\n  <span style=\"color: #998; font-style: italic;\">\/\/ URL to the layer of interest to query<\/span>\r\n  <span style=\"color: #333; font-weight: bold;\">let<\/span> queryUrl = <span style=\"color: #d14;\">\"https:\/\/sampleserver6.arcgisonline.com\/arcgis\/rest\/services\/Census\/MapServer\/3\"<\/span>;\r\n\r\n  <span style=\"color: #998; font-style: italic;\">\/\/ create a new QueryTask with URL from above<\/span>\r\n  <span style=\"color: #333; font-weight: bold;\">let<\/span> queryTask = <span style=\"color: #333; font-weight: bold;\">new<\/span> QueryTask({\r\n    url: queryUrl\r\n  });\r\n\r\n  <span style=\"color: #998; font-style: italic;\">\/\/ create the Query object<\/span>\r\n  <span style=\"color: #333; font-weight: bold;\">let<\/span> queryObject = <span style=\"color: #333; font-weight: bold;\">new<\/span> Query();\r\n  queryObject.where = <span style=\"color: #d14;\">\"STATE_NAME = 'Washington'\"<\/span>;\r\n  queryObject.outSpatialReference = { wkid:<span style=\"color: #008080;\">4269<\/span> };\r\n  queryObject.returnGeometry = <span style=\"color: #333; font-weight: 500;\">true<\/span>;\r\n  queryObject.outFields = [ <span style=\"color: #d14;\">\"HOUSEHOLDS\"<\/span> ];\r\n\r\n  <span style=\"color: #998; font-style: italic;\">\/\/ when resolved, returns features and graphics that satisfy the query<\/span>\r\n  queryTask.execute(queryObject).then(<span style=\"color: #333; font-weight: bold;\">function<\/span>(results){\r\n    <span style=\"color: #0086b3;\">console<\/span>.log(results.features);\r\n  });\r\n});\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<p>This is the same example as above, but using <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-rest-query.html\" target=\"_blank\" rel=\"noopener\"><code>esri\/rest\/query<\/code><\/a>:<\/p>\n<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\"><span style=\"color: #998; font-style: italic;\">\/\/ same example, but using \"esri\/rest\/query\"<\/span>\r\n<span style=\"color: #0086b3;\">require<\/span>([\r\n  <span style=\"color: #d14;\">\"esri\/rest\/query\"<\/span>, <span style=\"color: #d14;\">\"esri\/rest\/support\/Query\"<\/span>, ...\r\n], <span style=\"color: #333; font-weight: bold;\">function<\/span>(query, Query, ... ) {\r\n\r\n  <span style=\"color: #998; font-style: italic;\">\/\/ URL to the layer of interest to query<\/span>\r\n  <span style=\"color: #333; font-weight: bold;\">let<\/span> queryUrl = <span style=\"color: #d14;\">\"https:\/\/sampleserver6.arcgisonline.com\/arcgis\/rest\/services\/Census\/MapServer\/3\"<\/span>;\r\n\r\n  <span style=\"color: #998; font-style: italic;\">\/\/ create the Query object<\/span>\r\n  <span style=\"color: #333; font-weight: bold;\">let<\/span> queryObject = <span style=\"color: #333; font-weight: bold;\">new<\/span> Query();\r\n  queryObject.where = <span style=\"color: #d14;\">\"STATE_NAME = 'Washington'\"<\/span>;\r\n  queryObject.outSpatialReference = { wkid:<span style=\"color: #008080;\">4269<\/span> };\r\n  queryObject.returnGeometry = <span style=\"color: #333; font-weight: 500;\">true<\/span>;\r\n  queryObject.outFields = [ <span style=\"color: #d14;\">\"HOUSEHOLDS\"<\/span> ];\r\n\r\n  <span style=\"color: #998; font-style: italic;\">\/\/ when resolved, returns features and graphics that satisfy the query<\/span>\r\n  query.executeQueryJSON(queryUrl, queryObject).then(<span style=\"color: #333; font-weight: bold;\">function<\/span>(results){\r\n    <span style=\"color: #0086b3;\">console<\/span>.log(results.features);\r\n  });\r\n});\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<p>Notice that the code looks super similar? In this case (and in almost every case, actually) migrating from Tasks to rest is simple and straightforward and, thankfully, well documented. Here, we had to rename the modules in the <code>require<\/code> statement, and move the URL from the QueryTask constructor into the\u00a0<a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-rest-query.html#executeQueryJSON\" target=\"_blank\" rel=\"noopener\">executeQueryJSON()<\/a> method parameter.<\/p>\n<p>And here we have the same example as above, but we can also use <a href=\"https:\/\/www.npmjs.com\/package\/@arcgis\/core\" target=\"_blank\" rel=\"noopener\">@arcgis\/core<\/a> ES modules to import <code>@arcgis\/core\/rest\/query\/executeQueryJSON<\/code> so we don&#8217;t have to waste resources with loading the rest of the <code>esri\/rest\/query<\/code> methods:<\/p>\n<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\"><span style=\"color: #998; font-style: italic;\">\/\/ same example, but only load the query method of interest with ES Modules<\/span>\r\n<span style=\"color: #333; font-weight: bold;\">import<\/span> { executeQueryJSON } <span style=\"color: #333; font-weight: bold;\">from<\/span> <span style=\"color: #d14;\">\"@arcgis\/core\/rest\/query\"<\/span>;\r\n<span style=\"color: #333; font-weight: bold;\">import<\/span> Query <span style=\"color: #333; font-weight: bold;\">from<\/span> <span style=\"color: #d14;\">\"@arcgis\/core\/rest\/support\/Query\"<\/span>;\r\n\r\n<span style=\"color: #998; font-style: italic;\">\/\/ URL to the layer of interest to query<\/span>\r\n<span style=\"color: #333; font-weight: bold;\">let<\/span> queryUrl =\r\n  <span style=\"color: #d14;\">\"https:\/\/sampleserver6.arcgisonline.com\/arcgis\/rest\/services\/Census\/MapServer\/3\"<\/span>;\r\n\r\n<span style=\"color: #998; font-style: italic;\">\/\/ create the Query object<\/span>\r\n<span style=\"color: #333; font-weight: bold;\">let<\/span> queryObject = <span style=\"color: #333; font-weight: bold;\">new<\/span> Query({\r\n    where: <span style=\"color: #d14;\">\"STATE_NAME = 'Washington'\"<\/span>,\r\n    outSpatialReference: { wkid: <span style=\"color: #008080;\">4269<\/span> },\r\n    returnGeometry: <span style=\"color: #333; font-weight: 500;\">true<\/span>,\r\n    outFields: [<span style=\"color: #d14;\">\"HOUSEHOLDS\"<\/span>]\r\n});\r\n\r\n<span style=\"color: #998; font-style: italic;\">\/\/ when resolved, returns features and graphics that satisfy the query<\/span>\r\nexecuteQueryJSON(queryUrl, queryObject).then((results) =&gt; {\r\n  <span style=\"color: #0086b3;\">console<\/span>.log(results.features);\r\n});\r\n\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<p>Notice that the code also looks super similar? The main difference is that when <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Glossary\/Tree_shaking\" target=\"_blank\" rel=\"noopener\">tree-shaking<\/a> is enabled in your build tools, the app avoids loading the other 6 querying methods, which reduces load time and the resources consumed.<\/p>\n<p>It should also be noted, that rather than using the query modules directly, you should probably be using the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-layers-FeatureLayer.html#methods-summary\">query methods on the Layer<\/a>. This would include methods like <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-layers-FeatureLayer.html#queryFeatures\">queryFeatures<\/a>, <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-layers-FeatureLayer.html#queryRelatedFeatures\">queryRelatedFeatures<\/a>, and more. These query methods will take into account the capabilities of the backing service so you don&#8217;t have to.<\/p>\n<p>One last thing to note about this change is that we also deprecated the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-portal-Portal.html#helperServices\" target=\"_blank\" rel=\"noopener\">Portal helper methods<\/a> at version 4.21, and are <strong>removing<\/strong> these five Task-based functions at <strong>4.24<\/strong> as well:<\/p>\n<ul>\n<li><a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-portal-Portal.html#createClosestFacilityTask\" target=\"_blank\" rel=\"noopener\">Portal.createClosestFacilityTask<\/a><\/li>\n<li><a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-portal-Portal.html#createGeometryService\" target=\"_blank\" rel=\"noopener\">Portal.createGeometryService<\/a><\/li>\n<li><a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-portal-Portal.html#createPrintTask\" target=\"_blank\" rel=\"noopener\">Portal.createPrintTask<\/a><\/li>\n<li><a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-portal-Portal.html#createRouteTask\" target=\"_blank\" rel=\"noopener\">Portal.createRouteTask<\/a><\/li>\n<li><a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-portal-Portal.html#createServiceAreaTask\" target=\"_blank\" rel=\"noopener\">Portal.createServiceAreaTask<\/a><\/li>\n<\/ul>\n<p>We recommend using the URLs from the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-portal-Portal.html#helperServices\" target=\"_blank\" rel=\"noopener\">Portal.helperServices<\/a> with their respective <code>rest<\/code> modules instead. Let&#8217;s look at an example using <code><a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-rest-print.html\" target=\"_blank\" rel=\"noopener\">esri\/rest\/print<\/a><\/code> with helperServices.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\"><span style=\"color: #998; font-style: italic;\">\/\/ example using \"esri\/rest\/print\" with helperServices<\/span>\r\n<span style=\"color: #0086b3;\">require<\/span>([\r\n <span style=\"color: #d14;\">\"esri\/portal\/Portal\"<\/span>,\r\n <span style=\"color: #d14;\">\"esri\/rest\/print\"<\/span>,\r\n <span style=\"color: #d14;\">\"esri\/rest\/support\/PrintTemplate\"<\/span>,\r\n <span style=\"color: #d14;\">\"esri\/rest\/support\/PrintParameters\"<\/span>,\r\n ...\r\n], <span style=\"color: #333; font-weight: bold;\">function<\/span>(Portal, print, PrintTemplate, PrintParameters, ... ) {\r\n\r\n  <span style=\"color: #998; font-style: italic;\">\/\/ create new Portal object with relevant URL<\/span>\r\n  <span style=\"color: #333; font-weight: bold;\">const<\/span> portal = <span style=\"color: #333; font-weight: bold;\">new<\/span> Portal({\r\n     url: <span style=\"color: #d14;\">\"YOUR_PORTAL_URL\"<\/span>\r\n  });\r\n\r\n  <span style=\"color: #333; font-weight: bold;\">const<\/span> template = <span style=\"color: #333; font-weight: bold;\">new<\/span> PrintTemplate({\r\n    format: <span style=\"color: #d14;\">\"pdf\"<\/span>,\r\n    exportOptions: {\r\n      dpi: <span style=\"color: #008080;\">12<\/span>\r\n    },\r\n    layout: <span style=\"color: #d14;\">\"a4-portrait\"<\/span>,\r\n    layoutOptions: {\r\n      titleText: <span style=\"color: #d14;\">\"Gillette Stadium\"<\/span>,\r\n      authorText: <span style=\"color: #d14;\">\"Thomas B.\"<\/span>\r\n    }\r\n  });\r\n\r\n  <span style=\"color: #333; font-weight: bold;\">const<\/span> params = <span style=\"color: #333; font-weight: bold;\">new<\/span> PrintParameters({\r\n    view: view,\r\n    template: template\r\n  });\r\n\r\n  <span style=\"color: #998; font-style: italic;\">\/\/ load Portal instance<\/span>\r\n  portal.load().then(<span style=\"color: #333; font-weight: bold;\">function<\/span>() {\r\n    <span style=\"color: #998; font-style: italic;\">\/\/ display URLs to all helper services<\/span>\r\n    <span style=\"color: #0086b3;\">console<\/span>.log(<span style=\"color: #d14;\">\"Show helperServices URLs: \"<\/span>, portal.helperServices);\r\n    <span style=\"color: #998; font-style: italic;\">\/\/ access helperServices from the Portal instance<\/span>\r\n    <span style=\"color: #998; font-style: italic;\">\/\/ to get the print URL of interest<\/span>\r\n    <span style=\"color: #333; font-weight: bold;\">const<\/span> printURL = portal.helperServices.printTask.url;\r\n    <span style=\"color: #998; font-style: italic;\">\/\/ use helperServices to perform printing<\/span>\r\n    print.execute(printURL, params).then(printResult).catch(printError);\r\n  }\r\n\r\n  <span style=\"color: #333; font-weight: bold;\">function<\/span> <span style=\"color: #900; font-weight: bold;\">printResult<\/span>(result) {\r\n    <span style=\"color: #0086b3;\">console<\/span>.log(result.url);\r\n    <span style=\"color: #0086b3;\">window<\/span>.open(result.url);\r\n  }\r\n\r\n  <span style=\"color: #333; font-weight: bold;\">function<\/span> <span style=\"color: #900; font-weight: bold;\">printError<\/span>(err) {\r\n    <span style=\"color: #0086b3;\">console<\/span>.log(<span style=\"color: #d14;\">\"Something broke: \"<\/span>, err);\r\n  }\r\n});\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<p>We can see from the above code snippet that once we get the helperServices URLs, using <code>print<\/code> is straightforward. If we were unsure as to what service URLs are available from the portal, displaying the helperServices to the console is an easy way to see what options are available.<\/p>\n<p>Lastly, if you need more convincing, here\u2019s a great video from Ren\u00e9 that will really help you out:<br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=vVZkUdmia3w&amp;t=2s\" target=\"_blank\" rel=\"noopener\">Migrate off Tasks in the ArcGIS API for JavaScript TODAY!<\/a><\/p>\n<p><strong>TL;DR<\/strong><\/p>\n<p>The best time to update from Tasks to rest was 3 releases ago. The second best time, is now.<\/p>\n"}],"authors":[{"ID":7451,"user_firstname":"Noah","user_lastname":"Sager","nickname":"Noah Sager","user_nicename":"noah-sager","display_name":"Noah Sager","user_email":"NSager@esri.com","user_url":"https:\/\/www.noahsager.net\/","user_registered":"2018-03-21 18:21:19","user_description":"Passionate about JavaScript, maps, and writing (not necessarily in that order). Big fan of squirrels. Journeyman mapper of Utility Lines and Public Restrooms. Product Engineer on the ArcGIS API for JavaScript team. In Noah\u2019s spare time, he also enjoys parenting.","user_avatar":"<img alt='' src='https:\/\/secure.gravatar.com\/avatar\/6807cdccf3ddd5b30b84cdf9368ce6736c3d0ff9bd0a09c1f5efc03253069b64?s=96&#038;d=blank&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/6807cdccf3ddd5b30b84cdf9368ce6736c3d0ff9bd0a09c1f5efc03253069b64?s=192&#038;d=blank&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'\/>"},{"ID":7531,"user_firstname":"Rene","user_lastname":"Rubalcava","nickname":"r.rubalcava","user_nicename":"r-rubalcava","display_name":"Rene Rubalcava","user_email":"RRubalcava@esri.com","user_url":"http:\/\/odoe.net\/","user_registered":"2018-03-21 18:21:22","user_description":"SoftWhere Developer, blogger, author, geodev, and connoisseur of programming languages and JavaScript frameworks.\r\n\r\nI blog at https:\/\/odoe.net and post videos at https:\/\/www.youtube.com\/c\/renerubalcava\r\n\r\nI write code, sometimes it even works.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/03\/ReneRubalcava-213x200.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":[{"ID":1519642,"post_author":"4271","post_date":"2022-03-23 10:10:51","post_date_gmt":"2022-03-23 17:10:51","post_content":"","post_title":"What's new in ArcGIS API for JavaScript (4.23)","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"whats-new-in-arcgis-api-for-javascript-4-23","to_ping":"","pinged":"","post_modified":"2022-11-21 01:48:30","post_modified_gmt":"2022-11-21 09:48:30","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1519642","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":1510942,"post_author":"7451","post_date":"2022-03-24 07:00:25","post_date_gmt":"2022-03-24 14:00:25","post_content":"","post_title":"Introducing the new RouteLayer","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"introducing-the-new-routelayer","to_ping":"","pinged":"","post_modified":"2024-04-12 03:46:23","post_modified_gmt":"2024-04-12 10:46:23","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1510942","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"2","filter":"raw"},{"ID":1523752,"post_author":"100342","post_date":"2022-04-05 08:16:55","post_date_gmt":"2022-04-05 15:16:55","post_content":"","post_title":"What's New in Map Viewer (March 2022)","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"whats-new-in-map-viewer-march-2022","to_ping":"","pinged":"","post_modified":"2024-06-14 09:03:03","post_modified_gmt":"2024-06-14 16:03:03","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1523752","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"6","filter":"raw"}],"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/tasks-rip.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/Yield_Sign_DC.jpg"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Rest is up to the task<\/title>\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.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rest is up to the task\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-19T18:25:47+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task\"},\"author\":{\"name\":\"Noah Sager\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/31358cd525c152696fcd5fe96f49e068\"},\"headline\":\"Rest is up to the task\",\"datePublished\":\"2022-04-07T20:41:29+00:00\",\"dateModified\":\"2022-04-19T18:25:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task\"},\"wordCount\":6,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"amd\",\"ArcGIS API for JavaScript\",\"jsapi4\",\"REST\",\"Tasks\"],\"articleSection\":[\"Developers\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task\",\"name\":\"Rest is up to the task\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2022-04-07T20:41:29+00:00\",\"dateModified\":\"2022-04-19T18:25:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rest is up to the task\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/31358cd525c152696fcd5fe96f49e068\",\"name\":\"Noah Sager\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6807cdccf3ddd5b30b84cdf9368ce6736c3d0ff9bd0a09c1f5efc03253069b64?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6807cdccf3ddd5b30b84cdf9368ce6736c3d0ff9bd0a09c1f5efc03253069b64?s=96&d=blank&r=g\",\"caption\":\"Noah Sager\"},\"description\":\"Passionate about JavaScript, maps, and writing (not necessarily in that order). Big fan of squirrels. Journeyman mapper of Utility Lines and Public Restrooms. Product Engineer on the ArcGIS API for JavaScript team. In Noah\u2019s spare time, he also enjoys parenting.\",\"sameAs\":[\"https:\/\/www.noahsager.net\/\",\"https:\/\/www.linkedin.com\/in\/noah-sager\",\"https:\/\/x.com\/noashx\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/noah-sager\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Rest is up to the task","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.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task","og_locale":"en_US","og_type":"article","og_title":"Rest is up to the task","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2022-04-19T18:25:47+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task"},"author":{"name":"Noah Sager","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/31358cd525c152696fcd5fe96f49e068"},"headline":"Rest is up to the task","datePublished":"2022-04-07T20:41:29+00:00","dateModified":"2022-04-19T18:25:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task"},"wordCount":6,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["amd","ArcGIS API for JavaScript","jsapi4","REST","Tasks"],"articleSection":["Developers"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task","name":"Rest is up to the task","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2022-04-07T20:41:29+00:00","dateModified":"2022-04-19T18:25:47+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Rest is up to the task"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/31358cd525c152696fcd5fe96f49e068","name":"Noah Sager","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6807cdccf3ddd5b30b84cdf9368ce6736c3d0ff9bd0a09c1f5efc03253069b64?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6807cdccf3ddd5b30b84cdf9368ce6736c3d0ff9bd0a09c1f5efc03253069b64?s=96&d=blank&r=g","caption":"Noah Sager"},"description":"Passionate about JavaScript, maps, and writing (not necessarily in that order). Big fan of squirrels. Journeyman mapper of Utility Lines and Public Restrooms. Product Engineer on the ArcGIS API for JavaScript team. In Noah\u2019s spare time, he also enjoys parenting.","sameAs":["https:\/\/www.noahsager.net\/","https:\/\/www.linkedin.com\/in\/noah-sager","https:\/\/x.com\/noashx"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/noah-sager"}]}},"text_date":"April 7, 2022","author_name":"Multiple Authors","author_page":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/rest-is-up-to-the-task","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/04\/Yield_Sign_DC.jpg","primary_product":"ArcGIS Maps SDK for JavaScript","tag_data":[{"term_id":764672,"name":"amd","slug":"amd","term_group":0,"term_taxonomy_id":764672,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"},{"term_id":96582,"name":"ArcGIS API for JavaScript","slug":"arcgis-api-for-javascript","term_group":0,"term_taxonomy_id":96582,"taxonomy":"post_tag","description":"","parent":0,"count":58,"filter":"raw"},{"term_id":27491,"name":"jsapi4","slug":"jsapi4","term_group":0,"term_taxonomy_id":27491,"taxonomy":"post_tag","description":"","parent":0,"count":111,"filter":"raw"},{"term_id":34741,"name":"REST","slug":"rest","term_group":0,"term_taxonomy_id":34741,"taxonomy":"post_tag","description":"","parent":0,"count":5,"filter":"raw"},{"term_id":29571,"name":"Tasks","slug":"tasks","term_group":0,"term_taxonomy_id":29571,"taxonomy":"post_tag","description":"","parent":0,"count":15,"filter":"raw"}],"category_data":[{"term_id":738191,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":738191,"taxonomy":"category","description":"","parent":0,"count":422,"filter":"raw"}],"product_data":[{"term_id":36831,"name":"ArcGIS Maps SDK for JavaScript","slug":"js-api-arcgis","term_group":0,"term_taxonomy_id":36831,"taxonomy":"product","description":"","parent":36601,"count":362,"filter":"raw"},{"term_id":36601,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":36601,"taxonomy":"product","description":"","parent":0,"count":763,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=js-api-arcgis","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/1542172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/7451"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=1542172"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/1542172\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=1542172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=1542172"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=1542172"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=1542172"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=1542172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}