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?