CINXE.COM
ASP.NET Core Web API: Best Practices | Pluralsight
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> <meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'/> <meta name="appRedirectPath" content="/library/courses/aspdotnet-core-6-web-api-best-practices/table-of-contents"/> <meta name="keywords"/> <meta property="og:image" content="https://pluralsight.imgix.net/course-images/aspdotnet-core-6-web-api-best-practices-v1.png"/> <meta name="twitter:image" content="https://pluralsight.imgix.net/course-images/aspdotnet-core-6-web-api-best-practices-v1.png"/> <meta name="description" content="Modern apps require web APIs more than ever before. This course will teach you best practices for writing better web APIs using ASP.NET Core."/> <meta property="og:description" content="Modern apps require web APIs more than ever before. This course will teach you best practices for writing better web APIs using ASP.NET Core."/> <meta name="twitter:description" content="Modern apps require web APIs more than ever before. This course will teach you best practices for writing better web APIs using ASP.NET Core."/> <meta name="twitter:card" content="summary_large_image"/> <meta name="twitter:site" content="@pluralsight"/> <meta name="robots" value="index, follow"/> <meta name="standard-library" value="true"/> <meta name="product-line" content="Skills"/> <meta name="thumbnail" content="https://pluralsight.imgix.net/course-images/aspdotnet-core-6-web-api-best-practices-v1.png"/> <meta name="authors" content="Steve Smith"/> <meta name="roles" content="Software Development"/> <meta name="highlight-combined-role" content="Software Development"/> <meta name="certifications"/> <meta name="skill-levels" content="Advanced"/> <meta name="publish-date" content="Mon Jul 08, 2024 19:45:12 MST"/> <meta name="rating" content="4.6"/> <meta name="rating-count" content="108"/> <meta name="prodId" content="aspdotnet-core-6-web-api-best-practices"/> <meta name="courseName" content="aspdotnet-core-6-web-api-best-practices"/> <meta name="duration" content="PT3H11M7S"/> <meta name="retired" content="false"/> <meta name="imageJson" content="{"alt":"ASP.NET Core Web API: Best Practices","url":"https://pluralsight.imgix.net/course-images/aspdotnet-core-6-web-api-best-practices-v1.png"}"/> <meta name="display-date-formatted" content="2024-07-08T19:45:12.000Z"/> <meta name="updated-date" content="2024-07-08T19:45:12.000"/> <meta name="cludo:date" content="2024-07-08T19:45:12.000"/> <meta name="categories" content="course"/> <meta name="cludo:category" content="course"/> <meta name="standard-library" content="true"/> <meta name="level-1-tags"/> <meta name="level-2-tags"/> <meta name="level-3-tags"/> <script defer="defer" type="text/javascript" src="/.rum/@adobe/helix-rum-js@%5E2/dist/rum-standalone.js"></script> <link rel="canonical" href="https://www.pluralsight.com/courses/aspdotnet-core-6-web-api-best-practices"/> <script data-cfasync="false" data-prompt='auto' data-privacy-policy="https://www.pluralsight.com/privacy" src="https://transcend-cdn.com/cm/b8abd831-c4a2-4a4f-8fe7-475bb37be895/airgap.js"></script> <script data-cfasync="false">window.wcmmodedisabled = true;</script> <script data-cfasync="false"> function getParameterByName(e,n){n||(n=window.location.href),e=e.replace(/[\[\]]/g,"\\$&");var o=new RegExp("[?&]"+e+"(=([^&#]*)|&|#|$)").exec(n);return o&&o[2]?decodeURIComponent(o[2].replace(/\+/g," ")):""}function changeHistoryQueryParam(e,n,o,t,a){if(history.pushState){var i=""==window.location.search?"?":window.location.search;if(-1!==decodeURIComponent(i).indexOf(e+"=")){var d=getParameterByName(e);if(t)if(o){var c=(p=d.split(",")).indexOf(n);if(c>-1&&p.splice(c,1),0===p.length){var r=new RegExp("&?"+e+"=[^&]*","g");i=i.replace(r,"")}else i=i.replace(e+"="+encodeURIComponent(d),e+"="+encodeURIComponent(p.join(",")))}else{var p=[];d?p=d.split(","):d="",-1===p.indexOf(n)&&(p.push(n),i=i.replace(e+"="+encodeURIComponent(d),e+"="+encodeURIComponent(p.join(","))))}else if(o){r=new RegExp("&?"+e+"=[^&]*","g");i=i.replace(r,"")}else i=i.replace(e+"="+encodeURIComponent(d),e+"="+encodeURIComponent(n))}else o||(i+="?"==i?e+"="+encodeURIComponent(n):"&"+e+"="+encodeURIComponent(n));var s=window.location.protocol+"//"+window.location.host+window.location.pathname+(a?decodeURIComponent(i):i);window.history.pushState({path:s},"",s)}}function dtmEventTrigger(e,n){var o=new CustomEvent(e,{bubbles:!0,cancelable:!1,detail:n});document.querySelector("body").dispatchEvent(o)}window.loadRemoteScript=function(e,n,o,t,a){var i=document.createElement("script");i.type=n||"text/javascript",i.id=t||null,1==o&&(i.async=o||1),i.readyState?i.onreadystatechange=function(){"loaded"!=i.readyState&&"complete"!=i.readyState||(i.onreadystatechange=null,a())}:i.onload=function(){a()},i.src=("https:"==document.location.protocol?"https://":"http://")+e,document.getElementsByTagName("head")[0].appendChild(i)};var doNotTrack=document.cookie.indexOf("ps_optout=1")>-1||document.URL.indexOf("dnt=true")>-1,oneHour=36e5,oneYear=24*oneHour*365,trkDate=new Date(Date.now()+oneHour);document.cookie="ps_trk="+(doNotTrack?"0":"1")+"; expires="+trkDate.toUTCString()+"; path=/"+(document.URL.indexOf("pluralsight.com")>-1?"; domain=pluralsight.com":"");var firstVisit=-1==document.cookie.indexOf("fv=");document.cookie="fv="+(firstVisit?"1":"0")+"; expires="+new Date(Date.now()+oneYear).toUTCString()+"; path=/"+(document.URL.indexOf("pluralsight.com")>-1?"; domain=pluralsight.com":""),window.dnbData={},document.cookie.indexOf("ps_trk=1")>-1&&"undefined"!=typeof dnbvid&&dnbvid.getData("api7831","json","T",function(e){window.dnbData=e,window.promoCheck&&!window.promoCheckRan&&window.promoCheck()}),document.addEventListener("at-content-rendering-succeeded",function(){window.targetFinished=!0},!1),document.addEventListener("at-content-rendering-failed",function(){window.targetFinished=!0},!1),document.addEventListener("at-content-rendering-no-offers",function(){window.targetFinished=!0},!1); </script> <meta name="featureFlags" content="consentautoprompt|munchkin|b2c_cart|b2b_cart|unified|verbosesearch"/> <script data-cfasync="false" src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/js/separates/jquery.min.js"></script> <link rel="stylesheet" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-uber.lc-096816a0f177be947e6c83ca2b8eaf6e-lc.min.css" type="text/css"> <link rel="stylesheet" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-reskin.lc-5f74173ae8db801c47cac52ca65a3c07-lc.min.css" type="text/css"> <script data-cfasync="false"> var appHost=("www-stage.pluralsight.com"==window.location.host||"www-dev.pluralsight.com"==window.location.host)?"https://app-stage.pluralsight.com":"https://app.pluralsight.com",pagePath=window.location.pathname,redirectPath="",appRedirectTag=document.head.querySelector("[name~='appRedirectPath'][content]");if(appRedirectTag&&(redirectPath=appRedirectTag.content.toString()),!window.is404){if(0==pagePath.indexOf("/product/channels")&&(redirectPath="/channels",document.URL.indexOf("cid=")>-1&&(redirectPath="/channels/details/"+getParameterByName("cid"))),pagePath.indexOf("/achievements")>-1&&"URLSearchParams"in window){var urlParams=new URLSearchParams(window.location.search),badgeID=urlParams.get("badge");redirectPath="/achievements/badges/"+badgeID}if(document.cookie.indexOf("www-status-production=")>-1&&-1==document.cookie.indexOf("midCheckout")&&("www.pluralsight.com"==window.location.host||"beta.www.pluralsight.com"==window.location.host)||document.cookie.indexOf("www-status-staging=")>-1&&-1==document.cookie.indexOf("midCheckout")&&("www-stage.pluralsight.com"==window.location.host||"beta.www-stage.pluralsight.com"==window.location.host)){var aidParam=getParameterByName("aid"),vidParam=getParameterByName("vid"),paramsString="";""!==aidParam&&(paramsString+=(paramsString.indexOf("?")>-1?"&":"?")+"aid="+aidParam),""!==vidParam&&(paramsString+=(paramsString.indexOf("?")>-1?"&":"?")+"vid="+vidParam),""!==redirectPath&&-1===document.URL.indexOf("show=home")?window.location=appHost+redirectPath+paramsString:jQuery(document).ready(function(){var a=appHost+"/id/dashboard",t=jQuery(".header_sign_up_link");t.text("My Dashboard"),t.attr("href",a),t.attr("title","My Dashboard"),jQuery(".header_sign_in_link").attr("style","display: none !important")})}else 0!=pagePath.indexOf("/customer/")||"www-stage.pluralsight.com"!=window.location.host&&"beta.www-stage.pluralsight.com"!=window.location.host&&"www.pluralsight.com"!=window.location.host&&"beta.www.pluralsight.com"!=window.location.host||-1!=document.cookie.indexOf("midCheckout")?""!=redirectPath?jQuery(document).ready(function(){jQuery(".sign_in_link").attr("href",appHost+"/id?redirectTo="+encodeURIComponent(redirectPath))}):jQuery(document).ready(function(){jQuery(".sign_in_link").attr("href",appHost+"/id?")}):window.location=appHost+"/id?redirectTo="+encodeURIComponent(document.URL)} </script> <meta data-customer-type="no-type"/> <meta data-customer-type-ignore="false"/> <script data-cfasync="false"> document.cookie.indexOf("ps_si=")>-1&&(window.selectedInterest=document.cookie.split("ps_si=")[1].split(";")[0]),document.cookie.indexOf("ps_sct=")>-1&&(window.selectedConsumerType=document.cookie.split("ps_sct=")[1].split(";")[0]);var customerType,customerTypeTag=document.head.querySelector("meta[data-customer-type]").getAttribute("data-customer-type"),customerTypeIgnore=document.head.querySelector("meta[data-customer-type-ignore]").getAttribute("data-customer-type-ignore");customerTypeTag&&"true"!==customerTypeIgnore&&"string"==typeof customerTypeTag&&("pluralsight-customer-type:individual"===customerTypeTag?customerType="individual":"pluralsight-customer-type:business"===customerTypeTag&&(customerType="business"),customerType&&"pluralsight-customer-type:escape"!==customerTypeTag&&setSelectedConsumerType(customerType));function setSelectedInterest(e){var t=new Date;t.setTime(t.getTime()+6048e5),document.cookie="ps_si="+e+"; expires="+t.toUTCString()+"; path=/",window.selectedInterest=e}function setSelectedConsumerType(e){var t=new Date;t.setTime(t.getTime()+6048e5),document.cookie="ps_sct="+e+"; expires="+t.toUTCString()+"; path=/",window.selectedConsumerType=e}function setSelectedBusinessType(e){var t=new Date;t.setTime(t.getTime()+6048e5),document.cookie="ps_sbt="+e+"; expires="+t.toUTCString()+"; path=/",window.selectedBusinessType=e}if(document.URL.indexOf("b2c-price=true")>-1?setSelectedConsumerType("individual"):document.URL.indexOf("b2b-price=true")>-1&&setSelectedConsumerType("business"),document.cookie.indexOf("ps_sbt=")>-1&&(window.selectedBusinessType=document.cookie.split("ps_sbt=")[1].split(";")[0]),-1==document.cookie.indexOf("drift_ab")){var driftAbDate=new Date;driftAbDate.setTime(driftAbDate.getTime()+6048e5);var driftAb=0==Math.floor(2*Math.random())?"A":"B";document.cookie="drift_ab="+driftAb+"; expires="+driftAbDate.toUTCString()+"; path=/"}var inflDate=new Date;inflDate.setTime(inflDate.getTime()+18e5);var visNumDate=new Date;if(visNumDate.setTime(visNumDate.getTime()+31536e6),document.cookie.indexOf("ps_infl")>-1){var infl=document.cookie.split("ps_infl=")[1].split(";")[0];document.cookie="ps_infl="+infl+"; expires="+inflDate.toUTCString()+"; path=/"}else{var visNum=1;document.cookie.indexOf("ps_visNum")>-1&&(visNum=parseInt(document.cookie.split("ps_visNum=")[1].split(";")[0])+1),document.cookie="ps_visNum="+visNum+"; expires="+visNumDate.toUTCString()+"; path=/",getParameterByName("aid")||getParameterByName("vid")||""!=document.referrer&&-1==document.referrer.indexOf("pluralsight.com")?document.cookie="ps_infl=1; expires="+inflDate.toUTCString()+"; path=/":document.cookie="ps_infl=0; expires="+inflDate.toUTCString()+"; path=/"}!function(e,t,i,o){function n(){return t.getElementsByTagName("head")[0]}function s(e,i){if(e){var o=t.getElementById(i);o&&e.removeChild(o)}}if(window.location.hostname.endsWith("pluralsight.com")&&("/content/pluralsight/en.html"===window.location.pathname||"/"===window.location.pathname)){!function(e,i,o){if(e){var n=t.createElement("style");n.id=i,n.innerHTML=o,e.appendChild(n)}}(n(),"at-body-style","body {opacity: 0 !important}");const e=setTimeout(function(){s(n(),"at-body-style")},3e3);jQuery("html").on("at-content-rendering-succeeded at-content-rendering-failed",()=>{s(n(),"at-body-style"),clearTimeout(e)})}}(window,document); </script> <script src="//assets.adobedtm.com/launch-EN123ab280156b405ca2abf6acf664d9a0.min.js" async></script> <link rel="apple-touch-icon" sizes="57x57" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/apple-touch-icon-57x57.png"> <link rel="apple-touch-icon" sizes="60x60" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/apple-touch-icon-60x60.png"> <link rel="apple-touch-icon" sizes="72x72" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/apple-touch-icon-72x72.png"> <link rel="apple-touch-icon" sizes="76x76" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/apple-touch-icon-76x76.png"> <link rel="apple-touch-icon" sizes="114x114" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/apple-touch-icon-114x114.png"> <link rel="apple-touch-icon" sizes="120x120" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/apple-touch-icon-120x120.png"> <link rel="apple-touch-icon" sizes="144x144" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/apple-touch-icon-144x144.png"> <link rel="apple-touch-icon" sizes="152x152" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/apple-touch-icon-152x152.png"> <link rel="apple-touch-icon" sizes="180x180" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/apple-touch-icon-180x180.png"> <link rel="icon" type="image/png" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/favicon-32x32.png" sizes="32x32"> <link rel="icon" type="image/png" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/android-chrome-192x192.png" sizes="192x192"> <link rel="icon" type="image/png" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/favicon-96x96.png" sizes="96x96"> <link rel="icon" type="image/png" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/favicon-16x16.png" sizes="16x16"> <link rel="manifest" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/manifest.json"> <link rel="mask-icon" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/safari-pinned-tab.svg" color="#e71585"> <link rel="shortcut icon" href="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/favicon.ico"> <meta name="msapplication-TileColor" content="#e71585"> <meta name="msapplication-TileImage" content="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/mstile-144x144.png"> <meta name="msapplication-config" content="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/favicons/browserconfig.xml"> <meta name="theme-color" content="#ffffff"> <title>ASP.NET Core Web API: Best Practices | Pluralsight</title> <meta property="og:title" content="ASP.NET Core Web API: Best Practices"/> <meta name="twitter:title" content="ASP.NET Core Web API: Best Practices"/> <meta name="cludo:content-path" content="/content/pluralsight/en/courses/asp/aspdotnet-core-6-web-api-best-practices"/> </head> <body class="mode-disabled course-template font-loading"> <div class="site-wrap"> <div class="nav-context "> <div class="xf-page xfpage page basicpage"> <div class="xf-content-height"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="experiencefragment aem-GridColumn aem-GridColumn--default--12"> <div id="experiencefragment-a0cdbf14e2" class="cmp-experiencefragment cmp-experiencefragment--unified-shared-components"> <div class="xf-content-height"> <div class="root responsivegrid"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="free-form-component aem-GridColumn aem-GridColumn--default--12"> <style> .menu-dropdown .ps-nav-dropdown .ps-nav-header { font-family: "PS Commons Bold"; font-size: 16px; line-height: 22px; color: #130f25; margin-top: 14px; } .menu-dropdown .ps-nav-dropdown .ps-nav-header-text .nav-title { font-family: "PS Commons Bold"; font-size: 16px; line-height: 22px; } .menu-dropdown .ps-nav-dropdown .ps-nav-header-text { padding-left: 15px; } .menu-dropdown .ps-nav-dropdown .ps-nav-header-text > p { font-size: 14px; line-height: 22px; font-weight: 500; color: #4e6583; margin-bottom: 0; } .menu-dropdown .ps-nav-dropdown .divider { height: auto; width: 1px; background-color: #d3dff0; padding: 0; margin: 0 32px; } .menu-dropdown .ps-nav-dropdown hr { background-color: #c2d1e2; height: 1px; border: unset; margin: 10px 0; } .menu-dropdown .ps-nav-dropdown ul li { padding: 0; margin: 0; } .menu-dropdown .ps-nav-dropdown ul li.nav-column-header .nav-title { font-family: "PS Commons Bold"; margin-bottom: 3px; font-weight: 700; color: #130f25; font-size: 16px; line-height: 22px; } .menu-dropdown .ps-nav-dropdown ul li.nav-column-item a { font-weight: 500; font-size: 14px; line-height: 22px; color: #000000; padding: 8px; text-decoration: none; background-position: 100% 0; background-size: 200% 100%; transition: all 0.15s ease-in; border-radius: 8px; display: flex; align-items: center; position: relative; } .menu-dropdown .ps-nav-dropdown ul li.nav-column-item a:hover { background-color: #F4F7FA; border-radius: 8px; color: #D60056; } .menu-dropdown .ps-nav-dropdown ul li.nav-column-item span.nav-title-icon { display: inline-block; background: #E8ECF2; border-radius: 3px; box-shadow: inset 0px 0px 0px 2px rgba(236, 0, 140, 0); transition: all 0.25s ease-in; margin-right: 10px; } .menu-dropdown .ps-nav-dropdown ul li.nav-column-item span.nav-title-icon > img { width: 28px; } .menu-dropdown .ps-nav-dropdown ul li.nav-column-item a:hover span.nav-title-icon { box-shadow: inset 0px 0px 0px 2px rgba(214, 0, 86, 1); } .menu-dropdown .ps-nav-dropdown .nav-dropdown-link { margin-top: auto; padding: 20px 0 0; } .menu-dropdown .ps-nav-dropdown .nav-dropdown-link a { font-weight: 600; font-size: 14px; line-height: 20px; color: #d60056; position: relative; text-decoration: none; padding: 0; display: block; margin-right: 25px; } .menu-dropdown .ps-nav-dropdown .nav-dropdown-link a:after { content: ""; display: inline-block; height: 7px; width: 7px; margin-left: 7px; margin-bottom: 0; border-right: 2px solid #D60056; border-bottom: 2px solid #D60056; transform: rotate(-45deg); transition: all .2s; } .menu-dropdown .ps-nav-dropdown .nav-dropdown-link a:hover:after { transform: rotate(-45deg) translate(3px, 3px); } .menu-dropdown .ps-nav-dropdown .nav-title-arrow { background: url(/content/dam/ps-nav-assets/arrow-pink-new.png); background-repeat: no-repeat; background-size: contain; width: 18px; height: 12px; display: block; position: absolute; right: 20px; top: 50%; transition: 0.3s all; opacity: 0; transform: translateY(-50%); } .menu-dropdown .ps-nav-dropdown ul > li > a:hover .nav-title-arrow { opacity: 1; right: 10px; } .menu-dropdown .-flex-and-center-l { display: flex; align-items: center; } @media (min-width: 1025px) { .menu-dropdown .ps-nav-dropdown .ps-nav-header { margin-top: 0; } .menu-dropdown .ps-nav-dropdown .ps-nav-header-text .nav-title { font-size: 20px; } .menu-dropdown .-flex { display: flex; flex-direction: row; } .menu-dropdown .-flex-and-center { display: flex; align-items: center; } .menu-dropdown .-flex-column { flex-direction: column; } .menu-dropdown .-flex-1 { flex: 1; } .menu-dropdown .-flex-2 { flex: 2; } .menu-dropdown .ps-nav-dropdown { padding: 50px; } } @media (min-width: 1400px) { .navigation .ps-navigation .menu-dropdown-panel .menu-dropdown { width: 1330px; } } </style> </div> </div> </div> </div> </div> </div> <div class="navigation aem-GridColumn aem-GridColumn--default--12"> <header class="ps-navigation aem-component "> <a id="skipContent" tabindex="0" href="#content" data-aa-title="PN-Skip To Content">Skip to content</a> <nav class="ps-navigation-mega" aria-label="Primary product menu"> <div class="ps-navigation-container"> <a class="ps-nav-brand" href="/" aria-label="Pluralsight" data-aa-title="UN-Pluralsight Main"><img src="/content/dam/ps-nav-assets/pluralsight-white-logo.png" alt="Pluralsight Logo"/></a> <div> <ul class="audience-list__container"> <li class="audience-list__item"> <a class="audience-list__item--text" href="/product/skills/individuals" data-aa-title="nav-for-individuals" previewlistener="true"> For individuals </a> </li> <li class="audience-list__item"> <a class="audience-list__item--text" href="/product/skills" data-aa-title="nav-for-business" previewlistener="true"> For businesses </a> </li> <li class="audience-list__item"> <a class="audience-list__item--text" href="/industries/public-sector" data-aa-title="nav-pubsec" previewlistener="true"> For public sector </a> </li> </ul> </div> <ul> <li><a href="/" data-aa-title="UN-Pluralsight">Pluralsight</a></li> <li class="active"><a href="/product/skills" data-aa-title="UN-Skills">Skills</a></li> <li><a href="/cloud-guru" data-aa-title="UN-ACloudGuru">A Cloud Guru</a></li> <li><a href="/product/flow" data-aa-title="UN-Flow">Flow</a></li> <li><a href="/resources/blog" data-aa-title="UN-Blog">Blog</a></li> <li class="menu-link"> <button role="button" type="button" class="menu-a" aria-label="Sign in" aria-expanded="false" data-aa-title="UN-Sign In"> <img src="/content/dam/ps-nav-assets/nav-profile-image.svg" alt="Icon for profile image "/> Sign in <span><i class="ps-nav-arrow"></i></span> </button> <div class="menu-dropdown-panel"> <div class="menu-dropdown"> <ul class="menu-dropdown-xl"> <li> <a href="https://app.pluralsight.com/id" data-aa-title="UN-Skills Sign In"> <p>Sign in to</p> <div class="alt-image-w-arrow"><img src="/content/dam/ps-nav-assets/product-logo/skills-darkblue.png" alt="Sign in to Pluralsight Skills" width="135"/><span><i class="ps-nav-arrow"></i></span></div> </a> </li> <li> <a href="https://learn.acloud.guru/" data-aa-title="UN-A Cloud Guru Sign In"> <p>Sign in to</p> <div class="alt-image-w-arrow"><img src="/content/dam/ps-nav-assets/product-logo/cloud-guru-darkblue.png" alt="Sign in to A Cloud Guru" width="164"/><span><i class="ps-nav-arrow"></i></span></div> </a> </li> <li> <a href="https://app.pluralsight.com/id?redirectTo=https%3a%2f%2fflow.pluralsight.com%2f" data-aa-title="UN-Flow Sign In"> <p>Sign in to</p> <div class="alt-image-w-arrow"><img src="/content/dam/ps-nav-assets/product-logo/flow-darkblue.png" alt="Sign in to Pluralsight Flow" width="117"/><span><i class="ps-nav-arrow"></i></span></div> </a> </li> </ul> </div> </div> </li> </ul> </div> </nav> <nav class="ps-navigation-universal " aria-label="Secondary product menu"> <div class="ps-navigation-container"> <div class="ps-nav-brand "> <a id="psMainLogo" href="/product/skills" aria-label="Pluralsight" data-aa-title="PN-skills"> <img src="/content/dam/ps-nav-assets/product-logo/pluralsight-skills-white.png" alt="Logo for Pluralsight Skills"/> </a> </div> <div class="ps-nav-mobile hide-for-large-up"> <button role="button" type="button" aria-label="Mobile hamburger menu" data-aa-title="PN-Mobile Hamburger"> <i class="hamburger-line"></i> <i class="hamburger-line"></i> <i class="hamburger-line"></i> </button> </div> <div class="ps-nav-menu"> <nav class="ps-navigation-mega mobile-only" aria-label="Primary mobile menu"> <div class="ps-navigation-container"> <a class="ps-nav-brand" href="/" aria-label="Pluralsight" data-aa-title="UN-Pluralsight Main Mobile"><img src="/content/dam/ps-nav-assets/pluralsight-company-black-logo.png" alt="Pluralsight Logo"/></a> <ul> <li class="menu-link"> <a href="#" class="menu-a" aria-label="Sign in" aria-expanded="false" data-accordion="mobileSignIn" data-aa-title="UN-Sign In Mobile"> Sign in <span><i class="ps-nav-arrow"></i></span> </a> </li> <li class="menu-link"> <a href="#" class="menu-a" aria-label="Mobile Menu" aria-expanded="false" data-accordion="mobileMenu" data-aa-title="UN-Menu Mobile"> Menu <span><i class="ps-nav-arrow"></i></span> </a> </li> </ul> <div id="mobileSignIn" class="menu-dropdown-panel"> <div class="menu-dropdown"> <ul> <li> <a href="https://app.pluralsight.com/id" data-aa-title="UN-Skills Sign In Mobile"> <span class="ps-nav-brand"><img src="/content/dam/ps-nav-assets/product-logo/logo-icon/skills-icon.png" alt="Sign in to Pluralsight Skills"/></span> <p>Sign in to Skills <span><i class="ps-nav-arrow"></i></span></p> </a> </li> <li> <a href="https://learn.acloud.guru/" data-aa-title="UN-A Cloud Guru Sign In Mobile"> <span class="ps-nav-brand ps-nav-brand-cloud"><img src="/content/dam/ps-nav-assets/product-logo/logo-icon/cloud-guru-icon.png" alt="Sign in to A Cloud Guru"/></span> <p>Sign in to A Cloud Guru <span><i class="ps-nav-arrow"></i></span></p> </a> </li> <li> <a href="https://app.pluralsight.com/id?redirectTo=https%3a%2f%2fflow.pluralsight.com%2f" data-aa-title="UN-Flow Sign In Mobile"> <span class="ps-nav-brand"><img src="/content/dam/ps-nav-assets/product-logo/logo-icon/flow-icon.png" alt="Sign in to Pluralsight Flow"/></span> <p>Sign in to Flow <span><i class="ps-nav-arrow"></i></span></p> </a> </li> </ul> </div> </div> <div id="mobileMenu" class="menu-dropdown-panel"> <div class="menu-dropdown"> <ul> <li><a href="/" data-aa-title="UN-Pluralsight Mobile">Pluralsight <span><i class="ps-nav-arrow"></i></span></a></li> <li class="active"><a href="/product/skills" data-aa-title="UN-Skills Mobile">Skills <span><i class="ps-nav-arrow"></i></span></a></li> <li><a href="/cloud-guru" data-aa-title="UN-Skills Mobile">A Cloud Guru <span><i class="ps-nav-arrow"></i></span></a></li> <li><a href="/product/flow" data-aa-title="UN-Flow Mobile">Flow <span><i class="ps-nav-arrow"></i></span></a></li> <li><a href="/resources/blog" data-aa-title="UN-Blog Mobile">Blog <span><i class="ps-nav-arrow"></i></span></a></li> </ul> </div> </div> </div> </nav> <ul class="ps-item ps-item-main"> <li class="menu-link"> <a href="/product/skills" data-aa-title="skills-nav-Skills-Why Skills" class=" menu-link-button"> Why Skills? <span><i class="ps-nav-arrow"></i></span> </a> </li> <li class="menu-link"> <button type="button" role="button" class="menu-a" id="menuPsnavSkillsCourses" data-aa-title="ps-nav-Skills-Courses" aria-controls="menuControlPsnavSkillsCourses" aria-expanded="false"> Courses <span><i class="ps-nav-arrow"></i></span> </button> <div class="menu-dropdown-panel" id="menuControlPsnavSkillsCourses" role="region" aria-labelledby="menuPsnavSkillsCourses"> <div class="menu-dropdown"><div class="free-form-component section"> <style> .ps-nav-courses > div.-flex { row-gap: 20px; } .ps-nav-courses ul { margin: 0; } .ps-nav-courses ul li.nav-column-header { border-bottom: 1px solid #C2D1E2; margin: 20px 0; padding: 0; } .ps-nav-courses ul li.nav-column-header .nav-title > img { margin-right: 5px; width: 28px; } .ps-nav-courses ul li a { display: flex; align-items: center; gap: 12px; position: relative; color: #130f25; font-size: 14px; padding: 8px; border-radius: 8px; text-decoration: none; } .ps-nav-courses ul li a:hover { color: #d60056; background: #f4f7fa; } @media (min-width: 1025px) { .ps-nav-courses.ps-nav-dropdown { display: grid; grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 1fr; grid-template-areas: "nav-column-left nav-column-left nav-column-right"; column-gap: 30px; padding: 50px; } .ps-nav-courses ul li.nav-column-header { margin: 0 0 10px; } } </style> <section class="ps-nav-courses ps-nav-dropdown"> <div class="-flex-1 -flex -flex-column"> <ul> <li class="nav-column-header"> <div class="nav-title" role="heading"> <img src="/content/dam/ps-nav-assets/nav-icons/gray-software-dev-icon.png" alt="Icon for Software dev" role="presentation"/> Software dev </div> </li> <li> <a href="/browse?=&q=databases&type=all&sort=default" data-aa-title="skills-nav-courses-databases" data-ps-analytics="skills-nav|Databases|https://www.pluralsight.com/browse?=&q=databases&type=all&sort=default&subject=software-development"> <div class="nav-title"> Databases <span class="nav-title-arrow"></span></div> </a> </li> <li> <a href="/browse?=&q=game%20development&type=all&sort=default" data-aa-title="skills-nav-courses-game-development" data-ps-analytics="skills-nav|Game development|https://www.pluralsight.com/browse?=&q=game%20development&type=all&sort=default"> <div class="nav-title"> Game development <span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=mobile%20development&type=all&sort=default" data-aa-title="skills-nav-courses-mobile-development" data-ps-analytics="skills-nav|Mobile development|https://www.pluralsight.com/browse?=&q=mobile%20development&type=all&sort=default"> <div class="nav-title">Mobile development <span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=programming%20languages&type=all&sort=default" data-aa-title="skills-nav-courses-programming-language" data-ps-analytics="skills-nav|Programming languages|https://www.pluralsight.com/browse?=&q=programming%20languages&type=all&sort=default"> <div class="nav-title">Programming languages<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=web%20development&type=all&sort=default" data-aa-title="skills-nav-courses-web-development" data-ps-analytics="skills-nav|Web development|https://www.pluralsight.com/browse?=&q=web%20development&type=all&sort=default"> <div class="nav-title">Web development<span class="nav-title-arrow"></span></div></a> </li> </ul> <ul> <li class="nav-column-header"> <div class="nav-title" role="heading"> <img src="/content/dam/ps-nav-assets/nav-icons/gray-security-icon.png" alt="Icon for Security" role="presentation"/> Security </div> </li> <li> <a href="/browse?=&q=security%20certifications&type=all&sort=default" data-aa-title="skills-nav-courses-certifications" data-ps-analytics="skills-nav|Certifications|https://www.pluralsight.com/browse?=&q=security%20certifications&type=all&sort=default"> <div class="nav-title">Certifications<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=security%20risk%20compliance&type=all&sort=default" data-aa-title="skills-nav-courses-governance-risk-compliance" data-ps-analytics="skills-nav|Governance, risk & compliance|https://www.pluralsight.com/browse?=&q=security%20risk%20compliance&type=all&sort=default"> <div class="nav-title">Governance, risk & compliance<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=security%20architecture%20engineering&type=all&sort=default" data-aa-title="skills-nav-courses-security-architecture-engineering" data-ps-analytics="skills-nav|Security architecture & engineering|https://www.pluralsight.com/browse?=&q=security%20architecture%20engineering&type=all&sort=default"> <div class="nav-title">Security architecture & engineering<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=security%20operations&type=all&sort=default" data-aa-title="skills-nav-courses-security-operations" data-ps-analytics="skills-nav|Security operations|https://www.pluralsight.com/browse?=&q=security%20operations&type=all&sort=default"> <div class="nav-title">Security operations<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=security%20testing&type=all&sort=default" data-aa-title="skills-nav-courses-security-testing" data-ps-analytics="skills-nav|Security testing|https://www.pluralsight.com/browse?=&q=security%20testing&type=all&sort=default"> <div class="nav-title">Security testing<span class="nav-title-arrow"></span></div></a> </li> </ul> </div> <div class="-flex-1 -flex -flex-column"> <ul> <li class="nav-column-header"> <div class="nav-title" role="heading"> <img src="/content/dam/ps-nav-assets/nav-icons/gray-data-machine-learning-icon.png" alt="Icon for Data & machine learning" role="presentation"/> Data & machine learning </div> </li> <li> <a href="/browse?=&q=big%20data&type=all&sort=default" data-aa-title="skills-nav-courses-big-data" data-ps-analytics="skills-nav|Big data|https://www.pluralsight.com/browse?=&q=big%20data&type=all&sort=default"> <div class="nav-title">Big data<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=business%20intelligence&type=all&sort=default" data-aa-title="skills-nav-courses-business-intelligence" data-ps-analytics="skills-nav|Business intelligence|https://www.pluralsight.com/browse?=&q=business%20intelligence&type=all&sort=default"> <div class="nav-title">Business intelligence<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=data%20visualization&type=all&sort=default" data-aa-title="skills-nav-courses-data-visualization" data-ps-analytics="skills-nav|Data visualization|https://www.pluralsight.com/browse?=&q=data%20visualization&type=all&sort=default"> <div class="nav-title">Data visualization<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=databases&type=all&sort=default" data-aa-title="skills-nav-courses-databases" data-ps-analytics="skills-nav|Databases|https://www.pluralsight.com/browse?=&q=databases&type=all&sort=default"> <div class="nav-title">Databases<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=data%20languages%20libraries&type=all&sort=default" data-aa-title="skills-nav-courses-languages-libraries" data-ps-analytics="skills-nav|Languages & libraries|https://www.pluralsight.com/browse?=&q=data%20languages%20libraries&type=all&sort=default"> <div class="nav-title">Languages & libraries<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=machine%20learning&type=all&sort=default" data-aa-title="skills-nav-courses-machine-learning" data-ps-analytics="skills-nav|Machine learning|https://www.pluralsight.com/browse?=&q=machine%20learning&type=all&sort=default"> <div class="nav-title">Machine learning<span class="nav-title-arrow"></span></div></a> </li> </ul> <ul> <li class="nav-column-header"> <div class="nav-title" role="heading"> <img src="/content/dam/ps-nav-assets/nav-icons/gray-cloud-icon.png" alt="Icon for Cloud" role="presentation"/> Cloud </div> </li> <li> <a href="/browse?=&q=cloud%20architecture%20design&type=all&sort=default" data-aa-title="skills-nav-courses-cloud-architecture-design" data-ps-analytics="skills-nav|Cloud architechture & design|https://www.pluralsight.com/browse?=&q=cloud%20architecture%20design&type=all&sort=default"> <div class="nav-title">Cloud architecture & design<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=cloud%20platforms&type=all&sort=default" data-aa-title="skills-nav-courses-cloud-platforms" data-ps-analytics="skills-nav|Cloud platforms|https://www.pluralsight.com/browse?=&q=cloud%20platforms&type=all&sort=default"> <div class="nav-title">Cloud platforms<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=salesforce&%20engineering&type=all&sort=default" data-aa-title="skills-nav-courses-salesforce-crm" data-ps-analytics="skills-nav|Salesforce CRM|https://www.pluralsight.com/browse?=&q=salesforce&%20engineering&type=all&sort=default"> <div class="nav-title">Salesforce CRM<span class="nav-title-arrow"></span></div></a> </li> </ul> </div> <div class="-flex-1 -flex -flex-column"> <ul> <li class="nav-column-header"> <div class="nav-title" role="heading"> <img src="/content/dam/ps-nav-assets/nav-icons/gray-itops-icon.png" alt="Icon for IT Ops" role="presentation"/> IT Ops </div> </li> <li> <a href="/browse?=&q=client%20operating%20systems=&type=all&sort=default" data-aa-title="skills-nav-courses-client-operating-systems" data-ps-analytics="skills-nav|Client operating systems|https://www.pluralsight.com/browse?=&q=client%20operating%20systems=&type=all&sort=default"> <div class="nav-title">Client operating systems<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=collaboration%20platforms&type=all&sort=default" data-aa-title="skills-nav-courses-collaboration-platforms" data-ps-analytics="skills-nav|Collaboration platforms|https://www.pluralsight.com/browse?=&q=collaboration%20platforms&type=all&sort=default"> <div class="nav-title">Collaboration platforms<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=configuration%20management&type=all&sort=default" data-aa-title="skills-nav-courses-configuration-managment" data-ps-analytics="skills-nav|Configuration management|https://www.pluralsight.com/browse?=&q=configuration%20management&type=all&sort=default"> <div class="nav-title">Configuration management<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=containers&type=all&sort=default" data-aa-title="skills-nav-courses-containers" data-ps-analytics="skills-nav|Containers|https://www.pluralsight.com/browse?=&q=containers&type=all&sort=default"> <div class="nav-title">Containers<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=IT%20automation&type=all&sort=default" data-aa-title="skills-nav-courses-it-automation" data-ps-analytics="skills-nav|IT automation|https://www.pluralsight.com/browse?=&q=IT%20automation&type=all&sort=default"> <div class="nav-title">IT automation<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=network%20architecture&type=all&sort=default" data-aa-title="skills-nav-courses-network-architecture" data-ps-analytics="skills-nav|Network architecture|https://www.pluralsight.com/browse?=&q=network%20architecture&type=all&sort=default"> <div class="nav-title">Network architecture<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=virtualization&type=all" data-aa-title="skills-nav-courses-virtualization" data-ps-analytics="skills-nav|Virtualization|https://www.pluralsight.com/browse?=&q=virtualization&type=all"> <div class="nav-title">Virtualization<span class="nav-title-arrow"></span></div></a> </li> </ul> <ul> <li class="nav-column-header"> <div class="nav-title" role="heading"> <img src="/content/dam/ps-nav-assets/nav-icons/gray-business-professional-icon.png" alt="Icon for Business professional" role="presentation"/> Business professional </div> </li> <li> <a href="/browse?=&q=office%20applications&type=all" data-aa-title="skills-nav-courses-office-applications" data-ps-analytics="skills-nav|Office applications|https://www.pluralsight.com/browse?=&q=office%20applications&type=all"> <div class="nav-title">Office applications<span class="nav-title-arrow"></span></div></a> </li> <li> <a href="/browse?=&q=security%20awareness&type=all" data-aa-title="skills-nav-courses-security-awareness" data-ps-analytics="skills-nav|Security awareness|https://www.pluralsight.com/browse?=&q=security%20awareness&type=all"> <div class="nav-title">Security awareness<span class="nav-title-arrow"></span></div></a> </li> </ul> </div> <div class="nav-dropdown-link -flex"> <span><a href="/browse" data-aa-title="skills-nav-courses-all-courses">All courses</a></span> </div> </section> </div> </div> </div> </li> <li class="menu-link"> <button type="button" role="button" class="menu-a" id="menuSkillsnavSkillsFeatures" data-aa-title="skills-nav-Skills-Features" aria-controls="menuControlSkillsnavSkillsFeatures" aria-expanded="false"> Features <span><i class="ps-nav-arrow"></i></span> </button> <div class="menu-dropdown-panel" id="menuControlSkillsnavSkillsFeatures" role="region" aria-labelledby="menuSkillsnavSkillsFeatures"> <div class="menu-dropdown"><div class="free-form-component section"> <style> .navigation .ps-navigation .menu-dropdown-panel .menu-dropdown:has(.ps-nav-features) { max-width: 842px; margin: 0 auto; } .ps-nav-features.ps-nav-dropdown { margin: 0; padding: 0; } .ps-nav-features .nav-column-header { border-bottom: 1px solid #C2D1E2; margin: 20px 0; padding: 0; } .ps-nav-features .nav-column-header .nav-title { font-family: "PS Commons Bold"; margin-bottom: 3px; font-weight: 700; color: #130f25; font-size: 16px; line-height: 22px; } .ps-nav-features .nav-column ul { padding: 0; margin: 0; } .ps-nav-features ul { margin: 0; } .ps-nav-features ul li a { display: flex; align-items: center; gap: 12px; position: relative; color: #130f25; font-size: 14px; padding: 8px; border-radius: 8px; text-decoration: none; } .ps-nav-features ul li a:hover { color: #d60056; background: #f4f7fa; } .ps-nav-features ul li a .nav-title-icon img { border: 2px solid transparent; } .ps-nav-features.ps-nav-dropdown > .nav-column > ul li.nav-column-item a:hover span.nav-title-icon{ box-shadow: unset; } .ps-nav-features ul li a:hover .nav-title-icon img { border-color: #D60056; border-radius: 3px; } @media (min-width: 1025px) { .ps-nav-features.ps-nav-dropdown { padding: 50px; } .ps-nav-features .nav-column { grid-area: nav-column-left; display: grid; grid-gap: 30px; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr; } .ps-nav-features .nav-column-header { margin: 0 0 10px; } } </style> <section class="ps-nav-features ps-nav-dropdown"> <div class="nav-column-header"> <div class="nav-title" role="heading"> Top features </div> </div> <div class="nav-column"> <ul> <li class="nav-column-item"> <a href="/browse" data-aa-title="skills-nav-features-courses" data-ps-analytics="skills-nav|Courses|https://www.pluralsight.com/browse"> <span class="nav-title-icon"><img alt="Icon for Courses" src="/content/dam/ps-nav-assets/nav-icons/gray-courses-icon.png" role="presentation"/></span> Courses<span class="nav-title-arrow"></span></a> </li> <li class="nav-column-item"> <a href="/product/skills-assessment" data-aa-title="skills-nav-features-skills-assessments" data-ps-analytics="skills-nav|Skill assessments|https://www.pluralsight.com/product/skills-assessment"> <span class="nav-title-icon"><img alt="Icon for Skill assessments" src="/content/dam/ps-nav-assets/nav-icons/gray-skills-icon.png" role="presentation"/></span> Skill assessments<span class="nav-title-arrow"></span></a> </li> <li class="nav-column-item"> <a href="/product/paths" data-aa-title="skills-nav-features-learning-paths" data-ps-analytics="skills-nav|Learning paths|https://www.pluralsight.com/product/paths"> <span class="nav-title-icon"><img alt="Icon for Learning paths" src="/content/dam/ps-nav-assets/nav-icons/gray-learning-paths-icon.png" role="presentation"/></span> Learning paths<span class="nav-title-arrow"></span></a> </li> <li class="nav-column-item"> <a href="/product/hands-on-learning" data-aa-title="skills-nav-features-hands-on-learning" data-ps-analytics="skills-nav|Hands on learning|https://www.pluralsight.com/product/hands-on-learning"> <span class="nav-title-icon"><img alt="Icon for Hands-on learning" src="/content/dam/ps-nav-assets/nav-icons/gray-hands-on-learning-icon.png" role="presentation"/></span> Hands on learning<span class="nav-title-arrow"></span></a> </li> </ul> <ul> <li class="nav-column-item"> <a href="/product/professional-services/tech-employee-development" data-aa-title="skills-nav-features-ilt-vilt" data-ps-analytics="skills-nav|ILT/VILT|https://www.pluralsight.com/product/professional-services/tech-employee-development"> <span class="nav-title-icon"><img alt="Icon for ILT/VILT" src="/content/dam/ps-nav-assets/nav-icons/gray-ilt-vilt-icon.png" role="presentation"/></span> ILT/VILT<span class="nav-title-arrow"></span></a> </li> <li class="nav-column-item"> <a href="/product/advanced-analytics" data-aa-title="skills-nav-features-analytics" data-ps-analytics="skills-nav|Analytics|https://www.pluralsight.com/product/advanced-analytics"> <span class="nav-title-icon"><img alt="Icon for Analytics" src="/content/dam/ps-nav-assets/nav-icons/gray-analytics-icon.png" role="presentation"/></span> Analytics<span class="nav-title-arrow"></span></a> </li> <li class="nav-column-item"> <a href="/product/cert-prep" data-aa-title="skills-nav-features-certification-prep" data-ps-analytics="skills-nav|Certification prep|https://www.pluralsight.com/product/cert-prep"> <span class="nav-title-icon"><img alt="Icon for Certification prep" src="/content/dam/ps-nav-assets/nav-icons/gray-cert-prep-icon.png" role="presentation"/></span> Certification prep<span class="nav-title-arrow"></span></a> </li> <li class="nav-column-item"> <a href="/product/labs" data-aa-title="skills-nav-features-labs" data-ps-analytics="skills-nav|Labs|https://www.pluralsight.com/product/labs"> <span class="nav-title-icon"><img alt="Icon for Labs" src="/content/dam/ps-nav-assets/nav-icons/gray-labs-icon.png" role="presentation"/></span> Labs<span class="nav-title-arrow"></span></a> </li> </ul> </div> </section> </div> </div> </div> </li> <li class="menu-link"> <a href="/pricing/skills" data-aa-title="skills-nav-Plans" class=" menu-link-button"> Plans <span><i class="ps-nav-arrow"></i></span> </a> </li> <li class="menu-link"> <a href="/product/skills/individuals" data-aa-title="skills-nav-For individuals" class=" menu-link-button"> For individuals <span><i class="ps-nav-arrow"></i></span> </a> </li> <li class="menu-link ps-nav-search"> <button role="button" type="button" class="menu-a" data-aa-title="PN-Skills Search" aria-expanded="false"> <svg viewBox="0 0 797 801" width="20" height="20" x="0px" y="0px"> <path fill="white" stroke="white" stroke-width="40" class="st0" d="M763.6,743.8L508.9,490c22.5-24.3,40-51.9,52.5-82.6s19-64.1,19.6-100c-2.4-77.3-29.2-141.2-80.3-191.7 S386.3,39,310.8,37.2c-79.7,1.8-145,28-195.8,78.5S37.9,230.1,36,307.4c2.4,77.3,29.2,141.2,80.3,191.7s114.4,76.7,189.9,78.5 c34.1-0.6,65.7-6.4,94.9-17.3c29.2-11,56-26.5,80.3-46.6l253.8,254.7L763.6,743.8z M306.3,537.5c-65.1-1.8-119.3-24.3-162.5-67.6 S78,372.6,76.2,307.4c1.8-65.1,24.3-119.4,67.6-163s97.4-66.2,162.5-68c65.1,1.8,119.4,24.5,163,68s66.2,97.8,68,163 c-1.8,65.1-24.5,119.3-68,162.5S371.4,535.7,306.3,537.5z"/> </svg> </button> <div class="menu-dropdown-panel"> <div class="menu-dropdown"><div class="nav-search section"> <div id="header_tabs--search" class="nav-search-container nav-dropdown-container header_tabs_content--container"> <div class="header_tabs_content--container"> <div class="header_nav--menu header_nav_search"> <div class="header_search search-button__component"> <form id="header_searchForm" class="header_search--form"> <div class="closebutton"></div> <input type="text" name="q" class="header_search--input" placeholder="What do you want to learn?" autocomplete="off"/> <svg viewBox="0 0 797 801" width="20" height="20" x="0px" y="0px"> <path fill="white" stroke="white" stroke-width="40" class="st0" d="M763.6,743.8L508.9,490c22.5-24.3,40-51.9,52.5-82.6s19-64.1,19.6-100c-2.4-77.3-29.2-141.2-80.3-191.7 S386.3,39,310.8,37.2c-79.7,1.8-145,28-195.8,78.5S37.9,230.1,36,307.4c2.4,77.3,29.2,141.2,80.3,191.7s114.4,76.7,189.9,78.5 c34.1-0.6,65.7-6.4,94.9-17.3c29.2-11,56-26.5,80.3-46.6l253.8,254.7L763.6,743.8z M306.3,537.5c-65.1-1.8-119.3-24.3-162.5-67.6 S78,372.6,76.2,307.4c1.8-65.1,24.3-119.4,67.6-163s97.4-66.2,162.5-68c65.1,1.8,119.4,24.5,163,68s66.2,97.8,68,163 c-1.8,65.1-24.5,119.3-68,162.5S371.4,535.7,306.3,537.5z"/> </svg> </form> <a href="/search" class="hidden header_search--url"></a> </div> </div> <div id="header-search-results-all" class="header_tabs_content--container nav-search-item"> <div id="search-menu__results-dropdown" class="nav-search-result"> <div id="header_dropdown--resultList"></div> <div id="header_dropdown--resultListCourses"></div> </div> <div class="nav-search-result paths"> <div id="header_dropdown--resultListPaths"></div> </div> </div> </div> </div> <script id="header-search-categories-templates-partial" type="text/x-handlebars-template"> {{#compare this.name '===' 'courses'}} <ul class="header_dropdown--lists"> <li class="first li-list">{{{this.name}}}</li> {{#each this.results}} <li><a href="{{formatCourseURL this.courseName 'course'}}">{{{this.title}}}</a></li> {{/each}} <li class="last li-list"><a class="view-all-link" data-tab-param="{{mapResultSetNameToTabName this.name}}" data-categories="{{this.name}}">See more results</a></li> </ul> {{/compare}} </script> </div></div> </div> </li> </ul> <ul class="ps-item ps-item-utility"> <li class="menu-button"> <a href="#contact-sales" data-aa-title="skills-nav-Contact sales" class="fancybox button--secondary--white button"> Contact Sales </a> </li> <li class="menu-button"> <a href="/pricing/skills" data-aa-title="skills-nav-Skills-Try for free" class=" button--gradient button"> Try for free </a> </li> </ul> </div> </div> </nav> </header> <div class="header-padding "></div> <div class="generic-modal section"> <div id="contact-sales" class="main modal-wrapper clearfix "> <div class="clearfix"><div class="free-form-component section"> <style> .hero-2-marketo-form .mktoCaptchaDisclaimer {color: #fff;} </style> </div> <div class="generic-block section"> <div id="contact-sales_" class="hidden"></div> <div class="generic-block-wrapper lazy-bg block block--custom-color block--left padding-top-zero padding-bottom-zero contact-sales clearfix" style="background: #1B1834;border-radius:16px;"> <div class="main clearfix"> <div class="content clearfix"><div class="column-control section"> <div class="container column-control-container"> <div class="row large"> <div class="columns customPadding large-12 small-12"><div class="title2 section"> <div data-emptytext="Title"> <h2 id="contact_sales_h1" class=" mobile-font-size-6 tablet-font-size-5 desk-font-size-4 title--left title--ultra "> Contact Sales </h2> </div></div> <div class="marketo-form section"> <div class="marketo-form-component marketo-form--inline marketo-form--left clearfix"> <div class="marketo-form-data hidden"> <span class="form-id">1298</span> <a class="redirect-path">Redirect Link</a> <span class="download-path"></span> <span class="success-message"><div class="contact-sales__title">Thank you!</div> <div class="contact-sales__subtitle"> Our team will be in touch shortly. </div></span> <span class="marketo-wid"></span> <span class="marketo-biz-email"></span> </div> <form name="mkto_form" id="marketoForm_1298" class="marketo-target"><div class="loading-message"><p class="loading-message-top">Loading form...</p><p class="loading-message-bottom">If this message remains, it may be due to cookies being disabled or to an ad blocker.</p></div></form> <iframe id="marketo-file" style="display:none;"></iframe> </div> <script type="text/javascript" src="//cdn-0.d41.co/tags/ff-2.min.js" charset="utf-8"></script> </div> <div class="free-form-component section"> <style> .mode-edit .ps-navigation .generic-modal > .main#contact-sales {display: none;} .contact-sales .mktoForm .mktoButtonWrap.mktoSimple button.mktoButton { background: linear-gradient(145deg, #f05a28 0, #e80a89 100%) !important; } .contact-sales button:hover { background-color: #CC1671; } .contact-sales {padding: 40px !important; position: relative; box-sizing: border-box; } .contact-sales .marketo-form--inline .mktoForm {margin: 0 auto; font-family: 'Gotham SSm A', 'Gotham SSm B', sans-serif;} .contact-sales .mktoForm label.mktoLabel {font-family: 'Gotham SSm A', 'Gotham SSm B', sans-serif; color: #ffffff !important;} .contact-sales .mktoField { font-family: 'Gotham SSm A', 'Gotham SSm B', sans-serif !important; background: #2A2753 !important; border: none !important; color: #fff !important; box-shadow: none !important;border-radius:8px;} .contact-sales .mktoHtmlText { font-family: 'Gotham SSm A', 'Gotham SSm B', sans-serif ; color: #ffffff !important;} .contact-sales .mktoHtmlText a { color: #E82A89; } .contact-sales .ps_pilot_close_btn { position:absolute; top: -30px; right: -30px; width: 25px; z-index: 9999; cursor: pointer; } .contact-sales .marketo-form-component {margin: 0 -30px;} .contact-sales .mktoForm .mktoButtonWrap.mktoSimple button.mktoButton { border: none !important; border-radius: 999px !important; background: #e7005e !important; color: #ffffff !important; font-weight: 700 !important; text-transform: unset; transition: all .6s ease-in-out !important; } .contact-sales .mktoForm .mktoButtonWrap.mktoSimple button.mktoButton:hover { background: #ff1675 !important; } .contact-sales .mktoForm .mktoButtonWrap.mktoSimple button.mktoButton:focus { border: 2px solid rgba(255, 255, 255, 0.5) !important; } .contact-sales .mktoForm .mktoRadioList > label, .contact-sales .mktoForm .mktoCheckboxList > label { color: #ffffff !important; } .marketo-form__success-message.form-2183 {padding: 60px 0;} .contact-sales__title { font-weight: 900; font-size: 48px; line-height: 1; text-align: center; text-transform: uppercase; font-family: "Gotham A", "Gotham B", sans-serif; color: white; } .contact-sales .title--white { font-size: 21px; font-weight: 500; color: #ccc; margin-bottom: 25px; } .contact-sales__subtitle { font-size: 18px; color: white; text-align: center; } .fancybox-skin:has(.contact-sales) { background: unset; } .fancybox-opened .fancybox-skin { border-radius: 20px; } @media only screen and (min-width: 1024px) { .marketo-form__success-message.form-2183 { padding: 100px 30px; } .contact-sales__title { font-size: 40px; line-height: 1.2; } .contact-sales__subtitle {font-size: 28px;} } @media only screen and (max-width: 1024px) { #contact-sales {width: 100% !important;} .contact-sales {max-height: 560px; overflow-y: auto; padding: 40px 20px !important;} .contact-sales .marketo-form--inline .mktoForm .mktoFormRow {width: 100%; padding: 0;} .contact-sales .marketo-form--inline .mktoButtonRow {margin: 0;} .contact-sales .mktoForm .mktoFormCol {width: 100%;} .contact-sales .mktoForm .mktoFieldWrap {width: 100%;} .contact-sales .mktoForm input, .mktoForm select {width: 100% !important;} .contact-sales .marketo-form--inline .mktoForm {max-width: unset; margin: 0;} .contact-sales .marketo-form-component {margin: 0;} .contact-sales .ps_pilot_close_btn {right: -10px;} } @media only screen and (max-width: 320px) { .contact-sales .title2 h1 {margin-top: 40px;} .contact-sales .ps_pilot_close_btn {right: -20px;top: 20px;} } </style> <img src="/content/dam/pluralsight/images/target/new-home-marquee/close.png" class="ps_pilot_close_btn" alt="Close button"/> <script type="text/javascript"> jQuery(document).on({ click:function(e){ e.preventDefault(); jQuery('.fancybox-overlay').trigger("click"); } },'.ps_pilot_close_btn'); document.getElementsByTagName('body')[0].addEventListener("ps.mktoFormSuccess", function(data){ var salesForm = data.detail.formID; if(salesForm == '2183') { document.getElementsByClassName('contact-sales')[0].style.backgroundColor='#E80A89'; document.getElementById('contact_sales_h1').style.display='none'; } }); </script> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <input type="hidden" name="modal-override-width" class="modal-override-width"/> </div></div> </div> </div> </div></div> <div id="site-promo" style="display:none;"> <div id="site-promo-content"></div> <div class="promo-close-button">×</div> </div> <script> var noDBpromo=true;function showPromoIfPermitted(){if(document.cookie.indexOf("site-promo-closed=1")==-1||window.blockPromoHide){if(jQuery("#site-promo .promo-wrapper-contents").length>-1&&jQuery("#site-promo .promo-wrapper-contents").html()!=undefined&&jQuery("#site-promo .promo-wrapper-contents").html().trim()!=""){jQuery("#site-promo").slideDown(300)}jQuery("#site-promo .promo-close-button").click(function(){var d=new Date();d.setTime(d.getTime()+(12*60*60*1000));document.cookie="site-promo-closed=1; expires="+d.toUTCString()+"; path=/";jQuery("#site-promo").slideUp(300)});window.promoShown=true;if(window.setStickies){window.setStickies()}dtmEventTrigger("ps.promoShown",{})}}function promoCheck(){window.promoCheckRan=true;if(document.URL.indexOf("b2b=true")>-1||document.URL.indexOf("nopromos=true")>-1){var d=new Date();d.setTime(d.getTime()+(7*24*60*60*1000));document.cookie="nopromos=1; expires="+d.toUTCString()+"; path=/; domain=pluralsight.com"}if(document.cookie.indexOf("nopromos=1")==-1&&(window.location.host=='www.pluralsight.com'||window.location.host=='www-preview.pluralsight.com'||window.location.host=='www-dev.pluralsight.com'||window.location.host=='www-stage.pluralsight.com'||window.location.host=='learn.pluralsight.com'||window.location.host=='learn-stage.pluralsight.com'||window.location.host=='learn-dev.pluralsight.com'||window.location.host=='www.javascript.com'||window.location.host=='www-stage.javascript.com'||window.location.host=='www-dev.javascript.com'||window.location.host=='www-preview.javascript.com')){var isStage=false;if(window.location.host.indexOf("-stage.")>-1){isStage=true}var company="none";var audience="none";var mstime=(new Date()).valueOf();if(!noDBpromo&&dnbData.companyName){company=dnbData.companyName;audience=dnbData.industryNaics}jQuery.ajax({url:"/discounts/api/global-promo?company="+encodeURIComponent(company)+"&audience="+encodeURIComponent(audience)+"&time="+mstime,headers:{authorization:"aem"}}).done(function(promoData){if(promoData.campaignId||window.forceCampaignCode){window.globalPromos=promoData.promos;window.campaignCode=window.forceCampaignCode||promoData.campaignId;jQuery.ajax({url:"/content/pluralsight/en/global/promos/"+campaignCode+".html?time="+mstime}).done(function(bannerPage){var domainTransform=function(urlString){if(window.location.host=='learn.pluralsight.com'||window.location.host=='learn-stage.pluralsight.com'||window.location.host=='learn-dev.pluralsight.com'||window.location.host=='www.javascript.com'||window.location.host=='www-preview.javascript.com'||window.location.host=='www-dev.javascript.com'||window.location.host=='www-stage.javascript.com'){if(urlString.indexOf("/jscom")==0&&window.location.hostname.indexOf("javascript.com")>-1){urlString=urlString.substring(6,urlString.length)}else if(urlString.indexOf("/landing-pages")==0&&(window.location.hostname=="learn.pluralsight.com"||window.location.hostname=="learn-stage.pluralsight.com"||window.location.hostname=="learn-dev.pluralsight.com")){urlString=urlString.substring(14,urlString.length)}else{urlString="////";}}return urlString};var blockedPaths=jQuery(bannerPage).find(".promo-block-filters").data("blockedpaths");var blockedPathsArray=blockedPaths?blockedPaths.split(","):[];var isBlocked=false;for(i in blockedPathsArray){var blockedPath=blockedPathsArray[i].trim();if(blockedPath.indexOf("=")==0){blockedPath=blockedPath.substring(1,blockedPath.length);if(window.location.pathname==domainTransform(blockedPath)){isBlocked=true;if(isStage){console.log("Promo banners blocked on page.")}}}else if(window.location.pathname.indexOf(domainTransform(blockedPath))==0){isBlocked=true;if(isStage){console.log("Promo banners blocked on page.")}}}if(!isBlocked){var $banners=jQuery(bannerPage).find(".promo-wrapper-filter");var bannerFound=false;jQuery.each($banners,function(key,item){var allowedPaths=jQuery(item).data("allowedpaths");var allowedPathsArray=allowedPaths?allowedPaths.split(","):[];var isAllowed=false;for(i in allowedPathsArray){var allowedPath=allowedPathsArray[i].trim();if(allowedPath.indexOf("=")==0){allowedPath=allowedPath.substring(1,allowedPath.length);if(window.location.pathname==domainTransform(allowedPath)){isAllowed=true}}else if(window.location.pathname.indexOf(domainTransform(allowedPath))==0){isAllowed=true}}if(isAllowed){$content=jQuery(item);jQuery("#site-promo-content").empty().append($content);jQuery("#site-promo-content img[data-lazysrc], #site-promo-content .lazy-bg").each(function(index,item){if(typeof loadLazysrc!="undefined"){loadLazysrc(item)}});window.blockPromoHide=jQuery(item).data("blockhiding");showPromoIfPermitted();bannerFound=true;return false}});if(!bannerFound){if(isStage){console.log("No allowed banner found on promo config page.")}}}}).fail(function(){if(isStage){console.log("No promo page found for campaign code "+campaignCode)}});window.promoTriggered=true;dtmEventTrigger("ps.promoTriggered",{})}window.promoCheckCompleted=true})}}if(window.dnbData.status||noDBpromo){promoCheck()}setTimeout(function(){if(!window.promoCheckRan){window.promoCheck()}},3000); </script> <div> <script type="text/javascript" src="//customer.cludo.com/scripts/bundles/search-script.min.js"></script> <script> var element = document.createElement("link"); element.setAttribute("rel", "stylesheet"); element.setAttribute("type", "text/css"); element.setAttribute("href", "https://customer.cludo.com/css/templates/v1.1/essentials/cludo-search.min.css"); document.getElementsByTagName("head")[0].appendChild(element); var CludoSearch; (function () { var cludoSettings = {customerId: 10000847, engineId: 10001278, searchUrl: 'https://www.pluralsight.com/search.html', language: 'en', searchInputs: ['cludo-search-form'], hideSearchFilters: true, type: 'inline'}; CludoSearch= new Cludo(cludoSettings); CludoSearch.init(); })(); </script> <!--[if lte IE 9]> <script src="https://api.cludo.com/scripts/xdomain.js" slave="https://api.cludo.com/proxy.html" type="text/javascript"></script> <![endif]--> </div> <div id="content" class="clearfix " role="main"> <div class="course-content-main"> <div class="row column-control--super-wide"> <div class="large-12 columns"> <div class="course-content-breadcrumb"> <ul> <li><a href="/">Home</a></li> <li><a href="/browse">Browse</a></li> <li><a href="/courses">Courses</a></li> </ul> </div> <div class="course-content-container"> <div class="course-content-left"> <div id="course-page-hero"> <div class="course-type-list"> <div class="course-type-badge type-course"> <svg width="7" height="8" viewBox="0 0 7 8" fill="none" xmlns="http://www.w3.org/2000/svg" role="presentation"> <title>Simple play icon</title> <rect width="7" height="8" rx="3" fill="#D60056"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M0.384763 7.75368L6 4.17107C6.12307 4.09231 6.12695 3.83119 6 3.74994L0.384763 0.246175C0.244612 0.156478 0 0.289336 0 0.456743L0 7.54311C0 7.70951 0.243761 7.84392 0.384763 7.75368Z" fill="white"/> </svg> Course </div> <div class="course-type-badge type-library">Skills</div> </div> <h1>ASP.NET Core Web API: Best Practices</h1> <div class="course-content-about"> <span class="course-rating-stars"><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i></span> <span class="course-authors"><span>by </span><a href="/authors/steve-smith">Steve Smith</a></span> <p>Modern apps require web APIs more than ever before. This course will teach you best practices for writing better web APIs using ASP.NET Core.</p> </div> <!-- hero buttons --> <div class="ps-button section"> <a href="https://app.pluralsight.com/course-player?clipId=dfb25873-dbd0-47de-b51e-d8d9837022dc" class="button button--secondary--white button-overview_vid button--play" data-aa-title="course-hero-cta-video" target="_blank">Preview this course</a> </div> </div> <!-- /* YT */ --> <aside class="course-content-right hide-for-large-up"> <div class="course-content-right-container container-highlight"> <section class="course-content-section try-for-free"> <h3>Try for free</h3> <p>Get this course plus top-rated picks in tech skills and other popular topics.</p> <div class="cta-buttons"> <!-- CTA --> <div class="ps-button section main-course-signup"> <a href="https://www.pluralsight.com/buy?sku=IND-M-STANDARD-FT&wid=7010a000001x7Me" class="button button--gradient free_trial_checkout" title="Start free trial now" data-aa-title="course-hero-cta">Get started</a> </div> <div class="api-price-styling" data-product-price="IND-M-STANDARD"> <div class="api-price-wrapper"> <span class="curr-symbol">$</span><span class="curr-major">29</span><span class="curr-dec-sep">.</span><span class="curr-minor">00</span> </div> </div> per month after 10 day trial </div> </section> <section class="course-content-section"> <h3>Your 10 day Standard free trial includes</h3> <div class="library-item"> <div><img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/browse/pink-icons/courses-icon.png" alt="play icon"/></div> <div> <p><strong>Expert-led courses</strong></p> Keep up with the pace of change with thousands of expert-led, in-depth courses. </div> </div> </section> <section class="course-content-section"> <h3>For teams</h3> <p><a href="https://www.pluralsight.com/buy?sku=PROFESSIONAL-SG-PILOT&nomodal=true" data-product-sku="PROFESSIONAL-SG-PILOT"><strong>Give up to 50 users</strong></a> access to our full library including this course <strong>free for 30 days</strong></p> </section> </div> <div class="course-content-right-container"> <h2>Course info</h2> <div class="course-info-rows"> <div class="course-info-row-item">Rating</div> <div class="course-info-row-item"> <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i> <span>(108)</span> </div> </div> <div class="course-info-rows "> <div class="course-info-row-item">Level</div> <div class="course-info-row-item"> Advanced <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/course/level.png" class="course-info-icon"/> </div> </div> <div class="course-info-rows"> <div class="course-info-row-item">Updated</div> <div class="course-info-row-item"> Jul 8, 2024 <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/course/calendar.png" class="course-info-icon"/> </div> </div> <div class="course-info-rows"> <div class="course-info-row-item">Duration</div> <div class="course-info-row-item"> 3h 11m <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/course/clock.png" class="course-info-icon"/> </div> </div> </div> <div class="course-content-right-container"> <div class="course-assessment-banner"> <div> <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/skill-iq-logo-white.png" width="80" alt="Skill IQ"/> <h4>Not sure where to start?</h4> <p>Know exactly where everyone on your team stands with the skills you care about most</p> <a class="button--secondary--white button" href="https://www.pluralsight.com/product/skills-assessment"> Learn more </a> </div> </div> </div> </aside> <!-- /* Course Info */ --> <div class="course-page-section"> <h2>What you'll learn</h2> <p><p>Many web APIs cannot keep up with demands of modern software. In this course, ASP.NET Core Web API: Best Practices, you鈥檒l learn to build APIs better. First, you鈥檒l explore core design principles for API organization. Next, you鈥檒l discover important techniques to improve API scalability and security. Finally, you鈥檒l learn how to version your APIs without breaking existing clients. When you鈥檙e finished with this course, you鈥檒l have the skills and knowledge of web APIs needed to build fast, secure backends for modern applications.</p> </p> </div> <!-- /* Course TOC */ --> <div class="course-page-section"> <h2>Table of contents</h2> <div class="toc-container"> <div class="toc-item"> <div class="toc-title"> Course Overview <div> 2mins </div> </div> <div class="toc-content"> <ul> <li> <a href="https://app.pluralsight.com/course-player?clipId=dfb25873-dbd0-47de-b51e-d8d9837022dc" class="accordion-content__row clearfix" target="_blank"> <span class="accordion-content__row__title">Course Overview</span> <span class="accordion-content__row__time">2m</span> </a> </li> </ul> </div> </div> <div class="toc-item"> <div class="toc-title"> Why Care About Best Practices <div> 6mins </div> </div> <div class="toc-content"> <ul> <li> <a href="https://app.pluralsight.com/course-player?clipId=f81a8517-b724-4737-88ad-70e2ca178090" class="accordion-content__row clearfix" target="_blank"> <span class="accordion-content__row__title">Introduction</span> <span class="accordion-content__row__time">0m</span> </a> </li> <li> <a href="https://app.pluralsight.com/course-player?clipId=66a53777-edc8-48f6-83aa-cacacca46a7d" class="accordion-content__row clearfix" target="_blank"> <span class="accordion-content__row__title">Version Check</span> <span class="accordion-content__row__time">1m</span> </a> </li> <li> <a href="https://app.pluralsight.com/course-player?clipId=b4344667-fd96-48b4-b8a9-bdaba0281108" class="accordion-content__row clearfix" target="_blank"> <span class="accordion-content__row__title">Why Best Practices?</span> <span class="accordion-content__row__time">2m</span> </a> </li> <li> <a href="https://app.pluralsight.com/course-player?clipId=c61bece2-1fc3-43f9-a758-a94ef9683a43" class="accordion-content__row clearfix" target="_blank"> <span class="accordion-content__row__title">Benefits of Learning Best Practices</span> <span class="accordion-content__row__time">1m</span> </a> </li> <li> <a href="https://app.pluralsight.com/course-player?clipId=c8281475-f2ab-4b97-8bd7-ad54c2f6d87f" class="accordion-content__row clearfix" target="_blank"> <span class="accordion-content__row__title">Course Overview</span> <span class="accordion-content__row__time">2m</span> </a> </li> </ul> </div> </div> <div class="toc-item"> <div class="toc-title"> Web API Design Best Practices <div> 48mins </div> </div> <div class="toc-content"> <ul> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Introduction</span> <span class="accordion-content__row__time">2m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">REST and Resources</span> <span class="accordion-content__row__time">10m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">API Design with HTTP Verbs</span> <span class="accordion-content__row__time">10m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Demo: Working with HTTP Methods and Resources</span> <span class="accordion-content__row__time">3m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">API Design with HTTP Status Codes</span> <span class="accordion-content__row__time">8m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Demo: Working with HTTP Status Codes</span> <span class="accordion-content__row__time">3m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Using ASP.NET Core Response Types Properly</span> <span class="accordion-content__row__time">5m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Demo: ASP.NET Core Response Types</span> <span class="accordion-content__row__time">6m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Summary</span> <span class="accordion-content__row__time">1m</span> </a> </li> </ul> </div> </div> <div class="toc-item"> <div class="toc-title"> Web API Model Design Best Practices <div> 26mins </div> </div> <div class="toc-content"> <ul> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Introduction</span> <span class="accordion-content__row__time">1m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Web API Model Basics</span> <span class="accordion-content__row__time">4m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Applying Postel's Law</span> <span class="accordion-content__row__time">5m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">What Data Should Web APIs Return?</span> <span class="accordion-content__row__time">8m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Characteristics of Good Web API Models</span> <span class="accordion-content__row__time">5m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Web API Model Antipatterns</span> <span class="accordion-content__row__time">3m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Summary</span> <span class="accordion-content__row__time">1m</span> </a> </li> </ul> </div> </div> <div class="toc-item"> <div class="toc-title"> Web API Implementation Best Practices in ASP.NET Core <div> 39mins </div> </div> <div class="toc-content"> <ul> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Introduction</span> <span class="accordion-content__row__time">1m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">ASP.NET Core MVC Web API Best Practices</span> <span class="accordion-content__row__time">12m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Using MediatR with ASP.NET Core Web APIs</span> <span class="accordion-content__row__time">5m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Demo: Using Services and MediatR with Controllers</span> <span class="accordion-content__row__time">3m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Moving from Controllers to Endpoints</span> <span class="accordion-content__row__time">5m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">ASP.NET Core Minimal API Best Practices</span> <span class="accordion-content__row__time">4m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Demo: Organizing Minimal API Endpoints</span> <span class="accordion-content__row__time">3m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Adding Background Services to Web APIs</span> <span class="accordion-content__row__time">5m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Summary</span> <span class="accordion-content__row__time">1m</span> </a> </li> </ul> </div> </div> <div class="toc-item"> <div class="toc-title"> Web API Security Best Practices <div> 38mins </div> </div> <div class="toc-content"> <ul> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Introduction</span> <span class="accordion-content__row__time">1m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Securing Web APIs with JWTs</span> <span class="accordion-content__row__time">5m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Demo: Securing ASP.NET Core Web APIs with JWTs</span> <span class="accordion-content__row__time">4m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Using JWTs Properly</span> <span class="accordion-content__row__time">5m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Demo: Using JWTs and Refresh Tokens to Secure ASP.NET Core Web APIs</span> <span class="accordion-content__row__time">4m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Alternatives to Tokens</span> <span class="accordion-content__row__time">3m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Implementing Authorization and Authentication with ASP.NET Core</span> <span class="accordion-content__row__time">4m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Demo: Using Imperative Security Policies</span> <span class="accordion-content__row__time">4m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Configuring CORS and HTTPS</span> <span class="accordion-content__row__time">8m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Summary</span> <span class="accordion-content__row__time">1m</span> </a> </li> </ul> </div> </div> <div class="toc-item"> <div class="toc-title"> Testing ASP.NET Core Web APIs Best Practices <div> 29mins </div> </div> <div class="toc-content"> <ul> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Introduction</span> <span class="accordion-content__row__time">1m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Setting up Web API Tests</span> <span class="accordion-content__row__time">9m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Demo: Working with WebApplicationFactory in ASP.NET Core Web API Integration Tests</span> <span class="accordion-content__row__time">4m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Seeding Test Data</span> <span class="accordion-content__row__time">5m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Using Helpers to Improve Tests</span> <span class="accordion-content__row__time">5m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Demo: Refactoring Web API Integration Tests</span> <span class="accordion-content__row__time">5m</span> </a> </li> <li> <a href="#invite-modal" class="accordion-content__row fancybox clearfix"> <i class="fa fa-lock" aria-hidden="true"></i> <span class="accordion-content__row__title">Summary</span> <span class="accordion-content__row__time">1m</span> </a> </li> </ul> </div> </div> </div> </div> <!-- /* Course FAQ */ --> <!-- /* Course Author */ --> <div class="course-page-section course-page-last"> <h2>About the author</h2> <div class="author-item"> <div class="author-profile"> <a href="/authors/steve-smith"> <div class="author-image"> <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="https://pluralsight.imgix.net/author/lg/e76636bd-28f4-443d-b8f3-18fdbeb2c3ec.jpg?w=100" alt=""/> </div> <div class="author-name"> Steve Smith </div> </a> </div> <p>Steve Smith (@ardalis) is an entrepreneur and software developer with a passion for building quality software as effectively as possible. He provides mentoring and training workshops for teams with the desire to improve. Steve has been recognized as a Microsoft MVP for over 10 consecutive years, and is a frequent speaker at software developer conferences and events. He is the top contributor to the official documentation on ASP.NET Core and enjoys helpings others write maintainable, testable app<span>... <a href="#" onclick="javascript:jQuery(this).parent().hide().parent().find('.trimmed-text').fadeIn(250);return false;">more</a></span><span class="trimmed-text" style="display: none;">lications using Microsoft's developer tools. Connect with Steve at ardalis.com.</span></p> <div class="author-more"> <a href="/authors/steve-smith" class="simple_arrow">See more courses by Steve Smith</a> </div> </div> </div> </div> <aside class="course-content-right show-for-large-up"> <div class="course-content-right-container container-highlight"> <section class="course-content-section try-for-free"> <h3>Try for free</h3> <p>Get this course plus top-rated picks in tech skills and other popular topics.</p> <div class="cta-buttons"> <!-- CTA --> <div class="ps-button section main-course-signup"> <a href="https://www.pluralsight.com/buy?sku=IND-M-STANDARD-FT&wid=7010a000001x7Me" class="button button--gradient free_trial_checkout" title="Start free trial now" data-aa-title="course-hero-cta">Get started</a> </div> <div class="api-price-styling" data-product-price="IND-M-STANDARD"> <div class="api-price-wrapper"> <span class="curr-symbol">$</span><span class="curr-major">29</span><span class="curr-dec-sep">.</span><span class="curr-minor">00</span> </div> </div> per month after 10 day trial </div> </section> <section class="course-content-section"> <h3>Your 10 day Standard free trial includes</h3> <div class="library-item"> <div><img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/browse/pink-icons/courses-icon.png" alt="play icon"/></div> <div> <p><strong>Expert-led courses</strong></p> Keep up with the pace of change with thousands of expert-led, in-depth courses. </div> </div> </section> <section class="course-content-section"> <h3>For teams</h3> <p><a href="https://www.pluralsight.com/buy?sku=PROFESSIONAL-SG-PILOT&nomodal=true" data-product-sku="PROFESSIONAL-SG-PILOT"><strong>Give up to 50 users</strong></a> access to our full library including this course <strong>free for 30 days</strong></p> </section> </div> <div class="course-content-right-container"> <h2>Course info</h2> <div class="course-info-rows"> <div class="course-info-row-item">Rating</div> <div class="course-info-row-item"> <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i> <span>(108)</span> </div> </div> <div class="course-info-rows "> <div class="course-info-row-item">Level</div> <div class="course-info-row-item"> Advanced <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/course/level.png" class="course-info-icon"/> </div> </div> <div class="course-info-rows"> <div class="course-info-row-item">Updated</div> <div class="course-info-row-item"> Jul 8, 2024 <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/course/calendar.png" class="course-info-icon"/> </div> </div> <div class="course-info-rows"> <div class="course-info-row-item">Duration</div> <div class="course-info-row-item"> 3h 11m <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/course/clock.png" class="course-info-icon"/> </div> </div> </div> <div class="course-content-right-container"> <div class="course-assessment-banner"> <div> <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/skill-iq-logo-white.png" width="80" alt="Skill IQ"/> <h4>Not sure where to start?</h4> <p>Know exactly where everyone on your team stands with the skills you care about most</p> <a class="button--secondary--white button" href="https://www.pluralsight.com/product/skills-assessment"> Learn more </a> </div> </div> </div> </aside> </div> </div> </div> </div> <div class="course-page-bottom"> <div class="course-content-banner"> <div class="course-content-banner-container"> <span>Ready to upskill?</span> <a href="https://www.pluralsight.com/buy?sku=IND-M-STANDARD-FT&wid=7010a000001x7Me" class="button button--black free_trial_checkout" title="Get started" data-aa-title="course-footer-cta">Get started</a> </div> </div> </div> </div> <div class="invite-modal-wrap"> <div id="invite-modal" class="invite_modal__content"> <h3>Get access now</h3> <p>Sign up to get immediate access to this course plus thousands more you can watch anytime, anywhere.</p> <div class="invite_modal__callouts"> <a href="#" class="cancel close-fancybox">Cancel</a> <a href="https://www.pluralsight.com/buy?sku=IND-M-STANDARD-FT" class="button button--gradient free_trial_checkout" title="Start free trial now" data-aa-title="course-hero-cta">Start free 10-day trial</a> <a href="#" class="cancel mobile close-fancybox">Cancel</a> </div> </div> </div> <!-- included by base on all pages. --> <div id="ps_pro_qty_modal"> <div class="column-control section"> <div class="container column-control-container "> <div class="row column-control--wide"> <div class="large-5 columns column_qty large-push-7"> <h3>Ready to skill up<br/>your entire team?</h3> <div class="qty-selector"> <div class="qty-down"><i class="icons" icon="down-arrow"></i></div> <div class="qty-display"> <div class="qty-display-number">20</div> <div class="qty-display-label">Subscriptions</div> </div> <div class="qty-up"><i class="icons" icon="up-arrow"></i></div> </div> <div class="qty-sales-message hidden">Need more subscriptions? <a href="/product/contact-sales">Contact sales</a>.</div> <a class="button button--gradient button--small biz_qty_checkout pilot-hide" data-aa-title="pro-qty-modal-signup" href="https://www.pluralsight.com/buy?sku=PROFESSIONAL-SG&quantity=20">Continue to checkout</a> <a class="button button--gradient button--small biz_qty_checkout pilot-show" data-aa-title="pro-qty-modal-trial" href="https://www.pluralsight.com/buy?sku=PROFESSIONAL-SG-PILOT&quantity=20">Continue to checkout</a> <div class="ps_pro_qty_modal-cancel">Cancel</div> </div> <div class="large-7 columns column_feature large-pull-5"> <h3 class="pilot-hide">With your Pluralsight plan, you can:</h3> <h3 class="pilot-show">With your 30-day pilot, you can:</h3> <ul> <li class="pilot-hide">Access thousands of videos to develop critical skills</li> <li class="pilot-show">Give up to 50 users access to thousands of video courses</li> <li>Practice and apply skills with interactive courses and projects</li> <li>See skills, usage, and trend data for your teams</li> <li>Prepare for certifications with industry-leading practice exams</li> <li>Measure proficiency across skills and roles</li> <li>Align learning to your goals with paths and channels</li> </ul> </div> </div> </div> </div> </div> <div id="ps_starter_qty_modal"> <div class="column-control section"> <div class="container column-control-container "> <div class="row column-control--wide"> <div class="large-5 columns column_qty large-push-7"> <h3>Ready to skill up<br/>your entire team?</h3> <div class="qty-selector"> <div class="qty-down"><i class="icons" icon="down-arrow"></i></div> <div class="qty-display"> <div class="qty-display-number">10</div> <div class="qty-display-label">Subscriptions</div> </div> <div class="qty-up"><i class="icons" icon="up-arrow"></i></div> </div> <div class="qty-sales-message hidden">Need more subscriptions? <a href="/product/contact-sales">Contact sales</a>.</div> <a class="button button--gradient button--small biz_qty_checkout pilot-hide" data-aa-title="starter-qty-modal-signup" href="https://www.pluralsight.com/buy?sku=STARTER-A&quantity=10">Continue to checkout</a> <div class="ps_starter_qty_modal-cancel">Cancel</div> </div> <div class="large-7 columns column_feature large-pull-5"> <h3 class="pilot-hide">With your Pluralsight plan, you can:</h3> <h3 class="pilot-show">With your 30-day pilot, you can:</h3> <ul> <li class="pilot-hide">Access thousands of videos to develop critical skills</li> <li class="pilot-show">Give up to 50 users access to thousands of video courses</li> <li>Practice and apply skills with interactive courses and projects</li> <li>See skills, usage, and trend data for your teams</li> <li>Prepare for certifications with industry-leading practice exams</li> <li>Measure proficiency across skills and roles</li> <li>Align learning to your goals with paths and channels</li> </ul> </div> </div> </div> </div> </div> <div class="xf-page xfpage page basicpage"> <div class="xf-content-height"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="footer-wrapper aem-GridColumn aem-GridColumn--default--12"> <div class="footer-wrapper aem-component" id="unified-footer-id"> <div class="footer-top-row"> <ul class="footer-column-list"> <li class="footer-column"> <div class="footer-column aem-component"> <h2 class="footer-column-header">Support</h2> <ul class="parsys footer-column-parsys"><li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/contact" class="footer-column-list-item-link" data-aa-title="tracking-contact" target="_blank">Contact</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="https://help.pluralsight.com/hc/en-us" class="footer-column-list-item-link" data-aa-title="tracking-help" target="_blank">Help Center</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="https://help.pluralsight.com/hc/en-us/articles/24428176323476" class="footer-column-list-item-link" data-aa-title="tracking-ip-allowlist" target="_blank">IP Allowlist</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="https://www.pluralsight.com/sitemap.xml" class="footer-column-list-item-link" data-aa-title="tracking-sitemap" target="_blank">Site Map</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/product/downloads" class="footer-column-list-item-link" data-aa-title="tracking-downloads" target="_blank">Download Pluralsight</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/pricing/skills" class="footer-column-list-item-link" data-aa-title="tracking-skills" target="_blank">Skills Plans</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/cloud-guru/pricing" class="footer-column-list-item-link" data-aa-title="footer-cloud-guru-pricing" target="_blank">A Cloud Guru Plans</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/pricing/flow" class="footer-column-list-item-link" data-aa-title="tracking-flow-plans" target="_blank">Flow Plans</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/product/professional-services" class="footer-column-list-item-link" data-aa-title="tracking-professional-services" target="_blank">Professional Services</a> </div> </li> </ul> </div> </li> <li class="footer-column"> <div class="footer-column aem-component"> <h2 class="footer-column-header">Community</h2> <ul class="parsys footer-column-parsys"><li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="https://www.pluralsight.com/guides" class="footer-column-list-item-link" data-aa-title="tracking-guides" target="_blank">Guides</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/teach" class="footer-column-list-item-link" data-aa-title="tracking-teach" target="_blank">Teach</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/partners" class="footer-column-list-item-link" data-aa-title="tracking-partner-with-pluralsight" target="_blank">Partner with Pluralsight</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/affiliate" class="footer-column-list-item-link" data-aa-title="tracking-affiliate" target="_blank">Affiliate Partners</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="https://www.pluralsightone.org/" class="footer-column-list-item-link" data-aa-title="tracking-pluralsight-one" target="_blank">Pluralsight One</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/authors" class="footer-column-list-item-link" data-aa-title="tracking-authors" target="_blank">Authors</a> </div> </li> </ul> </div> </li> <li class="footer-column"> <div class="footer-column aem-component"> <h2 class="footer-column-header">Company</h2> <ul class="parsys footer-column-parsys"><li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/about" class="footer-column-list-item-link" data-aa-title="tracking-about" target="_blank">About Us</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/careers" class="footer-column-list-item-link" data-aa-title="tracking-careers" target="_blank">Careers</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/newsroom" class="footer-column-list-item-link" data-aa-title="tracking-newsroom" target="_blank">Newsroom</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/resources" class="footer-column-list-item-link" data-aa-title="tracking-resources" target="_blank">Resources</a> </div> </li> </ul> </div> </li> <li class="footer-column"> <div class="footer-column aem-component"> <h2 class="footer-column-header">Industries</h2> <ul class="parsys footer-column-parsys"><li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/industries/public-sector/higher-education" class="footer-column-list-item-link" data-aa-title="footer-industries-education" target="_blank">Education</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/industries/finance" class="footer-column-list-item-link" data-aa-title="footer-industries-finance" target="_blank">Financial Services (FSBI)</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/industries/healthcare" class="footer-column-list-item-link" data-aa-title="footer-industries-healthcare" target="_blank">Healthcare</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/industries/insurance" class="footer-column-list-item-link" data-aa-title="footer-industries-insurance" target="_blank">Insurance</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="https://www.pluralsightone.org/" class="footer-column-list-item-link" data-aa-title="tracking-non-profit" target="_blank">Non-Profit</a> </div> </li> <li class="footer-column-list-item section"> <div class="footer-column-list-item aem-component"> <a href="/industries/public-sector" class="footer-column-list-item-link" data-aa-title="tracking-public-sector" target="_blank">Public Sector</a> </div> </li> </ul> </div> </li> </ul> <div class="footer-form-section"> <div class="footer-form"> <h2 class="footer-form-header"> Newsletter </h2> <div class="marketo-form-component marketo-form--stacked marketo-form--left clearfix"> <p class="marketo-form--headerMessage">Sign up with your email to join our mailing list.</p> <div class="marketo-form-data hidden"> <span class="form-id">1041</span> <a class="redirect-path">Redirect Link</a> <span class="download-path"></span> <span class="success-message">Form Submitted Successfully!</span> <span class="marketo-wid"></span> <span class="marketo-biz-email"></span> </div> <form name="mkto_form" id="marketoForm_1041" class="marketo-target"><div class="loading-message"><p class="loading-message-top">Loading form...</p><p class="loading-message-bottom">If this message remains, it may be due to cookies being disabled or to an ad blocker.</p></div></form> <iframe id="marketo-file" style="display:none;"></iframe> </div> <script type="text/javascript" src="//cdn-0.d41.co/tags/ff-2.min.js" charset="utf-8"></script> </div> <ul class="footer-social-section"> <li class="social-icon"> <div class="social-icon aem-component"> <a class="social-icon-link" href="https://www.facebook.com/pluralsight" data-aa-title="tracking-footer-social-facebook" target="_blank"> <span class="social-icon-image-wrapper"> <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/content/dam/social-icons/social-icon-fb-blue.webp" alt="Facebook Logo Icon" style=" max-height: 19px; " class=" "/> </span> </a> </div> </li> <li class="social-icon"> <div class="social-icon aem-component"> <a class="social-icon-link" href="https://twitter.com/pluralsight" data-aa-title="tracking-footer-social-twitter" target="_blank"> <span class="social-icon-image-wrapper"> <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/content/dam/social-icons/social-icon-twitter-blue.webp" alt="Twitter Logo Icon" style=" max-height: 16px; " class=" "/> </span> </a> </div> </li> <li class="social-icon"> <div class="social-icon aem-component"> <a class="social-icon-link" href="https://www.instagram.com/accounts/login/?next=/pluralsight/" data-aa-title="tracking-footer-social-instagram" target="_blank"> <span class="social-icon-image-wrapper"> <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/content/dam/social-icons/social-icon-instagram-blue.webp" alt="Instagram Logo Icon" style=" max-height: 18px; " class=" "/> </span> </a> </div> </li> <li class="social-icon"> <div class="social-icon aem-component"> <a class="social-icon-link" href="https://www.linkedin.com/company/pluralsight/mycompany/verification/" data-aa-title="tracking-footer-social-linkedin" target="_blank"> <span class="social-icon-image-wrapper"> <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/content/dam/social-icons/social-icon-linkedin-blue.webp" alt="LinkedIn Logo Icon" style=" max-height: 18px; " class=" "/> </span> </a> </div> </li> <li class="social-icon"> <div class="social-icon aem-component"> <a class="social-icon-link" href="https://www.youtube.com/pluralsight" data-aa-title="tracking-footer-social-youtube" target="_blank"> <span class="social-icon-image-wrapper"> <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/content/dam/social-icons/social-icon-yt-blue.webp" alt="Youtube Logo Icon" style=" max-height: 20px; " class=" "/> </span> </a> </div> </li> </ul> </div> </div> <div class="footer-bottom-row"> <a href="/" class="footer-copyright-link" data-aa-title="tracking-footer-logo" target="_blank"> <span class="footer-copyright-icon-wrapper"> <img src="/etc.clientlibs/pluralsight/clientlibs/clientlib-main/resources/images/px.png" data-lazysrc="/content/dam/pluralsight-creative-team/creative_portfolio/brand_strategic_refresh2022program/brand_strategic_refreshcreativeexploration2022project/final/pluralsight/mark/png/Pluralsight-Logo-Mark-Color-Fill.png" alt="Pluralsight Logo" style=" max-height: 50px; " class=" "/> </span> <span class="footer-copyright-link-text"> Copyright 漏 2004 - 2024 Pluralsight LLC. All rights reserved </span> </a> <div class="footer-language-selector"> <span class="footer-language-icon-wrapper"> </span> <ul class="footer-language-link-list"> <li class="footer-column-list-item"> <div class="footer-column-list-item aem-component"> <a class="footer-column-list-item-link"></a> </div> </li> <li class="footer-column-list-item"> <div class="footer-column-list-item aem-component"> <a class="footer-column-list-item-link"></a> </div> </li> <li class="footer-column-list-item"> <div class="footer-column-list-item aem-component"> <a class="footer-column-list-item-link"></a> </div> </li> </ul> </div> <ul class="footer-policy-link-list"> <li class="footer-column-list-item"> <div class="footer-column-list-item aem-component"> <a href="https://legal.pluralsight.com/policies" class="footer-column-list-item-link" data-aa-title="tracking-terms" target="_blank">Terms of Use</a> </div> </li> <li class="footer-column-list-item"> <div class="footer-column-list-item aem-component"> <a href="https://legal.pluralsight.com/policies?name=privacy-notice" class="footer-column-list-item-link" data-aa-title="tracking-privacy" target="_blank">Privacy Notice</a> </div> </li> <li class="footer-column-list-item"> <div class="footer-column-list-item aem-component"> <a href="https://legal.pluralsight.com/policies?name=modern-slavery-act-transparency-statement" class="footer-column-list-item-link" data-aa-title="tracking-code-of-conduct" target="_blank">Modern Slavery Statement</a> </div> </li> </ul> </div> </div> </div> </div> </div></div> <script> jQuery(".text.section, .text-2.section, .text-3.section, .text-4.section, .title.section, .title2.section").each(function(key,item) { if (item.innerHTML.indexOf("\u2028") > -1){ item.innerHTML = item.innerHTML.replace(/\u2028/g, ' '); } }); </script> <script> function isElementInViewport (el) { var rect = el.getBoundingClientRect(); return ( rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */ rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */ ); } function loadLazysrc(item){ var $item = jQuery(item); if ($item.hasClass("lazy-bg")){ $item.removeClass("lazy-bg"); } else { var src = $item.attr('data-lazysrc'); $item.attr('src',src); $item.removeAttr('data-lazysrc'); } } //lazy load images above the fold jQuery('img[data-lazysrc],.lazy-bg').each(function(index,item){ if ( jQuery(item).is(":visible") && isElementInViewport(item) ){ loadLazysrc(item); } else if (document.URL.indexOf("lazyLoadOff=true") > -1){ loadLazysrc(item); } }); //lazy load images below the fold. Keep function available for promo service or others that may need it. window.addEventListener('load', function(){ jQuery('img[data-lazysrc],.lazy-bg').each(function(index,item){ loadLazysrc(item); }); }); </script> <script type="text/javascript" src="/etc.clientlibs/pluralsight/clientlibs/clientlib-uber.lc-98cf77479a432fe7e1148029666aa247-lc.min.js" defer></script> <link rel="stylesheet" href="/content/dam/gtm/ps-tt-commons.css" type="text/css"/> </div> </div> <script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8e92cca01dcacdde',t:'MTczMjcxNzY1MC4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body> </html>