Diferencia entre revisiones de «SIU-Guarani/Version3.11.0/personalizaciones/rest»

De SIU
Saltar a: navegación, buscar
Línea 123: Línea 123:
 
     * @param_body $aula Aula_uni [required] Campos de un aula.
 
     * @param_body $aula Aula_uni [required] Campos de un aula.
 
     *
 
     *
     * @summary Crea una nueva aula.
+
     * @summary Crea una nueva aula
 
     *
 
     *
 
     * @responses  201 Exito - El aula se creo exitosamente
 
     * @responses  201 Exito - El aula se creo exitosamente
Línea 176: Línea 176:
 
}
 
}
 
</source>
 
</source>
 +
 +
[[File:G3_servicio_REST_personalizado_nuevo.png]]
  
 
'''IMPORTANTE:''' Luego de hacer los pasos listados anteriormente se deberá correr el comando ''autoload'' para cargar las clases previamente agregadas:
 
'''IMPORTANTE:''' Luego de hacer los pasos listados anteriormente se deberá correr el comando ''autoload'' para cargar las clases previamente agregadas:

Revisión del 15:04 1 ago 2016

Personalizar servicios REST

Crear un nuevo servicio REST

Si lo que se desea es crear un nuevo servicio REST se debe hacer lo siguiente:

Supongamos que el nuevo servicio manipule aulas, por lo tanto nuestro nuevo recurso pasara a llamarse aulas, para crearlo seguiremos los siguientes pasos:

  1. Crear el archivo <path proyecto Guaraní>/personalizacion/php/rest/aulas_uni/recurso_aulas_uni.php, donde uni sera en nombre de la universidad en cuestión (esto evita futuras colisiones de nombre si el SIU decide mas adelante agregar el recurso aulas).
  2. Dentro de dicho archivo crear la clase recurso_aulas_uni la cual debe implementar la interface modelable:
    <?php

    //personalizacion/php/rest/aulas_uni/recurso_aulas_uni.php

    use SIUToba\rest\rest;
    use SIUToba\rest\lib\rest_validador;

    class recurso_aulas_uni implements SIUToba\rest\lib\modelable{
        ............
    }
  3. Luego procederemos a agregar la capa de datos que se encargara de las operaciones de tipo ABM/CRUD de los servicios en cuestión, en este caso agregaremos la clase rest_aulas_uni en <path proyecto Guaraní>/personalizacion/php/nucleo/aulas/rest_aulas_uni.php:
    <?php

    //personalizacion/php/nucleo/aulas/rest_aulas_uni.php

    class rest_aulas_uni{
        ............
    }
  4. Seguido vincularemos la clase rest_aulas_uni a nuestro nuevo recurso recurso_aulas_uni:
    <?php

    //personalizacion/php/rest/aulas_uni/recurso_aulas_uni.php

    use SIUToba\rest\rest;
    use SIUToba\rest\lib\rest_validador;

    class recurso_aulas_uni implements SIUToba\rest\lib\modelable{
       
        /**
         * @var rest_aulas_uni
         */

        protected $modelo;

        function __construct()
        {
            $this->modelo = guarani::rest('rest_aulas_uni');
        }
    }
  5. Luego a modo de ejemplo crearemos la estructura que tendrá nuestro recurso el cual llamaremos Aula_uni y tendrá los atributos nombre, fecha_creacion, estado y edificio (modelo Edificio_uni):
    <?php

    //personalizacion/php/rest/aulas_uni/recurso_aulas_uni.php

    use SIUToba\rest\rest;
    use SIUToba\rest\lib\rest_validador;

    class recurso_aulas_uni implements SIUToba\rest\lib\modelable{
       
        ............

        public static function _get_modelos(){

            $edificio_uni = array(

                'nombre' => array(
                    'type'          => 'string'
                )

            );

            $aula_uni = array(

                'nombre' => array(
                    'type'          => 'string'
                ),

                'fecha_creacion'     => array(
                    'type'          => 'date',
                    '_validar'      => array(rest_validador::TIPO_DATE)
                ),

                'estado'     => array(
                    'type'          => 'string',
                    'enum'          => array("A", "B"),
                    '_validar'      => array(rest_validador::TIPO_ENUM => array("A", "B"))
                ),

                'edificio'                  => array('$ref' => 'Edificio_uni')
            );

            return array(
                'Aula_uni' => $aula_uni,
                'Edificio_uni' => $edificio_uni
            );
        }
    }
  6. Finalmente a modo de ejemplo crearemos tres servicios, uno para la creación de un aula (POST /aulas-uni), otro para obtener un listado de aulas (GET /aulas-uni) y un tercero para obtener un aula en particular dado el ID de aula (GET /aulas-uni/{id_aula}):
    <?php

    //personalizacion/php/rest/aulas_uni/recurso_aulas_uni.php

    use SIUToba\rest\rest;
    use SIUToba\rest\lib\rest_validador;

    class recurso_aulas_uni implements SIUToba\rest\lib\modelable{
       
        ............

        /**
         * POST /aulas-uni
         *
         * Crea una nueva aula.
         *
         * @param_body $aula Aula_uni [required] Campos de un aula.
         *
         * @summary Crea una nueva aula
         *
         * @responses  201 Exito - El aula se creo exitosamente
         * @responses  400 Errores de validación
         * @responses  500 Falló la creación del aula
         **/

        function post_list()
        {
            $datos = rest::request()->get_body_json();
            $this->modelo->post($datos);
        }

        /**
         * GET /aulas-uni
         *
         * @param_query $nombre string Filtro por nombre
         * @param_query $estado string Filtro por estado
         * @param_query $order string (defecto: +nombre,+estado) +/-[nombre,estado] Ordena por nombre o estado
         * @param_query $limit integer (defecto: 20) Limitar a esta cantidad de registros
         * @param_query $page integer Página
         *
         * @notes
         * Devuelve una lista de aulas.<br>
         * Los Filtros se definen como <b>condicion;valor</b>, donde <b>condicion</b> puede ser: <br/>
         * entre, es_mayor_que, desde, es_mayor_igual_que, es_menor_que, es_menor_igual_que, hasta, es_igual_a, es_distinto_de, contiene, no_contiene, comienza_con, termina_con
         *
         * @summary Aulas
         * @responses 200 array {"$ref":"Aula_uni"}
         */

        function get_list()
        {
            $datos = $this->modelo->get_list();
            rest::response()->get_list($datos);
        }

        /**
         * GET /aulas-uni/id_aula
         *
         * @notes
         * Retorna los datos del aula.<br>
         *
         * @summary Datos del aula {id_aula}
         * @responses 200 {"$ref":"Aula_uni"}
         * @responses 404 El aula {id_aula} no existe
         */

        function get($id_aula)
        {
            $datos = $this->modelo->get($id_aula);
            rest::response()->get($datos);
        }

    }

G3 servicio REST personalizado nuevo.png

IMPORTANTE: Luego de hacer los pasos listados anteriormente se deberá correr el comando autoload para cargar las clases previamente agregadas:

 guarani autoload


Personalizar un servicio REST existente

Si lo que se desea es personalizar un servicio REST existente hacer lo siguiente: