Skip to content

NicoCasas/GO_RestAPI_so2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lab6 Sistemas Operativos II

Ingeniería en Compuatación - FCEFyN - UNC

Sistemas Embebidos

Introducción

Los sistemas embebidos suelen ser accedidos de manera remota. Existen distintas técnicas para hacerlo, una forma muy utilizada suelen ser las RESTful APIs. Estas, brindan una interfaz definida y robusta para la comunicación y manipulación del sistema embebido de manera remota. Definidas para un esquema Cliente-Servidor se utilizan en todas las verticales de la industria tecnológica, desde aplicaciones de IoT hasta juegos multijugador.

Objetivo

El objetivo del presente trabajo práctico es que el estudiante tenga un visión end to end de una implementación básica de una RESTful API sobre un sistema embedido trabajando con aplicaciones que se asemejan a la vida profesional, a través de diferentes stacks de lenguajes. El estudiante deberá implementarlo interactuando con todas las capas del procesos. Desde el testing funcional (alto nivel) hasta el código en C y Go del servicio (bajo nivel).

Desarrollo

Requerimientos

Para realizar el presente trabajo practico, es necesario una computadora con kernel GNU/Linux, ya que usaremos SystemD para implementar el manejo de nuestro servicios.

Desarrollo

Se dispone de N sensores de IoT conectados a un servidor escrito en Go el cual recibe de estos una serie de parámetros que se listan a continuación. El servidor cuenta con un servicio de usuarios y el servicio de procesamiento. Cada servicio deberá exponer una REST API con Media Type application/json [about mediatype] para todas sus funcionalidades y del lado de usuarios, solo permitir la operación a usuarios autentificados. El servicio debe tener configurado un nginx por delante para poder direccionar el request al servicio correspondiente.

El web server deberá solo responder a dashboard.com para el servicio de usuarios y sensors.com para el servicio de procesamiento. Debe retornar 404 Not Found para cualquier otro path no existente con algún mensaje a elección con formato JSON. A modo de simplificación, usaremos sólo HTTP, pero aclarando que esto posee graves problemas de seguridad.

A continuación, detallaremos los dos servicios a crear y las funcionalidades de cada uno.

Servicio de Usuarios

Este servicio se encargará de crear usuarios y listarlos. Estos usuarios deberán poder logearse vía SSH luego de su creación. Solo podrán acceder aquellos usuarios autentificados. Y las tareas de cada endpoint usando JWT

POST /api/users

Endpoints para la creación de usuario en el sistema operativo:

    GET http://{{server}}/api/users/login
    POST http://{{server}}/api/users/createuser

Request

        curl --request POST \
            --url http:// {server}}/api/users \
            -u USER:SECRET \
            --header 'accept: application/json' \
            --header 'content-type: application/json' \
            --data '{"username": "myuser", "password": "mypassword"}' \
            --authentification jwt

Respuesta

        {
            "id": 142,
            "username": "myuser",
            "created_at": "2019-06-22 02:19:59"
        }

GET /api/users

Endpoint para obtener todos los usuarios del sistema operativo y sus identificadores.

    GET http://{{server}}/api/users/listall

Request

    curl --request GET \
        --url http://{{server}}/api/users \
        -u USER:SECRET \
        --header 'accept: application/json' \
        --header 'content-type: application/json' \
        --authentification jwt

Respuesta

    {
      "data": [
          {
              "user_id": 2,
              "username": "user1",
          },
          {
              "user_id": 1,
              "username": "user2"
          },
          ...
      ]
    }

Servicio de procesamiento

Debe listar un Media Type , application/json. Con la información de: procesamiento, memoria libre, swap, etc.

POST /processing/submit

    POST http://{{server}}/processing/submit

Request

    curl --request POST \
        --url http://{{server}}/contador/increment \
        -u USER:SECRET \
        --header 'accept: application/json' \
        --header 'content-type: application/json'

GET /processing/summary

Este endpoint permite saber el valor de todos los sensores en promedio.

    GET http://{{server}}/processing/summary

Request

    curl --request GET \
        --url http://{{server}}/contador/value \
        -u USER:SECRET \
        --header 'accept: application/json' \
        --header 'content-type: application/json'

Este endpoint no tiene ningún requerimiento de para logging.

Entrega

Se deberá proveer los archivos fuente, así como cualquier otro archivo asociado a la compilación, archivos de proyecto "Makefile" y el código correctamente documentado, todo en el repositorio, donde le Estudiante debe demostrar avances semana a semana mediante commits.

También se debe entregar un informe, guia tipo How to, explicando paso a paso lo realizado (puede ser un Markdown). El informe además debe contener el diseño de la solución con una explicacion detallada de la misma. Se debe asumir que las pruebas de compilación se realizarán en un equipo que cuenta con las herramientas típicas de consola para el desarrollo de programas (Ejemplo: gcc, make), y NO se cuenta con herramientas "GUI" para la compilación de los mismos (Ej: eclipse).

El install del makefile deberá copiar los archivos de configuración de systemd para poder luego ser habilitados y ejecutados por linea de comando. El script debe copiar los archivos necesarios para el servicio Nginx systemd para poder luego ser habilitados y ejecutados por linea de comando. Los servicios deberán pasar una batería de test escritas en postman provistas. TBD.

Criterios de Corrección

  • Dividir el código en módulos de manera juiciosa.
  • Estilo de código.
  • Manejo de errores
  • El código no debe contener errores de staticcheck.

Evaluación

El presente trabajo práctico es individual deberá entregarse antes del viernes 02 de Junio de 2023 a las 23:55 mediante el LEV. Será corregido y luego deberá coordinar una fecha para la defensa oral del mismo.

Referencias y ayudas

About

REST Api written in GO language

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published