Configurar la Advanced I/O Function
Comencemos a programar la aplicación Alien City configurando el componente de función.
El directorio de la función Python (functions/alien_city_function) contiene los siguientes archivos:
-
El archivo principal de la función main.py
-
El archivo de configuración catalyst-config.json
-
El archivo requirements.txt para mencionar cualquier biblioteca externa que puedas agregar.
Agregarás código en el archivo principal de la función main.py.
Las dos APIs en la Advanced I/O function que manejan el enrutamiento entre el servidor y el Data Store son:
-
GET /alien: Para verificar si hay alienígenas presentes en una ciudad
-
POST /alien: Para reportar la presencia de alienígenas en una ciudad
Ahora agreguemos el código en el archivo de la función.
Copia el código que se muestra a continuación y pégalo en main.py en el directorio functions/alien_city_function de tu proyecto, y guarda el archivo. Puedes usar cualquier IDE de tu preferencia para trabajar con los archivos de la aplicación.
import json
import zcatalyst_sdk
import logging
from flask import Request, make_response, jsonify
tableName = 'AlienCity' # La tabla creada en el Data Store
columnName = 'CityName' # La columna creada en la tabla
def handler(request: Request):
try:
app = zcatalyst_sdk.initialize() # Inicializando el SDK de Catalyst
logger = logging.getLogger()
if request.path == "/alien" and request.method == 'POST': # La API POST que reporta el encuentro con alienígenas para una ciudad en particular
req_data = request.get_json()
name = req_data.get('city_name')
rowid = getAlienCountFromCatalystDataStore(name) # Consulta la tabla del Catalyst Data Store y verifica si existe una fila para la ciudad dada
if len(rowid) == 0: # Si la fila no está presente, entonces se inserta una nueva fila
logger.info("Alien alert!") # Se escribe en los logs. Puedes ver este log desde Logs en la sección Monitor de la consola
datastore_service = app.datastore()
table_service = datastore_service.table(tableName)
row_data = {
columnName:name
}
table_service.insert_row(row_data) # Inserta el nombre de la ciudad como una fila en la tabla del Catalyst Data Store
response = make_response(jsonify({
"message": "Thanks for reporting!"
}), 200)
else: # Si la fila está presente, entonces se envía un mensaje indicando duplicación
response = make_response(jsonify({
"message": "Looks like you are not the first person to encounter aliens in this city! Someone has already reported an alien encounter here!"
}), 200)
return response
elif request.path == "/alien" and request.method == 'GET': # La API GET que verifica la tabla en busca de un encuentro con alienígenas en esa ciudad
name = request.args.get('city_name')
rowid = getAlienCountFromCatalystDataStore(name) # Consulta la tabla del Catalyst Data Store y verifica si existe una fila para la ciudad dada
if len(rowid) == 0:
response = make_response({
"message": "Hurray! No alien encounters in this city yet!",
"signal": "negative"
}, 200)
else:
response = make_response(jsonify({
"message": "Uh oh! Looks like there are aliens in this city!",
"signal": "positive"
}), 200)
return response
else:
response = make_response("Error. Invalid Request")
response.status_code = 404
return response
except Exception as err: # Envía una respuesta de error
logger.error(f"Exception in AlienCityAIO :{err}")
response = make_response(jsonify({
"error": "Internal server error occurred. Please try again in some time."
}), 500)
return response
def getAlienCountFromCatalystDataStore(cityname): # Verifica si ya se reportó un encuentro con alienígenas para la ciudad dada consultando la tabla del Data Store
app = zcatalyst_sdk.initialize()
zcql_service = app.zcql()
query = f"SELECT * FROM {tableName} WHERE {columnName} = '{cityname}'"
output = zcql_service.execute_query(query)
return output
La Advanced I/O function está ahora configurada. Discutiremos la arquitectura de la función y el client en la siguiente sección.
Última actualización 2026-03-20 21:51:56 +0530 IST