Azure Front Door customise cache key depending on request header value

51 Views Asked by At

I have setup Azure Front Door in front of my APIs. I am looking to enable caching on most of my endpoints in my API service. This is easy enough for static content.

However, I have an endpoint that return some data base on what user has called this endpoint to return data specific to their account.

Code:

def generate_response(data, status_code=200):
    json_data = json.dumps(data, default=default_serializer)
    response = func.HttpResponse(json_data, status_code=status_code, mimetype=MIMETYPE)
    return set_security_headers(response)

def main(req: func.HttpRequest) -> func.HttpResponse:
    try:
        user_id = req.headers.get('X-User-Id')
        queries = [
            ("SELECT COUNT(id) FROM sets WHERE hidden = 0", None),
            create_query(user_id ),
            create_query(user_id , include_enabled=True)
        ]

        results = [execute_db_query(q, p) for q, p in queries]

        response_data = {
            "sets_total": results[0],
            "sets_uploaded": results[1],
            "sets_published": results[2]
        }

        return generate_response(response_data)

    except (DatabaseConnectionError, InvalidQueryError) as e:
        error_message = {"error": f"{e.__class__.__name__}: {str(e)}"}
        return generate_response(error_message, status_code=500 if isinstance(e, DatabaseConnectionError) else 400)

    except Exception as e:
        error_message = {"error": "Internal server error"}
        return generate_response(error_message, status_code=500)

I would like to have it so that if I have two users, each of their responses are cached. I have look into the Azure Front Door rule set configuration, but I cannot see how to make it specific to the X-User-Id header. I also can seem to find a way to do this via the code itself.

Is it possible to create multiple cache records in Azure Front Door depending on the header value in the request?

0

There are 0 best solutions below