How to Invoke WebAPI using PowerShell – SharePoint 2013

Sathish Nadarajan
 
Solution Architect
February 29, 2016
 
Rate this article
 
Views
7631

I came across an interesting workaround to improve the performance of some search and webapi calls to one of our customer.

Let me explain the scenario in detail. I have a WebAPI which does the Search based on certain input parameters. This took some expensive timelines to complete the request and response. Hence, we thought of keeping all the possible inputs and the search results in a Cache.

i.e., coming up with a WarmUp WebAPI Method, which will do all the possible searches and keeps the search results in Cache Objects appropriately. So that, when the actual request comes, it will look in the cache array.

Now, the question is, how to call this WamUp method periodically, i.e., for every two hours. For that, I have come across a PowerShell Script, which will invoke the WebAPI.

 cls
 #Base url
 $urlPrefix = "http://Site/WebAPI/";
 #Endpoints
 $endpoints = @(
 #"api/Search/MyAPIMethod/Param1/Param2?callback=?", 
  "api/search/Method2?callback=?"
 );
 
 $headers = @{"Client-Token"="my-app-client-secret-token"};
 
 function Log([string] $url, $exception){
     #Create EventLog source if it doesn't exist
     $eventSource = "MyApp Job";
     if (![System.Diagnostics.EventLog]::SourceExists($eventSource)){
         New-Eventlog -LogName "Application" -Source $eventSource;
     }
 
     #Write warning to EventLog
     $message = "Call failed URL: " + $url + " Details: " + $exception;
     Write-EventLog -LogName "Application"`
      -Source $eventSource -EventId 1 -EntryType Warning -Message $message;
 }
 
 #Call each endpoint 
 foreach ($endpoint in $endpoints) {
     Write-Output -InputObject $endpoint;
 
     try {
         $response = Invoke-RestMethod -Uri ($urlPrefix + $endpoint)`
          -method GET -ContentType "application/json" -Headers $headers;
         Write-Output -InputObject $response;
     }
     catch {
         Write-Output -InputObject $_.Exception.Response.StatusCode.Value__;
         Log -url ($urlPrefix + $endpoint) -exception $_.Exception.Message;      
     }
 }
 

Now, this PS1 can be called from a BAT and that BAT will be scheduled in the Task Scheduler.

Happy Coding,

Sathish Nadarajan.

Author Info

Sathish Nadarajan
 
Solution Architect
 
Rate this article
 
Sathish is a Microsoft MVP for SharePoint (Office Servers and Services) having 15+ years of experience in Microsoft Technologies. He holds a Masters Degree in Computer Aided Design and Business ...read more
 

Leave a comment