Foros del Web » Programando para Internet » PHP »

Lógica peticiones API Rest

Estas en el tema de Lógica peticiones API Rest en el foro de PHP en Foros del Web. Buenas a to2, estoy empezando a generar una api en php y no se cual seria la mejor lógica para generarla. Por ejemplo si tengo ...
  #1 (permalink)  
Antiguo 07/11/2013, 09:16
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
Lógica peticiones API Rest

Buenas a to2, estoy empezando a generar una api en php y no se cual seria la mejor lógica para generarla.

Por ejemplo si tengo un objeto persona que es socio de un club y que tiene propiedades:

-id
-codigoSocio
-nombre
-apellidos
-dni
-direccion
-poblacion
-nacionalidad
etc...

Que sería mejor si quiero dar soporte a diferentes consultas por medio de la API, tener diferentes funciones tipo:

infoUsuarioByid: Me daria toda la info segun id proporcionada a la api, obviamente tendria una sql esperando solo le parametro de la id tal que select ... where id=

infoUsuarioByCodigoSocio: Me daría toda la info segun codigoSocio de la persona, tb tendria ya preparada la sql tal que select ... where codSocio=
....


O seria mejor generar una sola funcion tal que :

infoUsuario: que espera recibir x parametros y dentro de ella hago un switch y segun los parametros que sean monto la sql tal que :

Código PHP:
Ver original
  1. condicion="";
  2. for($i=0;$i<count($_POST['parametros']);$i++){
  3.        
  4.    switch($parametros){
  5.     case: "id"{condicion.=" id=".$_POST['parametros'][$i];break;}
  6.     case: "codSocio"{condicion.=" codSocio=".$_POST['parametros'][$i];break;}
  7.    }
  8. }
  9.  
  10. $consulta="select * from ... where=".$condicion;

A nivel de performance quizas la primera opcion es mejor dado que se sabe que numero de parámetros espera , pero el tiempo de desarrollo es mayor tambien.

Opiniones???


Gracias!!!
  #2 (permalink)  
Antiguo 07/11/2013, 16:13
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Lógica peticiones API Rest

<saludos>
Pues revisando lo que quieres implementar, en el caso de usar la función única
tendrías problemas pues:

1. En el switch se valida el campo $parametros (que no veo por ningún lado) y por ende al hacer la consulta y como $condicion no tendría valor,
el query explotaría (sin embargo $parametros pudo haber sido obviada al crear el post)

2. Una vez se solucione el punto 1, al dar valor a $condicion en este ciclo, y si viene más de una condición (es decir, si $_POST['parametros'] es array),
$condicion quedaría así:

Código PHP:
Ver original
  1. $condicion = 'id = '.$_POST['parametros'][$i].' codSocio = '.$_POST['parametros'][$i];

En cuyo caso al unirlo luego a $consulta, de nuevo va a explotar pues la cláusula WHERE solo soporta una condición y aquí quedaría con 2
condiciones dentro del WHERE

3. Como consecuencia del punto 2, entonces la variable $condicion sería mejor que se volviese una serie de condiciones
(ya sea una serie de AND o de OR, como mejor se ajuste)
y el WHERE que vaya genérico en la variable $consulta, me explico


Código PHP:
Ver original
  1. switch($parametros){
  2.     case: "id" {$condicion .= 'AND id = '.$_POST['parametros'][$i]; break;}
  3.     case: "codSocio" {$condicion .= 'AND codSocio = '.$_POST['parametros'][$i]; break;}
  4. }


teniendo a $condicion como

Código PHP:
Ver original
  1. $condicion = 'AND id = '.$_POST['parametros'][$i].' AND codSocio = '.$_POST['parametros'][$i];
y al final

Código PHP:
Ver original
  1. $consulta="select * from ... where id is not null ".$condicion;
Así incluso aseguramos que no explotará sea o no que $condicion tenga valor, obviamente puede ser una mejor
condición inicial en el WHERE, lo mio es solo un ejemplo

Sin embargo creo que finalmente esta es mejor opción, pues si se divide en varias funciones,
el mantenimiento para cada una luego puede ser extenso, pero si se tiene todo en una sola función,
los ajustes serán mucho más corto de realizar.

Pero pues es como yo lo veo, así que la misión si se decide aceptar es revisar lo que comentó y ver si
es posible de implementar dentro del modelo que se quiere.

</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 07/11/2013, 16:33
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Lógica peticiones API Rest

Primero, dividir los casos:
Los dos ejemplos que das, (obtener por id, u obtener por código de socio) parecen estar destinados a devolver 1 solo elemento.
Otra cosa distinta sería si los métodos estuvieran destinados a devolver más de un elemento, lo cual permitiría combinaciones más complicadas de filtros, aunque también se pueden resolver.

Suponiendo que estás hablando de una API para devolver 1 solo elemento.Las columnas de la tabla que son claves únicas son fácilmente identificables.La versión más simple,es un array del tipo:
Código PHP:
Ver original
  1. <?php
  2.    $uniqueParams=>array("id","codigoSocio");
  3.    $conditions=array();
  4.    foreach($uniqueParams as $value)
  5.    {
  6.            if(isset($_GET[$value]))
  7.                 $conditions[]=$value."=".$_GET[$value];
  8.    }
  9.    if(count($conditions)>0)
  10.    {
  11.            $query="SELECT * from usuarios WHERE ".implode(" and ",$conditions);
  12.    }
  13.    else
  14.    {
  15.         // Error.Sin condiciones.
  16.     }

Código PHP:
Ver original
  1. A nivel de performance quizas...
A nivel de performance, lo hagas como lo hagas, su impacto es nulo.Zero.nil.

Etiquetas: api, peticiones, rest, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:36.