HTTP Trigger in TypeScript
This document provides a reference for creating and configuring HTTP-triggered functions using TypeScript with Azure Functions.
Function Signature
An HTTP-triggered function in TypeScript typically has the following signature. It receives a request object and can return a response.
                            import { AzureFunction, Context, HttpRequest } from "@azure/functions";
                            const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise {
                                context.log('HTTP trigger function processed a request.');
                                // Access request data
                                const name = (req.query.name || (req.body && req.body.name));
                                const message = name
                                    ? `Hello, ${name}! This HTTP triggered function executed successfully.`
                                    : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";
                                // Set response
                                context.res = {
                                    status: 200,
                                    body: message
                                };
                            };
                            export default httpTrigger;
                         
                    Request Object (HttpRequest)
                    The HttpRequest object provides access to details about the incoming HTTP request.
Properties
| Property | Type | Description | 
|---|---|---|
| method | string | The HTTP method (e.g., 'GET', 'POST'). | 
| url | string | The full URL of the request. | 
| headers | Record<string, string | undefined> | Request headers. | 
| query | Record<string, string | undefined> | Query string parameters. | 
| params | Record<string, string> | Route parameters extracted from the URL path. | 
| body | any | The request body. Can be a string, JSON object, etc. | 
| rawBody | Buffer | The raw request body as a Buffer. | 
Context Object (Context)
                    The Context object provides access to runtime information and methods for interacting with the Azure Functions host.
Properties and Methods
| Property/Method | Type | Description | 
|---|---|---|
| log | (message: string, ...args: any[]) => void | Logs messages to the Azure Functions host. | 
| done | (error?: any, result?: any) => void | Signals that the function execution is complete. (Less common in async functions). | 
| res | HttpResponse | undefined | The response object to be sent back to the client. | 
| bindings | Record<string, any> | Access to other input and output bindings. | 
| bindingData | Record<string, any> | Data from bindings or trigger metadata. | 
Response Object (HttpResponse)
                    The response object allows you to define the HTTP response sent back to the client.
Properties
| Property | Type | Description | 
|---|---|---|
| status | number | string | The HTTP status code (e.g., 200, 404). | 
| body | any | The response body. Can be a string, JSON object, or Buffer. | 
| headers | Record<string, string> | Response headers. | 
| isRaw | boolean | Indicates if the response body is raw (Buffer). | 
Tip: For JSON responses, ensure your body is a JavaScript object. Azure Functions will automatically set the Content-Type header to application/json.
Routing and Function.json
The routing for HTTP-triggered functions is defined in the function.json file. For example:
{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ],
      "route": "greet/{name?}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ]
}In this example, the route greet/{name?} allows you to access the function via /api/greet/yourname or /api/greet. The parameter name will be available in context.bindingData.name or req.params.name.
Handling Different HTTP Methods
You can inspect req.method to handle different HTTP verbs:
if (req.method === 'POST') {
    // Handle POST request logic
    context.res = {
        status: 201,
        body: "Resource created"
    };
} else if (req.method === 'GET') {
    // Handle GET request logic
    context.res = {
        status: 200,
        body: "Resource retrieved"
    };
}
                    Accessing Request Body
If the request's Content-Type header is application/json, the Azure Functions runtime will automatically parse the body into a JavaScript object when you access req.body.
// Assuming request body is JSON: {"product": "Widget", "quantity": 5}
const product = req.body.product;
const quantity = req.body.quantity;
                    For other content types, req.body will be a string, or you can use req.rawBody to access the raw Buffer.
Error Handling
It's good practice to implement robust error handling:
const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    try {
        // ... function logic ...
        context.res = { status: 200, body: "Success" };
    } catch (error) {
        context.log.error("An error occurred:", error);
        context.res = {
            status: 500,
            body: "Internal Server Error"
        };
    }
};
                    Pro Tip: For complex applications, consider using libraries like Express.js within your Azure Function or explore Durable Functions for orchestrating workflows.