RESTful API

1. Recursos

Los recursos son las entidades que tu API manejará. En el contexto de tu plataforma, los recursos principales pueden incluir:

  • Sensores: Información sobre cada sensor (tipo, ubicación, estado).
  • Nodos Hoja: Dispositivos que contienen sensores y gestionan la comunicación.
  • Nodos Rama: Intermediarios que gestionan la comunicación entre nodos hoja y el backend.
  • Datos de Riego: Datos históricos y en tiempo real sobre el riego.
  • Usuarios: Información sobre los usuarios del sistema y sus roles.

2. Endpoints

A continuación se presentan ejemplos de cómo podrían estructurarse los endpoints para cada recurso:

Sensores

  • GET /api/sensors: Obtener la lista de todos los sensores.
  • GET /api/sensors/{sensor_id}: Obtener información específica sobre un sensor.
  • POST /api/sensors: Crear un nuevo sensor.
  • PUT /api/sensors/{sensor_id}: Actualizar información de un sensor existente.
  • DELETE /api/sensors/{sensor_id}: Eliminar un sensor.

Nodos Hoja

  • GET /api/leaf-nodes: Obtener la lista de todos los nodos hoja.
  • GET /api/leaf-nodes/{node_id}: Obtener información específica sobre un nodo hoja.
  • POST /api/leaf-nodes: Crear un nuevo nodo hoja.
  • PUT /api/leaf-nodes/{node_id}: Actualizar información de un nodo hoja existente.
  • DELETE /api/leaf-nodes/{node_id}: Eliminar un nodo hoja.

Nodos Rama

  • GET /api/branch-nodes: Obtener la lista de todos los nodos rama.
  • GET /api/branch-nodes/{node_id}: Obtener información específica sobre un nodo rama.
  • POST /api/branch-nodes: Crear un nuevo nodo rama.
  • PUT /api/branch-nodes/{node_id}: Actualizar información de un nodo rama existente.
  • DELETE /api/branch-nodes/{node_id}: Eliminar un nodo rama.

Datos de Riego

  • GET /api/watering-data: Obtener datos históricos y en tiempo real sobre el riego.
  • POST /api/watering-data: Enviar datos nuevos sobre el riego desde sensores.

Usuarios

  • GET /api/users: Obtener la lista de todos los usuarios.
  • GET /api/users/{user_id}: Obtener información específica sobre un usuario.
  • POST /api/users: Crear un nuevo usuario.
  • PUT /api/users/{user_id}: Actualizar información de un usuario existente.
  • DELETE /api/users/{user_id}: Eliminar un usuario.

3. Métodos HTTP

Los métodos HTTP que utilizarás son:

  • GET: Para recuperar datos del servidor (ej., obtener sensores).
  • POST: Para enviar datos al servidor y crear nuevos recursos (ej., crear un nuevo sensor).
  • PUT: Para actualizar recursos existentes (ej., actualizar información de un sensor).
  • DELETE: Para eliminar recursos (ej., eliminar un sensor).

4. Cuerpo del Mensaje

El cuerpo del mensaje será necesario principalmente para las solicitudes POST y PUT. Aquí hay ejemplos de cómo podría verse el cuerpo para crear o actualizar recursos:

Ejemplo para Crear un Sensor

{
    "sensor_id": "sensor_001",
    "type": "humidity",
    "location": {
        "lat": 40.7681,
        "lon": -73.9817
    },
    "status": "active"
}

Ejemplo para Actualizar un Sensor

{
    "type": "humidity",
    "status": "inactive"
}

5. Autenticación y Autorización

Implementa autenticación utilizando JWT (JSON Web Tokens) o OAuth2 para asegurar que solo los usuarios autorizados puedan acceder a ciertos endpoints. Esto es crucial para proteger datos sensibles y controlar el acceso basado en roles.

6. Ejemplo Completo de Endpoint

Aquí tienes un ejemplo completo de cómo podría lucir la definición del endpoint para obtener todos los sensores:

GET /api/sensors

Response:
HTTP/1.1 200 OK
Content-Type: application/json

[
    {
        "sensor_id": "sensor_001",
        "type": "humidity",
        "location": {
            "lat": 40.7681,
            "lon": -73.9817
        },
        "status": "active"
    },
    {
        "sensor_id": "sensor_002",
        "type": "temperature",
        "location": {
            "lat": 40.7682,
            "lon": -73.9818
        },
        "status": "active"
    }
]

7. Documentación

Es importante documentar tu API utilizando herramientas como Swagger o Postman para que otros desarrolladores puedan entender cómo interactuar con ella. La documentación debe incluir:

  • Descripción general de la API.
  • Listado completo de endpoints con ejemplos.
  • Detalles sobre autenticación y autorización.
  • Ejemplos de solicitudes y respuestas.