Building a back-end web API using HTTP triggers
In this recipe, we'll use Azure's serverless architecture to build a web API using HTTP triggers. These HTTP triggers could be consumed by any front-end application that is capable of making HTTP calls.
Getting ready
Let's start our journey of understanding Azure serverless computing using Azure Functions by creating a basic back-end web API that responds to HTTP requests:
- Refer to https://azure.microsoft.com/free/ to see how to create a free Azure account.
- Visit https://docs.microsoft.com/azure/azure-functions/functions-create-function-app-portal to learn about the step-by-step process of creating a function application, and https://docs.microsoft.com/azure/azure-functions/functions-create-first-azure-function to learn how to create a function. While creating a function, a storage account is also created to store all the files.
- Learn more about Azure Functions at https://azure.microsoft.com/services/functions/.
Note
Remember the name of the storage account, as it will be used later in other chapters.
- Once the function application is created, please familiarize yourself with the basic concepts of triggers and bindings, which are at the core of how Azure Functions works. I highly recommend referring to https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings before proceeding.
Note
We'll be using C# as the programming language throughout the book. Most of the functions are developed using the Azure Functions V3 runtime. However, as of the time of writing, a few recipes were not supported in the V3 runtime. Hopefully, soon after the publication of this book, Microsoft will have made those features available for the V3 runtime as well.
How to do it…
Perform the following steps to build a web API using HTTP triggers:
- Navigate to the Function App listing page by clicking on the Function Apps menu, which is available on the left-hand side.
- Create a new function by clicking on the + icon:
Figure 1.2: Adding a new function
- You'll see the Azure Functions for .NET - getting started page, which prompts you to choose the type of tools based on your preference. For the initial few chapters, we'll use the In-portal option, which can quickly create Azure Functions right from the portal without making use of any tools. However, in the coming chapters, we'll make use of Visual Studio and Azure Functions Core Tools to create these functions:
Figure 1.3: Choosing the development environment
- In the next step, select More templates… and click on Finish and view templates, as shown in Figure 1.4:
Figure 1.4: Choosing More templates… and clicking Finish and view templates
- In the Choose a template below or go to the quickstart section, choose HTTP trigger to create a new HTTP trigger function:
Figure 1.5: The HTTP trigger template
- Provide a meaningful name. For this example, I have used
RegisterUser
as the name of the Azure function. - In the Authorization level drop-down menu, choose the Anonymous option. You'll learn more about all the authorization levels in Chapter 9, Configuring security for Azure Functions:
Figure 1.6: Selecting the authorization level
- Click on the Create button to create the HTTP trigger function.
- Along with the function, all the required code and configuration files will be created automatically and the
run.csx
file with editable code will get opened. Remove the default code and replace it with the following code. In the following example, we'll add two parameters (firstname
andlastname
), which will be displayed in the output as a result of triggering the HTTP trigger:#r "Newtonsoft.Json" using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Newtonsoft.Json; public static async Task<IActionResult> Run( HttpRequest req, ILogger log) #r "Newtonsoft.Json" using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Newtonsoft.Json; public static async Task<IActionResult> Run(HttpRequest req, ILogger log) {     log.LogInformation("C# HTTP trigger function processed a request.");     string firstname=null,lastname = null;     string requestBody = await new     StreamReader(req.Body).ReadToEndAsync();     dynamic inputJson = JsonConvert.DeserializeObject(requestBody);     firstname =    firstname ?? inputJson?.firstname;     lastname = inputJson?.lastname;     return (lastname + firstname) != null     ? (ActionResult)new OkObjectResult($"Hello, {firstname + " " + lastname}")     : new BadRequestObjectResult("Please pass a name on the query" + "string or in the request body"); }
- Save the changes by clicking on the Save button available just above the code editor.
- Let's try testing the
RegisterUser
function using the test console. Click on the Test tab to open the test console:Figure 1.7: Testing the HTTP trigger
- Enter the values for
firstname
andlastname
in the Request body section:Figure 1.8: Testing the HTTP trigger with input data
- Make sure that you select POST in the HTTP method drop-down box.
- After reviewing the input parameters, click on the Run button available at the bottom of the test console:
Figure 1.9: HTTP trigger execution and output
- If the input request workload is passed correctly with all the required parameters, you'll see Status: 200 OK, and the output in the output window will be as shown in Figure 1.9.
- Let's discuss how it works next.
How it works…
You have created your first Azure function using HTTP triggers and have made a few modifications to the default code. The code accepts the firstname
and lastname
parameters and prints the name of the end user with a Hello
{firstname
} {lastname
} message as a response. You also learned how to test the HTTP trigger function right from the Azure Management portal.
Note
For the sake of simplicity, validation of the input parameters is not executed in this exercise. Be sure to validate all input parameters in applications running in a production environment.
See also
- The Enabling authorization for function apps recipe in Chapter 9, Configuring security for Azure Functions.
In the next recipe, you'll learn about persisting employee details.