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.