Summary
This is a continuation of a previous post on proxying a SOAP API to REST. In this post, I'll deploy the containerized proxy to Azure Container Apps and front end it with Azure API Management (APIM).
Architecture
Code
Proxy App
I modified the Python FastAPI app slightly to serve up an OpenAPI file. That file is used by APIM during provisioning.
from fastapi import FastAPI, HTTPException from fastapi.responses import FileResponse from zeep import Client import logging logging.getLogger('zeep').setLevel(logging.ERROR) client = Client('https://www.w3schools.com/xml/tempconvert.asmx?wsdl') app = FastAPI() @app.get("/openapi.yml") async def openapi(): return FileResponse("openapi.yml") @app.get("/CelsiusToFahrenheit") async def celsiusToFahrenheit(temp: int): try: soapResponse = client.service.CelsiusToFahrenheit(temp) fahrenheit = int(round(float(soapResponse),0)) except: raise HTTPException(status_code=400, detail="SOAP request error") else: return {"temp": fahrenheit} @app.get("/FahrenheitToCelsius") async def fahrenheitToCelsius(temp: int): try: soapResponse = client.service.FahrenheitToCelsius(temp) celsius = int(round(float(soapResponse),0)) except: raise HTTPException(status_code=400, detail="SOAP request error") else: return {"temp": celsius}
OpenAPI Spec
swagger: '2.0' info: title: apiproxy description: REST to SOAP proxy version: 1.0.0 schemes: - http produces: - application/json paths: /CelsiusToFahrenheit: get: summary: Convert celsius temp to fahrenheit parameters: - name: temp in: path required: true type: integer responses: '200': description: converted temp schema: type: object properties: temp: type: integer '400': description: General error /FahrenheitToCelsius: get: summary: Convert fahrenheit temp to celsius parameters: - name: temp in: path required: true type: integer responses: '200': description: converted temp schema: type: object properties: temp: type: integer '400': description: General error
Deployment
Create + Configure Azure Container Registry
Visual Studio Code - Build Image in Azure
Create + Configure Azure Container App
Execution
Deploy and Test Container App in APIM
Copyright ©1993-2024 Joey E Whelan, All rights reserved.