Aviso:

Para brindarle información de soporte completa de manera más rápida, el contenido de esta página ha sido traducido al español mediante traducción automática. Para consultar la información de soporte más precisa, consulte la versión en inglés de este contenido.

Configurar la función Advanced I/O

A continuación, comenzaremos a codificar la aplicación de lista de tareas configurando el componente de función.

El directorio de funciones, functions/ToDoList contiene:

  • El archivo principal de función ToDoList.java
  • El archivo de configuración catalyst-config.json
  • Archivos de biblioteca Java en el directorio lib
  • Archivos de dependencias .classpath y .project

Agregará código en el archivo ToDoList.java.

Las tres APIs en la función Advanced I/O que gestionan el enrutamiento entre el servidor y el Data Store son:

  • GET /todo: Para obtener los elementos de la lista de tareas de la tabla TodoItems en el Data Store
  • POST /todo: Para crear y guardar un nuevo elemento de la lista en el Data Store
  • DELETE /todo: Para eliminar un elemento de la lista del Data Store

A continuación, agreguemos el código en el archivo de función. Copie el código Java y péguelo en ToDoList.java en el directorio functions/TodoList de su proyecto, y guarde el archivo. Puede usar cualquier IDE de su preferencia para trabajar con los archivos de la aplicación.

Nota: Revise el código proporcionado en esta sección para asegurarse de que lo comprende completamente. Discutiremos la arquitectura de la función y el cliente en la siguiente sección.

ToDoList.java
copy
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.InputStreamReader;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import com.catalyst.advanced.CatalystAdvancedIOHandler;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zc.component.object.ZCObject;
import com.zc.component.object.ZCRowObject;
import com.zc.component.object.ZCTable;
import com.zc.component.zcql.ZCQL;
public class ToDoList implements CatalystAdvancedIOHandler {
    private static final String GET = "GET";
    private static final String POST = "POST";
    private static final String DELETE = "DELETE";
    private JSONObject responseData = new JSONObject();
    private static final Logger LOGGER = Logger.getLogger(ToDoList.class.getName());
    @SuppressWarnings("unchecked")
    @Override
    public void runner(HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
            String uri = request.getRequestURI();
            String method = request.getMethod();
            // El método GET obtiene datos de la tabla TodoItems en el Data Store.
            if (method.equals(GET) && uri.equals("/all")) {
                Integer page = Integer.parseInt(request.getParameter("page"));
                Integer perPage = Integer.parseInt(request.getParameter("perPage"));
                ArrayList<ZCRowObject> rowList = ZCQL.getInstance().executeQuery("SELECT COUNT(ROWID) FROM TodoItems");
                Integer totalTodos = Integer.parseInt(new ObjectMapper().writeValueAsString(rowList.get(0).get("TodoItems", "COUNT(ROWID)")));
                Boolean hasMore = totalTodos > page * perPage;
                ArrayList<HashMap<String, String>> todoItems = new ArrayList<>();
                ZCQL.getInstance().executeQuery(String.format("SELECT ROWID, Notes FROM TodoItems LIMIT %d, %d",
                        (page - 1) * perPage, perPage)).forEach(row -> {
                    HashMap<String, String> item = new HashMap<>();
                    item.put("id", row.get("TodoItems", "ROWID").toString());
                    item.put("notes", row.get("TodoItems", "Notes").toString());
                    todoItems.add(item);
                });
                response.setStatus(200);
                responseData.put("status", "success");
                responseData.put("data", new JSONObject() {
                    {
                        put("hasMore", hasMore);
                        put("todoItems", todoItems);
                    }
                });
            // El método POST agrega un nuevo elemento de tarea a la tabla TodoItems en el Data Store.
            } else if (method.equals(POST) && uri.equals("/add")) {
                JSONParser jsonParser = new JSONParser();
                ServletInputStream requestBody = request.getInputStream();
                JSONObject jsonObject = (JSONObject) jsonParser.parse(new InputStreamReader(requestBody, "UTF-8"));
                String notes = jsonObject.get("notes").toString();
                ZCRowObject row = ZCRowObject.getInstance();
                row.set("Notes", notes);
                ZCRowObject todoItem = ZCObject.getInstance().getTable("TodoItems").insertRow(row);
                response.setStatus(200);
                responseData.put("status", "success");
                responseData.put("data", new JSONObject() {
                    {
                        put("todoItem", new JSONObject() {
                            {
                                put("id", todoItem.get("ROWID").toString());
                                put("notes", todoItem.get("Notes").toString());
                            }
                        });
                    }
                });
            // El método DELETE elimina un elemento de tarea del Data Store por su ID.
            } else if (method.equals(DELETE) && uri.matches("/\\d+")) {
                ZCTable table = ZCObject.getInstance().getTable("TodoItems");
                table.deleteRow(Long.parseLong(uri.substring(1)));
                response.setStatus(200);
                responseData.put("status", "success");
                responseData.put("data", new JSONObject() {
                    {
                        put("todoItem", new JSONObject() {
                            {
                                put("id", uri.substring(1));
                            }
                        });
                    }
                });
            } else {
                response.setStatus(404);
                responseData.put("status", "failure");
                responseData.put("message", "Please check if the URL trying to access is a correct one");
            }
        } catch (Exception e) {
            LOGGER.log(Level.SEVERE, "Exception in Main", e);
            responseData.put("status", "failure");
            responseData.put("message", "We're unable to process the request.");
        }
        response.setContentType("application/json");
        response.getWriter().write(responseData.toString());
    }
}

View more

El directorio de funciones está ahora configurado.

Última actualización 2026-03-20 21:51:56 +0530 IST