[{"data":1,"prerenderedAt":1184},["Reactive",2],{"navigation":3,"/posts/testing-your-api-with-rest-client":204,"/posts/testing-your-api-with-rest-client-surround":1168},[4,192,200],{"title":5,"_path":6,"children":7,"icon":191},"Blog","/posts",[8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,176,179,182,185,188],{"title":9,"_path":10},"Testing your API with REST Client","/posts/testing-your-api-with-rest-client",{"title":12,"_path":13},"HTML templating in Xamarin","/posts/html-templating-in-xamarin",{"title":15,"_path":16},"Goodbye Azure Portal, Welcome Azure CLI","/posts/welcome-azure-cli",{"title":18,"_path":19},"Coming across Gitpod","/posts/gitpod",{"title":21,"_path":22},"Handle token retrieval while querying an API","/posts/delegating-handler",{"title":24,"_path":25},"Clean up your local git branches.","/posts/cleaning-git-branches",{"title":27,"_path":28},"Automate configuration of Teams Tab SSO with PowerShell.","/posts/teams-sso-powershell",{"title":30,"_path":31},"How to do a technology watch? - Part 1","/posts/technology-watch-part1",{"title":33,"_path":34},"How to do a technology watch? - Part 2","/posts/technology-watch-part2",{"title":36,"_path":37},"You almost no longer need Key Vault references for Azure Functions.","/posts/azure-functions-custom-configuration",{"title":39,"_path":40},"How to do a technology watch? - Part 3","/posts/technology-watch-part3",{"title":42,"_path":43},"Forget DevOps, the future is already here!","/posts/devops-future",{"title":45,"_path":46},"Week 9, 2021 - Tips I learned this week","/posts/w09-2021-tips-learned-this-week",{"title":48,"_path":49},"Week 12, 2021 - Tips I learned this week","/posts/w12-2021-tips-learned-this-week",{"title":51,"_path":52},"Week 14, 2021 - Tips I learned this week","/posts/w14-2021-tips-learned-this-week",{"title":54,"_path":55},"Once upon a time in .NET","/posts/once-upon-a-time-in-dotnet",{"title":57,"_path":58},"Install your applications with winget","/posts/winget-import",{"title":60,"_path":61},"Customize your applications when installing them with winget","/posts/winget-override",{"title":63,"_path":64},"Week 22, 2021 - Tips I learned this week","/posts/w22-2021-tips-learned-this-week",{"title":66,"_path":67},"How to connect to an Azure SQL Database from C# using Azure AD","/posts/sqlclient-active-directory-authent",{"title":69,"_path":70},"Producing packages for Windows Package Manager","/posts/wingetcreate",{"title":72,"_path":73},"4 tips about GitHub Actions environment variables and contexts","/posts/github-actions-var-and-context",{"title":75,"_path":76},"AzureWebJobsStorage, the secret you don't need in your Function App.","/posts/azure-functions-without-azurewebjobsstorage",{"title":78,"_path":79},"ASP.NET Core - Lost in configuration","/posts/lost-in-configuration",{"title":81,"_path":82},"Week 39, 2021 - Tips I learned this week","/posts/w39-2021-tips-learned-this-week",{"title":84,"_path":85},"Week 41, 2021 - Tips I learned this week","/posts/w41-2021-tips-learned-this-week",{"title":87,"_path":88},"Migrating and open-sourcing my blog","/posts/migrating-blog",{"title":90,"_path":91},"Week 45, 2021 - Tips I learned this week","/posts/w45-2021-tips-learned-this-week",{"title":93,"_path":94},"Organize your GitHub stars with Astral","/posts/astral",{"title":96,"_path":97},"Pulumi with an Azure Blob Storage backend","/posts/pulumi-azure-backend",{"title":99,"_path":100},"IaC Hot Reload with Pulumi Watch","/posts/pulumi-watch",{"title":102,"_path":103},"Week 2, 2022 - Tips I learned this week","/posts/w02-2022-tips-learned-this-week",{"title":105,"_path":106},"Week 3, 2022 - Tips I learned this week","/posts/w03-2022-tips-learned-this-week",{"title":108,"_path":109},"Week 5, 2022 - Tips I learned this week","/posts/w05-2022-tips-learned-this-week",{"title":111,"_path":112},"How to provision an Azure SQL Database with Active Directory authentication","/posts/sqldatabase-active-directory-authent",{"title":114,"_path":115},"Why will I choose Pulumi over Terraform for my next project?","/posts/pulumi-vs-terraform",{"title":117,"_path":118},"Week 19, 2022 - Tips I learned this week","/posts/w19-2022-tips-learned-this-week",{"title":120,"_path":121},"Week 20, 2022 - Tips I learned this week","/posts/w20-2022-tips-learned-this-week",{"title":123,"_path":124},"Keeping secrets secure when using API Clients","/posts/http-clients-secrets",{"title":126,"_path":127},"What made me want to be a developer?","/posts/be-a-developer",{"title":129,"_path":130},"What can we do when stuck with a programming problem?","/posts/get-unstuck",{"title":132,"_path":133},"How did I automate the setup of my developer Windows laptop?","/posts/automate-developer-machine",{"title":135,"_path":136},"Discussion about API clients","/posts/http-clients",{"title":138,"_path":139},"Week 46, 2022 - Tips I learned this week","/posts/w46-2022-tips-learned-this-week",{"title":141,"_path":142},"When Pulumi met Nuke: a .NET love story","/posts/when-pulumi-met-nuke",{"title":144,"_path":145},"A year of learning and sharing - Dev Retro 2022","/posts/2022-retro",{"title":147,"_path":148},"Perform Dynamic Execution of an npm Package","/posts/pnpm-dlx",{"title":150,"_path":151},"Manage multiple Node.js versions","/posts/pnpm-env",{"title":153,"_path":154},"Introducing the Vue.js CI/CD series","/posts/vuecicd-introduction",{"title":156,"_path":157},"Execute commands using your project dependencies","/posts/pnpm-exec",{"title":159,"_path":160},"Vue.js CI/CD: Continuous Integration","/posts/vuecicd-ci",{"title":162,"_path":163},"Who is using pnpm?","/posts/pnpm-who-is-using",{"title":165,"_path":166},"Create an Azure-Ready GitHub Repository using Pulumi","/posts/azure-ready-github-repository",{"title":168,"_path":169},"Deploying to Azure from Azure DevOps without secrets","/posts/ado-workload-identity-federation",{"title":171,"_path":172},"Effortlessly Configure GitHub Repositories for Azure Deployment via OIDC","/posts/scripting-azure-ready-github-repository",{"title":174,"_path":175},"Playing with the .NET 8 Web API template","/posts/playing-with-dotnet8",{"title":177,"_path":178},"Another year of sharing and learning - Dev Retro 2023","/posts/2023-retro",{"title":180,"_path":181},"Week 4, 2024 - Tips I learned this week","/posts/w04-2024-tips-learned-this-week",{"title":183,"_path":184},"Using dependency injection with Azure .NET SDK","/posts/azure-sdk-di",{"title":186,"_path":187},"Having Fun With IT Event Calendars","/posts/it-event-calendars",{"title":189,"_path":190},"Call your Azure AD B2C protected API with authenticated HTTP requests from your JetBrains IDE","/posts/http-clients-oauth2","i-heroicons-newspaper",{"title":193,"_path":194,"children":195,"icon":199},"Goodies","/goodies",[196],{"title":197,"_path":198},"My Git Cheat Sheet","/goodies/gitcheatsheet","i-heroicons-gift-solid",{"title":201,"_path":202,"icon":203},"About","/about","i-heroicons-user-circle-solid",{"_path":10,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":9,"description":208,"lead":209,"date":210,"image":211,"badge":213,"tags":215,"body":220,"_type":1163,"_id":1164,"_source":1165,"_file":1166,"_extension":1167},"posts",false,"","Let's talk about tooling and testing an API!","Why using the vscode extension \"REST Client\" instead of Postman?","2019-03-05T00:00:00.000Z",{"src":212},"/images/swiss_knifes.jpg",{"label":214},"Tooling",[216,217,218,219],"tooling","vscode","rest","HTTP",{"type":221,"children":222,"toc":1156},"root",[223,230,237,242,254,259,275,281,290,322,327,341,374,385,391,426,435,440,709,755,764,770,775,780,785,791,796,808,813,1150],{"type":224,"tag":225,"props":226,"children":227},"element","p",{},[228],{"type":229,"value":208},"text",{"type":224,"tag":231,"props":232,"children":234},"h2",{"id":233},"gui-tools-and-their-limits",[235],{"type":229,"value":236},"GUI Tools and their limits",{"type":224,"tag":225,"props":238,"children":239},{},[240],{"type":229,"value":241},"Like most developers I guess, I often use GUI tools like Fiddler or Postman to query an API.\nOnce you get used to the HMI of Postman with all its tabs, it's quite easy to create GET / POST / PUT / ... requests, save them in a collection, and visualize the answers. Postman offers a lot of other features, but a very handy one is the possibility to use environment variables in your requests.",{"type":224,"tag":225,"props":243,"children":244},{},[245],{"type":224,"tag":246,"props":247,"children":253},"img",{"alt":248,"className":249,"src":252},"Postman UI",[250,251],"rounded-lg","mx-auto","/posts/images/restclient_postman_1.png",[],{"type":224,"tag":225,"props":255,"children":256},{},[257],{"type":229,"value":258},"Seems to be the perfect tool you would say. Well, that's true if you want to quickly test an API on your own, and to be honest I use it a lot for that. But when you are collaborating on a real project with other developers, there might be some things you will miss. For me, it's a way to edit, version, and share requests with other developers.",{"type":224,"tag":225,"props":260,"children":261},{},[262,264,273],{"type":229,"value":263},"Okay, I know that Postman paid plan allows you to share requests with other people of your team. And I am aware of the collection export feature on the free plan, but that's not enough. I don't really like to be too tied to a proprietary software and its GUI to do things. As a developer what I want is to be able to edit my requests in simple text files that I can put in version control. And here's come ",{"type":224,"tag":265,"props":266,"children":270},"a",{"href":267,"rel":268},"https://marketplace.visualstudio.com/items?itemName=humao.rest-client",[269],"nofollow",[271],{"type":229,"value":272},"REST Client",{"type":229,"value":274},".",{"type":224,"tag":231,"props":276,"children":278},{"id":277},"what-is-rest-client",[279],{"type":229,"value":280},"What is REST Client?",{"type":224,"tag":225,"props":282,"children":283},{},[284],{"type":224,"tag":246,"props":285,"children":289},{"alt":286,"className":287,"src":288},"REST Client extension in vscode marketplace",[250,251],"/posts/images/restclient_vscode_1.png",[],{"type":224,"tag":225,"props":291,"children":292},{},[293,295,302,304,311,313,320],{"type":229,"value":294},"The REST Client extension is an open source vs code extension developed by ",{"type":224,"tag":265,"props":296,"children":299},{"href":297,"rel":298},"https://github.com/Huachao",[269],[300],{"type":229,"value":301},"Huachao Mao",{"type":229,"value":303},". If I quote the README of its ",{"type":224,"tag":265,"props":305,"children":308},{"href":306,"rel":307},"https://github.com/Huachao/vscode-restclient",[269],[309],{"type":229,"value":310},"GitHub repository",{"type":229,"value":312},": REST Client allows you to send HTTP request and view the response in Visual Studio Code directly.\nLet's see that with a simple GET request to ",{"type":224,"tag":265,"props":314,"children":317},{"href":315,"rel":316},"https://swapi.co/",[269],[318],{"type":229,"value":319},"The Start Wars API",{"type":229,"value":321},":",{"type":224,"tag":225,"props":323,"children":324},{},[325],{"type":229,"value":326},"05578273",{"type":224,"tag":225,"props":328,"children":329},{},[330,332,339],{"type":229,"value":331},"Nothing new or complicated here, just the request you would have written intuitively. Like this, you can write any kind of request you want simply following the standard RFC 2616. Even if you don't know the standard, it's pretty straightforward and you often find samples with this format on the documentation of the API you are querying, like on the ",{"type":224,"tag":265,"props":333,"children":336},{"href":334,"rel":335},"https://docs.microsoft.com/en-us/graph/api/user-list-memberof?view=graph-rest-1.0#example",[269],[337],{"type":229,"value":338},"Microsoft Graph API documentation",{"type":229,"value":340}," for instance.",{"type":224,"tag":225,"props":342,"children":343},{},[344,346,351,353,358,360,365,367,372],{"type":229,"value":345},"REST Client works on text files in vscode by selecting ",{"type":224,"tag":347,"props":348,"children":349},"em",{},[350],{"type":229,"value":219},{"type":229,"value":352}," as the Language Mode (by default this language mode is associated with files having the ",{"type":224,"tag":347,"props":354,"children":355},{},[356],{"type":229,"value":357},".rest",{"type":229,"value":359}," or ",{"type":224,"tag":347,"props":361,"children":362},{},[363],{"type":229,"value":364},".http",{"type":229,"value":366}," extension). It provides you with some autocompletion and a few snippets to help you write your queries. You can write multiple requests on the same file in vscode just by separating them with ###. Above each request an actionable ",{"type":224,"tag":347,"props":368,"children":369},{},[370],{"type":229,"value":371},"Send Request",{"type":229,"value":373}," link allows you to run the request and see the response in a response panel.",{"type":224,"tag":225,"props":375,"children":376},{},[377],{"type":224,"tag":246,"props":378,"children":384},{"alt":379,"className":380,"src":381,"height":382,"width":383},"Intellisense in HTTP files in vscode",[250,251],"/posts/images/restclient_swapi_3.png",400,800,[],{"type":224,"tag":231,"props":386,"children":388},{"id":387},"using-variables-in-rest-client",[389],{"type":229,"value":390},"Using variables in REST Client",{"type":224,"tag":225,"props":392,"children":393},{},[394,396,403,405,416,418,424],{"type":229,"value":395},"As you can see below, it is possible to use variables with REST Client. A variable ",{"type":224,"tag":397,"props":398,"children":400},"code",{"className":399},[],[401],{"type":229,"value":402},"planetName",{"type":229,"value":404}," is defined in the file and reused in 2 requests. A variable is also used to name the request ",{"type":224,"tag":347,"props":406,"children":407},{},[408,410],{"type":229,"value":409},"GET ",{"type":224,"tag":265,"props":411,"children":414},{"href":412,"rel":413},"https://swapi.co/api/people/?search=Luke",[269],[415],{"type":229,"value":412},{"type":229,"value":417}," and makes it possible to use elements from the response (that you can see on the right). Here we are using the ",{"type":224,"tag":397,"props":419,"children":421},{"className":420},[],[422],{"type":229,"value":423},"homeworld",{"type":229,"value":425}," property of the response to retrieve the planet from which Luke was from in the following GET request. With the help of variables you can easily combine and chain requests for the scenario you need to realize.",{"type":224,"tag":225,"props":427,"children":428},{},[429],{"type":224,"tag":246,"props":430,"children":434},{"alt":431,"className":432,"src":433},"Execution of an HTTP request in vscode",[250,251],"/posts/images/restclient_swapi_2.png",[],{"type":224,"tag":225,"props":436,"children":437},{},[438],{"type":229,"value":439},"REST Client allows you to define environments and their associated variables in the user settings file of vscode. For instance, let's say I want to query the Microsoft Graph API (both the V1 version and the beta version of the API), I will add the following JSON to my  settings file:",{"type":224,"tag":441,"props":442,"children":446},"pre",{"className":443,"code":444,"language":445,"meta":207,"style":207},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"rest-client.environmentVariables\": {\n    \"$shared\": {\n        \"host\": \"https://graph.microsoft.com/\",\n    },\n    \"graphV1\": {\n        \"version\": \"v1.0\",\n    },\n    \"graphBeta\": {\n        \"version\": \"beta\"\n    },\n}\n","json",[447],{"type":224,"tag":397,"props":448,"children":449},{"__ignoreMap":207},[450,483,511,553,562,587,625,633,658,692,700],{"type":224,"tag":451,"props":452,"children":455},"span",{"class":453,"line":454},"line",1,[456,462,468,472,478],{"type":224,"tag":451,"props":457,"children":459},{"style":458},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[460],{"type":229,"value":461},"\"",{"type":224,"tag":451,"props":463,"children":465},{"style":464},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[466],{"type":229,"value":467},"rest-client.environmentVariables",{"type":224,"tag":451,"props":469,"children":470},{"style":458},[471],{"type":229,"value":461},{"type":224,"tag":451,"props":473,"children":475},{"style":474},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[476],{"type":229,"value":477},": ",{"type":224,"tag":451,"props":479,"children":480},{"style":458},[481],{"type":229,"value":482},"{\n",{"type":224,"tag":451,"props":484,"children":486},{"class":453,"line":485},2,[487,492,498,502,506],{"type":224,"tag":451,"props":488,"children":489},{"style":458},[490],{"type":229,"value":491},"    \"",{"type":224,"tag":451,"props":493,"children":495},{"style":494},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[496],{"type":229,"value":497},"$shared",{"type":224,"tag":451,"props":499,"children":500},{"style":458},[501],{"type":229,"value":461},{"type":224,"tag":451,"props":503,"children":504},{"style":458},[505],{"type":229,"value":321},{"type":224,"tag":451,"props":507,"children":508},{"style":458},[509],{"type":229,"value":510}," {\n",{"type":224,"tag":451,"props":512,"children":514},{"class":453,"line":513},3,[515,520,526,530,534,539,544,548],{"type":224,"tag":451,"props":516,"children":517},{"style":458},[518],{"type":229,"value":519},"        \"",{"type":224,"tag":451,"props":521,"children":523},{"style":522},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[524],{"type":229,"value":525},"host",{"type":224,"tag":451,"props":527,"children":528},{"style":458},[529],{"type":229,"value":461},{"type":224,"tag":451,"props":531,"children":532},{"style":458},[533],{"type":229,"value":321},{"type":224,"tag":451,"props":535,"children":536},{"style":458},[537],{"type":229,"value":538}," \"",{"type":224,"tag":451,"props":540,"children":541},{"style":464},[542],{"type":229,"value":543},"https://graph.microsoft.com/",{"type":224,"tag":451,"props":545,"children":546},{"style":458},[547],{"type":229,"value":461},{"type":224,"tag":451,"props":549,"children":550},{"style":458},[551],{"type":229,"value":552},",\n",{"type":224,"tag":451,"props":554,"children":556},{"class":453,"line":555},4,[557],{"type":224,"tag":451,"props":558,"children":559},{"style":458},[560],{"type":229,"value":561},"    },\n",{"type":224,"tag":451,"props":563,"children":565},{"class":453,"line":564},5,[566,570,575,579,583],{"type":224,"tag":451,"props":567,"children":568},{"style":458},[569],{"type":229,"value":491},{"type":224,"tag":451,"props":571,"children":572},{"style":494},[573],{"type":229,"value":574},"graphV1",{"type":224,"tag":451,"props":576,"children":577},{"style":458},[578],{"type":229,"value":461},{"type":224,"tag":451,"props":580,"children":581},{"style":458},[582],{"type":229,"value":321},{"type":224,"tag":451,"props":584,"children":585},{"style":458},[586],{"type":229,"value":510},{"type":224,"tag":451,"props":588,"children":590},{"class":453,"line":589},6,[591,595,600,604,608,612,617,621],{"type":224,"tag":451,"props":592,"children":593},{"style":458},[594],{"type":229,"value":519},{"type":224,"tag":451,"props":596,"children":597},{"style":522},[598],{"type":229,"value":599},"version",{"type":224,"tag":451,"props":601,"children":602},{"style":458},[603],{"type":229,"value":461},{"type":224,"tag":451,"props":605,"children":606},{"style":458},[607],{"type":229,"value":321},{"type":224,"tag":451,"props":609,"children":610},{"style":458},[611],{"type":229,"value":538},{"type":224,"tag":451,"props":613,"children":614},{"style":464},[615],{"type":229,"value":616},"v1.0",{"type":224,"tag":451,"props":618,"children":619},{"style":458},[620],{"type":229,"value":461},{"type":224,"tag":451,"props":622,"children":623},{"style":458},[624],{"type":229,"value":552},{"type":224,"tag":451,"props":626,"children":628},{"class":453,"line":627},7,[629],{"type":224,"tag":451,"props":630,"children":631},{"style":458},[632],{"type":229,"value":561},{"type":224,"tag":451,"props":634,"children":636},{"class":453,"line":635},8,[637,641,646,650,654],{"type":224,"tag":451,"props":638,"children":639},{"style":458},[640],{"type":229,"value":491},{"type":224,"tag":451,"props":642,"children":643},{"style":494},[644],{"type":229,"value":645},"graphBeta",{"type":224,"tag":451,"props":647,"children":648},{"style":458},[649],{"type":229,"value":461},{"type":224,"tag":451,"props":651,"children":652},{"style":458},[653],{"type":229,"value":321},{"type":224,"tag":451,"props":655,"children":656},{"style":458},[657],{"type":229,"value":510},{"type":224,"tag":451,"props":659,"children":661},{"class":453,"line":660},9,[662,666,670,674,678,682,687],{"type":224,"tag":451,"props":663,"children":664},{"style":458},[665],{"type":229,"value":519},{"type":224,"tag":451,"props":667,"children":668},{"style":522},[669],{"type":229,"value":599},{"type":224,"tag":451,"props":671,"children":672},{"style":458},[673],{"type":229,"value":461},{"type":224,"tag":451,"props":675,"children":676},{"style":458},[677],{"type":229,"value":321},{"type":224,"tag":451,"props":679,"children":680},{"style":458},[681],{"type":229,"value":538},{"type":224,"tag":451,"props":683,"children":684},{"style":464},[685],{"type":229,"value":686},"beta",{"type":224,"tag":451,"props":688,"children":689},{"style":458},[690],{"type":229,"value":691},"\"\n",{"type":224,"tag":451,"props":693,"children":695},{"class":453,"line":694},10,[696],{"type":224,"tag":451,"props":697,"children":698},{"style":458},[699],{"type":229,"value":561},{"type":224,"tag":451,"props":701,"children":703},{"class":453,"line":702},11,[704],{"type":224,"tag":451,"props":705,"children":706},{"style":458},[707],{"type":229,"value":708},"}\n",{"type":224,"tag":225,"props":710,"children":711},{},[712,714,718,720,724,726,730,732,736,738,742,744,748,749,753],{"type":229,"value":713},"I have defined 2 environments ",{"type":224,"tag":347,"props":715,"children":716},{},[717],{"type":229,"value":574},{"type":229,"value":719}," and ",{"type":224,"tag":347,"props":721,"children":722},{},[723],{"type":229,"value":645},{"type":229,"value":725}," with a specific value for the ",{"type":224,"tag":347,"props":727,"children":728},{},[729],{"type":229,"value":599},{"type":229,"value":731}," variable. These environments share the ",{"type":224,"tag":347,"props":733,"children":734},{},[735],{"type":229,"value":525},{"type":229,"value":737}," as a common variable which is contained in the shared environment ",{"type":224,"tag":347,"props":739,"children":740},{},[741],{"type":229,"value":497},{"type":229,"value":743},". From my request file, I can now switch between environments and use the variables ",{"type":224,"tag":347,"props":745,"children":746},{},[747],{"type":229,"value":599},{"type":229,"value":719},{"type":224,"tag":347,"props":750,"children":751},{},[752],{"type":229,"value":525},{"type":229,"value":754}," to request the Microsoft Graph API.",{"type":224,"tag":225,"props":756,"children":757},{},[758],{"type":224,"tag":246,"props":759,"children":763},{"alt":760,"className":761,"src":762},"Environment selection in vscode.",[250,251],"/posts/images/restclient_msgraph_1.png",[],{"type":224,"tag":231,"props":765,"children":767},{"id":766},"what-i-like-about-rest-client",[768],{"type":229,"value":769},"What I like about REST Client?",{"type":224,"tag":225,"props":771,"children":772},{},[773],{"type":229,"value":774},"REST Client is a nice alternative to Postman as it allows to easily write requests and query APIs from Visual Studio Code. I am already a vscode user so I appreciate staying in the same environment I know and like for testing an API. REST Client may not offer as many functionalities as Postman but for the usage I have, it is quite enough.",{"type":224,"tag":225,"props":776,"children":777},{},[778],{"type":229,"value":779},"What I like about this tool is that you treat your requests as code: you can commit the files containing your requests, keep track of their modifications and share the requests with your colleagues in your Git project repository.",{"type":224,"tag":225,"props":781,"children":782},{},[783],{"type":229,"value":784},"I have seen quite a few people using it recently in video tutorials and if you have a look at the number of downloads it seems I am not the only one to find it useful.",{"type":224,"tag":231,"props":786,"children":788},{"id":787},"getting-started",[789],{"type":229,"value":790},"Getting started",{"type":224,"tag":225,"props":792,"children":793},{},[794],{"type":229,"value":795},"There are a lot of other features in REST Client that I didn't talk about (generate code snippet, request history ...) so don't hesitate to give it a try. You can use it on any API you like (there is even basic support for SOAP) the same way you would use Postman or other tools.",{"type":224,"tag":225,"props":797,"children":798},{},[799,801,806],{"type":229,"value":800},"If you quickly want to convert some of your Postman queries, there is a ",{"type":224,"tag":347,"props":802,"children":803},{},[804],{"type":229,"value":805},"Code",{"type":229,"value":807}," button in Postman that allows you to see the HTTP request code that you can just copy and paste in vscode to use it with REST Client.",{"type":224,"tag":225,"props":809,"children":810},{},[811],{"type":229,"value":812},"Or if you prefer you can get started by testing the Star Wars API, you will find below the requests I used. Enjoy :)",{"type":224,"tag":441,"props":814,"children":819},{"className":815,"code":816,"filename":817,"language":818,"meta":207,"style":207},"language-http shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","#### List of start wars planets\nGET https://swapi.co/api/planets/ HTTP/1.1\n\n### Get Luke Skywalker\n# @name lukeRequest\nGET https://swapi.co/api/people/?search=Luke HTTP/1.1\n\n### Get Luke Skywalker home planet\nGET {{lukeRequest.response.body.results[0].homeworld}} HTTP/1.1\n\n### List available resources\nGET https://swapi.co/api/ HTTP/1.1\n\n### Search planet with a specific name \n@planetName = Naboo\nGET https://swapi.co/api/planets/?search={{planetName}} HTTP/1.1\n\n### Search planet with a specific name in wookie encoding\nGET https://swapi.co/api/planets/?search={{planetName}}&format=wookiee HTTP/1.1\n\n### List starships\nGET https://swapi.co/api/starships HTTP/1.1\n","swapi.http","http",[820],{"type":224,"tag":397,"props":821,"children":822},{"__ignoreMap":207},[823,832,861,870,878,903,927,934,942,966,973,981,1006,1014,1023,1041,1066,1074,1083,1108,1116,1125],{"type":224,"tag":451,"props":824,"children":825},{"class":453,"line":454},[826],{"type":224,"tag":451,"props":827,"children":829},{"style":828},"--shiki-light:#90A4AE;--shiki-default:#546E7A;--shiki-dark:#676E95;--shiki-light-font-style:italic;--shiki-default-font-style:italic;--shiki-dark-font-style:italic",[830],{"type":229,"value":831},"#### List of start wars planets\n",{"type":224,"tag":451,"props":833,"children":834},{"class":453,"line":485},[835,841,846,851,856],{"type":224,"tag":451,"props":836,"children":838},{"style":837},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF;--shiki-light-font-style:italic;--shiki-default-font-style:italic;--shiki-dark-font-style:italic",[839],{"type":229,"value":840},"GET",{"type":224,"tag":451,"props":842,"children":843},{"style":474},[844],{"type":229,"value":845}," https://swapi.co/api/planets/ ",{"type":224,"tag":451,"props":847,"children":849},{"style":848},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[850],{"type":229,"value":219},{"type":224,"tag":451,"props":852,"children":853},{"style":474},[854],{"type":229,"value":855},"/",{"type":224,"tag":451,"props":857,"children":858},{"style":848},[859],{"type":229,"value":860},"1.1\n",{"type":224,"tag":451,"props":862,"children":863},{"class":453,"line":513},[864],{"type":224,"tag":451,"props":865,"children":867},{"emptyLinePlaceholder":866},true,[868],{"type":229,"value":869},"\n",{"type":224,"tag":451,"props":871,"children":872},{"class":453,"line":555},[873],{"type":224,"tag":451,"props":874,"children":875},{"style":828},[876],{"type":229,"value":877},"### Get Luke Skywalker\n",{"type":224,"tag":451,"props":879,"children":880},{"class":453,"line":564},[881,886,891,897],{"type":224,"tag":451,"props":882,"children":883},{"style":828},[884],{"type":229,"value":885},"# ",{"type":224,"tag":451,"props":887,"children":888},{"style":837},[889],{"type":229,"value":890},"@",{"type":224,"tag":451,"props":892,"children":894},{"style":893},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA;--shiki-light-font-style:italic;--shiki-default-font-style:italic;--shiki-dark-font-style:italic",[895],{"type":229,"value":896},"name",{"type":224,"tag":451,"props":898,"children":900},{"style":899},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B;--shiki-light-font-style:italic;--shiki-default-font-style:italic;--shiki-dark-font-style:italic",[901],{"type":229,"value":902}," lukeRequest\n",{"type":224,"tag":451,"props":904,"children":905},{"class":453,"line":589},[906,910,915,919,923],{"type":224,"tag":451,"props":907,"children":908},{"style":837},[909],{"type":229,"value":840},{"type":224,"tag":451,"props":911,"children":912},{"style":474},[913],{"type":229,"value":914}," https://swapi.co/api/people/?search=Luke ",{"type":224,"tag":451,"props":916,"children":917},{"style":848},[918],{"type":229,"value":219},{"type":224,"tag":451,"props":920,"children":921},{"style":474},[922],{"type":229,"value":855},{"type":224,"tag":451,"props":924,"children":925},{"style":848},[926],{"type":229,"value":860},{"type":224,"tag":451,"props":928,"children":929},{"class":453,"line":627},[930],{"type":224,"tag":451,"props":931,"children":932},{"emptyLinePlaceholder":866},[933],{"type":229,"value":869},{"type":224,"tag":451,"props":935,"children":936},{"class":453,"line":635},[937],{"type":224,"tag":451,"props":938,"children":939},{"style":828},[940],{"type":229,"value":941},"### Get Luke Skywalker home planet\n",{"type":224,"tag":451,"props":943,"children":944},{"class":453,"line":660},[945,949,954,958,962],{"type":224,"tag":451,"props":946,"children":947},{"style":837},[948],{"type":229,"value":840},{"type":224,"tag":451,"props":950,"children":951},{"style":474},[952],{"type":229,"value":953}," {{lukeRequest.response.body.results[0].homeworld}} ",{"type":224,"tag":451,"props":955,"children":956},{"style":848},[957],{"type":229,"value":219},{"type":224,"tag":451,"props":959,"children":960},{"style":474},[961],{"type":229,"value":855},{"type":224,"tag":451,"props":963,"children":964},{"style":848},[965],{"type":229,"value":860},{"type":224,"tag":451,"props":967,"children":968},{"class":453,"line":694},[969],{"type":224,"tag":451,"props":970,"children":971},{"emptyLinePlaceholder":866},[972],{"type":229,"value":869},{"type":224,"tag":451,"props":974,"children":975},{"class":453,"line":702},[976],{"type":224,"tag":451,"props":977,"children":978},{"style":828},[979],{"type":229,"value":980},"### List available resources\n",{"type":224,"tag":451,"props":982,"children":984},{"class":453,"line":983},12,[985,989,994,998,1002],{"type":224,"tag":451,"props":986,"children":987},{"style":837},[988],{"type":229,"value":840},{"type":224,"tag":451,"props":990,"children":991},{"style":474},[992],{"type":229,"value":993}," https://swapi.co/api/ ",{"type":224,"tag":451,"props":995,"children":996},{"style":848},[997],{"type":229,"value":219},{"type":224,"tag":451,"props":999,"children":1000},{"style":474},[1001],{"type":229,"value":855},{"type":224,"tag":451,"props":1003,"children":1004},{"style":848},[1005],{"type":229,"value":860},{"type":224,"tag":451,"props":1007,"children":1009},{"class":453,"line":1008},13,[1010],{"type":224,"tag":451,"props":1011,"children":1012},{"emptyLinePlaceholder":866},[1013],{"type":229,"value":869},{"type":224,"tag":451,"props":1015,"children":1017},{"class":453,"line":1016},14,[1018],{"type":224,"tag":451,"props":1019,"children":1020},{"style":828},[1021],{"type":229,"value":1022},"### Search planet with a specific name \n",{"type":224,"tag":451,"props":1024,"children":1026},{"class":453,"line":1025},15,[1027,1031,1036],{"type":224,"tag":451,"props":1028,"children":1029},{"style":848},[1030],{"type":229,"value":890},{"type":224,"tag":451,"props":1032,"children":1033},{"style":474},[1034],{"type":229,"value":1035},"planetName = ",{"type":224,"tag":451,"props":1037,"children":1038},{"style":464},[1039],{"type":229,"value":1040},"Naboo\n",{"type":224,"tag":451,"props":1042,"children":1044},{"class":453,"line":1043},16,[1045,1049,1054,1058,1062],{"type":224,"tag":451,"props":1046,"children":1047},{"style":837},[1048],{"type":229,"value":840},{"type":224,"tag":451,"props":1050,"children":1051},{"style":474},[1052],{"type":229,"value":1053}," https://swapi.co/api/planets/?search={{planetName}} ",{"type":224,"tag":451,"props":1055,"children":1056},{"style":848},[1057],{"type":229,"value":219},{"type":224,"tag":451,"props":1059,"children":1060},{"style":474},[1061],{"type":229,"value":855},{"type":224,"tag":451,"props":1063,"children":1064},{"style":848},[1065],{"type":229,"value":860},{"type":224,"tag":451,"props":1067,"children":1069},{"class":453,"line":1068},17,[1070],{"type":224,"tag":451,"props":1071,"children":1072},{"emptyLinePlaceholder":866},[1073],{"type":229,"value":869},{"type":224,"tag":451,"props":1075,"children":1077},{"class":453,"line":1076},18,[1078],{"type":224,"tag":451,"props":1079,"children":1080},{"style":828},[1081],{"type":229,"value":1082},"### Search planet with a specific name in wookie encoding\n",{"type":224,"tag":451,"props":1084,"children":1086},{"class":453,"line":1085},19,[1087,1091,1096,1100,1104],{"type":224,"tag":451,"props":1088,"children":1089},{"style":837},[1090],{"type":229,"value":840},{"type":224,"tag":451,"props":1092,"children":1093},{"style":474},[1094],{"type":229,"value":1095}," https://swapi.co/api/planets/?search={{planetName}}&format=wookiee ",{"type":224,"tag":451,"props":1097,"children":1098},{"style":848},[1099],{"type":229,"value":219},{"type":224,"tag":451,"props":1101,"children":1102},{"style":474},[1103],{"type":229,"value":855},{"type":224,"tag":451,"props":1105,"children":1106},{"style":848},[1107],{"type":229,"value":860},{"type":224,"tag":451,"props":1109,"children":1111},{"class":453,"line":1110},20,[1112],{"type":224,"tag":451,"props":1113,"children":1114},{"emptyLinePlaceholder":866},[1115],{"type":229,"value":869},{"type":224,"tag":451,"props":1117,"children":1119},{"class":453,"line":1118},21,[1120],{"type":224,"tag":451,"props":1121,"children":1122},{"style":828},[1123],{"type":229,"value":1124},"### List starships\n",{"type":224,"tag":451,"props":1126,"children":1128},{"class":453,"line":1127},22,[1129,1133,1138,1142,1146],{"type":224,"tag":451,"props":1130,"children":1131},{"style":837},[1132],{"type":229,"value":840},{"type":224,"tag":451,"props":1134,"children":1135},{"style":474},[1136],{"type":229,"value":1137}," https://swapi.co/api/starships ",{"type":224,"tag":451,"props":1139,"children":1140},{"style":848},[1141],{"type":229,"value":219},{"type":224,"tag":451,"props":1143,"children":1144},{"style":474},[1145],{"type":229,"value":855},{"type":224,"tag":451,"props":1147,"children":1148},{"style":848},[1149],{"type":229,"value":860},{"type":224,"tag":1151,"props":1152,"children":1153},"style",{},[1154],{"type":229,"value":1155},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":207,"searchDepth":485,"depth":485,"links":1157},[1158,1159,1160,1161,1162],{"id":233,"depth":485,"text":236},{"id":277,"depth":485,"text":280},{"id":387,"depth":485,"text":390},{"id":766,"depth":485,"text":769},{"id":787,"depth":485,"text":790},"markdown","content:1.posts:1.testing-your-api-with-rest-client.md","content","1.posts/1.testing-your-api-with-rest-client.md","md",[1169,1183],{"_path":13,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":12,"description":1170,"lead":1171,"date":1172,"image":1173,"badge":1175,"tags":1177,"_type":1163,"_id":1181,"_source":1165,"_file":1182,"_extension":1167},"There are often situations where you need to do some HTML templating and having a powerful HTML templating engine like Razor can be really helpful.\nWhat is nice is that you don't need to be in an ASP.NET context to use Razor templates, in fact, you can even use them in a Xamarin Application.","Razor templates, Handlebars.Net ...","2019-03-10T00:00:00.000Z",{"src":1174},"/images/phone_2.jpg",{"label":1176},"Development",[1178,1179,1180],"Razor","Xamarin","Templating","content:1.posts:2.html-templating-in-xamarin.md","1.posts/2.html-templating-in-xamarin.md",null,1716749612235]