Rest   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 106
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
dl 0
loc 106
rs 10
c 0
b 0
f 0
wmc 10
lcom 1
cbo 2

3 Methods

Rating   Name   Duplication   Size   Complexity  
A accept() 0 3 2
B init() 0 45 6
A param() 0 9 2
1
<?php
2
/**
3
 * KumbiaPHP web & app Framework
4
 *
5
 * LICENSE
6
 *
7
 * This source file is subject to the new BSD license that is bundled
8
 * with this package in the file LICENSE.
9
 *
10
 * @category   Kumbia
11
 * @package    Rest
12
 *
13
 * @copyright  Copyright (c) 2005 - 2019 KumbiaPHP Team (http://www.kumbiaphp.com)
14
 * @license    https://github.com/KumbiaPHP/KumbiaPHP/blob/master/LICENSE   New BSD License
15
 * 
16
 * @deprecated Deprecated since version 1.0, Use RestController
17
 */
18
19
/**
20
 * Clase para el manejo de API basada en REST
21
 *
22
 * @category   Kumbia
23
 * @package    Controller
24
 * @deprecated Deprecated since version 1.0, Use RestController
25
 *
26
 */
27
class Rest {
28
29
    private static $code = array(
30
        201=> 'Creado ', /* Se ha creado un nuevo recuerso (INSERT) */
31
        400=> 'Bad Request', /* Petición herronea */
32
        401=> 'Unauthorized', /* La petición requiere loggin */
33
        403=> 'Forbidden',
34
        405=> 'Method Not Allowed'/* No está permitido ese metodo */
35
    );
36
    /**
37
     * Array con los tipos de datos soportados para salida
38
     */
39
    private static $_outputFormat = array('json', 'text', 'html', 'xml', 'cvs', 'php');
40
    /**
41
     * Tipo de datos soportados para entrada
42
     */
43
    private static $_inputFormat = array('json', 'plain', 'x-www-form-urlencoded');
44
    /**
45
     * Metodo de petición (GET, POST, PUT, DELETE)
46
     */
47
    private static $_method = null;
48
    /**
49
     * Establece el formato de salida
50
     */
51
    private static $_oFormat = null;
52
    /**
53
     * Establece el formato de entrada
54
     */
55
    private static $_iFormat = null;
56
57
    /**
58
     * Establece los tipos de respuesta aceptados
59
     *
60
     * @param string $accept Cada uno de los tipos separados por coma ','
61
     */
62
    static public function accept($accept) {
63
        self::$_outputFormat = is_array($accept)?$accept:explode(',', $accept);
64
    }
65
66
    /**
67
     * Define el inicio de un servicio REST
68
     *
69
     * @param Controller $controller controlador que se convertira en un servicio REST
70
     */
71
    static public function init(Controller $controller) {
72
        $content = isset($_SERVER['CONTENT_TYPE'])?$_SERVER['CONTENT_TYPE']:'text/html';
73
        /**
74
         * Verifico el formato de entrada
75
         */
76
        self::$_iFormat = str_replace(array('text/', 'application/'), '', $content);
77
78
        /* Compruebo el método de petición */
79
        self::$_method = strtolower($_SERVER['REQUEST_METHOD']);
80
        $format        = explode(',', $_SERVER['HTTP_ACCEPT']);
81
        while (self::$_oFormat = array_shift($format)) {
82
            self::$_oFormat = str_replace(array('text/', 'application/'), '', self::$_oFormat);
83
            if (in_array(self::$_oFormat, self::$_outputFormat)) {
84
                break;
85
            }
86
        }
87
88
        /**
89
         * Si no lo encuentro, revuelvo un error
90
         */
91
        if (self::$_oFormat == null) {
92
            return 'error';
93
        } else {
94
            View::response(self::$_oFormat);
95
            View::select('response');
96
        }
97
98
        /**
99
         * Si la acción del controlador es un numero lo pasamos a los parametros
100
         */
101
        if (is_numeric($controller->action_name)) {
102
            $controller->parameters = array($controller->action_name)+Rest::param();
103
        } else {
104
            $controller->parameters = Rest::param();
105
        }
106
107
        /**
108
         * reescribimos la acción a ejecutar, ahora tendra será el metodo de
109
         * la peticion: get , put, post, delete, etc.
110
         */
111
        $controller->action_name  = self::$_method;
112
        $controller->limit_params = FALSE;//no hay verificación en el numero de parametros.
113
        $controller->data         = array();//variable por defecto para las vistas.
114
115
    }
116
117
    /**
118
     * Retorna los parametros de la petición el función del método
119
     * de la petición
120
     * @return Array
121
     */
122
    public static function param() {
123
        $input = file_get_contents('php://input');
124
        if (strncmp(self::$_iFormat, 'json', 4) == 0) {
125
            return json_decode($input, true);
126
        } else {
127
            parse_str($input, $output);
128
            return $output;
129
        }
130
    }
131
132
}
133