Cómo enviar datos JSON a una API REST (en 4 pasos) – revhardware.com

Al preparar una guía sobre cómo conectar Raspberry Pi a la nube, me di cuenta de que no era una guía sencilla para ayudar a nadie a enviar datos desde una Raspberry Pi a una API REST (como suelen usar los proveedores de servicios en la nube). Preparé esta guía para ayudar a cualquier persona a obtener los conceptos básicos sobre cómo enviar datos JSON desde su Raspberry Pi a la nube.

Hay 4 pasos para que una Raspberry Pi envíe datos JSON a la nube:

  • Importar la biblioteca JSON
  • Reúna algunos datos JSON
  • Conoce los detalles de la API
  • Enviar datos a la API
  • He usado Python en esta guía y el IDE de Thonny Python, ya que es la configuración más común que he encontrado en Raspberry Pi.

    Paso 1: importa la biblioteca JSON

    Los datos enviados a una API REST suelen estar en formato JSON. JSON es un formato fácil de escribir a mano, pero Python tiene una biblioteca incorporada conveniente para asegurarse de que estamos trabajando con JSON en un formato correcto.

    La biblioteca JSON incorporada de Python le permite trabajar con JSON sin tener que conocer todos los requisitos de sintaxis y caracteres para armar su propia cadena de notación de objetos JavaScript (JSON).

    Use el siguiente código para importar el JSON:

    importar json

    La biblioteca JSON nos facilitará convertir el formato de diccionario nativo de Python en JSON para que podamos enviarlo a nuestro servidor de almacenamiento en la nube mediante una API REST.

    Paso 2: recopilar datos

    Necesitamos algunos datos para enviar a través de la API REST. Voy a usar el ejemplo de una serie de mediciones de temperatura y humedad tomadas a lo largo del tiempo.

    Nuestro enfoque para generar algunos datos JSON será:

  • Configurar un objeto de diccionario para mantener nuestra lectura
  • Crear un bucle donde generamos nuevas lecturas de temperatura y humedad
  • Convierte el diccionario a JSON
  • Inicialmente, agrupé todos los datos en una matriz (ver más abajo), aunque resultó que la API que estaba usando no lo aceptaba.

    Código para generar algunos datos.

    He usado un ciclo for para este ejemplo porque solo queremos que el script se ejecute unas pocas veces para generar algunos datos. Si estuviera aplicando esto en un proyecto real, aquí es probablemente donde querría usar un ciclo while infinito.

    Este código se puede modificar fácilmente para recopilar datos reales de un sensor conectado. Tengo un Sense HAT conectado a mi Raspberry Pi y modifiqué el código para incluir lecturas reales del Sense HAT:

    Uso del Sense HAT para recopilar datos

    Agregué una suspensión de 5 segundos entre lecturas para que obtengamos datos útiles del Sense HAT.

    Convertir estos datos a JSON es la tarea final que debemos realizar en este paso. Un diccionario de Python se convierte fácilmente a JSON utilizando la biblioteca json que importamos anteriormente y el siguiente comando:

    data = json.dumps(lecturas)

    Si imprime estos datos JSON, no se ve muy diferente. Esto se debe a que la forma en que se imprimen las matrices y los diccionarios de Python coincide con la forma en que se imprime JSON. Sin embargo, bajo el capó, Python administra nuestros datos como JSON, lo que facilitará la carga en nuestro proveedor de almacenamiento en la nube en el siguiente paso.

    Paso 3: encuentre los detalles de la API

    Cada API tiene formas ligeramente diferentes de comunicarse con ella, pero en general necesita la siguiente información:

    • Una URL para enviar datos;
    • Una URL para leer datos;
    • Una clave API, generalmente única para usted.

    Estos detalles generalmente se encuentran en la documentación de su proveedor de API. Algunos lo hacen realmente fácil (como el Pantry Cloud gratuito que uso a continuación) y otros lo hacen realmente difícil (mirando a su ‘gran empresa de tecnología’).

    Para este ejemplo, estoy usando Pantry Cloud. Es un servicio en la nube de almacenamiento de datos JSON que es realmente fácil de configurar (¡no se requiere contraseña!) y tiene un generoso nivel gratuito.

    Pantry Cloud requiere que tenga una «canasta» para colocar sus datos. Puede nombrar la canasta cuando obtenga su clave API de su sitio web.

    URL para enviar datos a PUT solicitud: https://getpantry.cloud/apiv1/pantry/YOUR_PANTRY_ID/basket/YOUR_BASKET_NAME
    URL para leer datos de OBTENER solicitud: https://getpantry.cloud/apiv1/pantry/YOUR_PANTRY_ID/basket/YOUR_BASKET_NAME
    Clave API TU_DESPENSA_ID

    Detalles típicamente necesarios para usar una API REST

    Los diferentes tipos de solicitudes (PUT y GET) forman parte del protocolo HTTP. Estos le dicen a la API de la nube qué tipo de solicitud está haciendo: PUT significa que desea colocar datos en el servidor, mientras que GET significa que desea obtener datos del servidor. Vea a continuación un ejemplo de cómo hacemos esto en Python en Raspberry Pi.

    ¿Está interesado en más servicios en la nube a los que se pueda conectar una Raspberry Pi? Escribí una guía completa sobre más de 8 servicios en la nube que puede usar una Raspberry Pi, échale un vistazo aquí: revhardware.com/cloud-connections-raspberry-pi

    Paso 4: Enviar datos a la API

    El siguiente paso es configurar nuestro script de Python para conectarse a la API. Haremos esto por:

  • Importación del módulo de solicitudes
  • Dando al módulo de solicitudes nuestra información API
  • Completar una ‘solicitud’ con nuestra API (para almacenar o leer datos)
  • El código para lograr esto es básicamente:

    solicitudes de importación url = «https://…» our_headers = {…} our_payload = our_data respuesta = solicitudes.put(url, headers=nuestros_encabezados, data=nuestra_carga)

    El código anterior es para una solicitud PUT en la que enviamos datos a la API. Simplemente cambie la función a request.get si necesita recuperar datos en su lugar. Los datos recuperados se almacenan en respuesta (pruebe response.json() para acceder a ellos)

    La documentación de la API debe brindarle detalles de los encabezados que debe configurar y si debe realizar otros pasos, como la autenticación. Encontré esta guía realmente útil para descubrir cómo usar una API REST si tiene que preocuparse por las sesiones y la autenticación.

    Modifiqué el código anterior para ver un ejemplo de cómo podemos enviar datos a la API REST de Pantry Cloud, vea la imagen a continuación.

    Envío de datos Sense HAT a Pantry Cloud usando una API REST

    Próximos pasos

    Una vez que Pi sea capaz de enviar datos a la nube usando una API REST, probablemente querrá poder hacer algo con su nuevo poder: