Es la primera vez que hago una api en PHP...

bultack

Y no sé si voy por buen camino. La cuestión es que mandé mi CV a una empresa y me pidieron si podía hacer una pequeña app para así ellos poder evaluar mi forma de trabajo. El proyecto que tengo hecho es un MVC hecho por mi, todo muy básico.

Para las peticiones tengo un controlador RestController.php en el que tengo los métodos que se pueden llamar de forma pública y ya en estos métodos se llaman a los modelos correspondientes para trabajar sobre la base de datos. Estoy utilizando Postman para realizar todas las peticiones y la información que devuelvo la retorno en json y devolviendo un 200 si ha ido OK u otro código dependiendo del error.

La duda que tengo es que no sé si voy por buen camino o si debería hacer otras comprobaciones dentro de RestController, tampoco sé si en el caso de que se introduciese un parámetro inválido se debe devolver cómo respuesta que ese parámetro es inválido o simplemente basta con devolver un error 400.

comx
#1bultack:

tampoco sé si en el caso de que se introduciese un parámetro inválido se debe devolver cómo respuesta que ese parámetro es inválido o simplemente basta con devolver un error 400.

Lo que podrías hacer es lo siguiente:
1. 204 No Content - Si al hacer la petición no hay ningún resultado, json vacío.

  1. 400 Bad Request - Si no son los parámetros esperados.
    3. 200 OK - Si todo ha ido bien, devuelve json.

Para más info entra en W3 - Protocols
Si alguna vez has trabajado con frameworks tales como Symfony2, Yii2 o Laravel te sonará.

bultack

Gracias por la respuesta. He empezado a añadir las respuestas HTTP que me has comentado, y además les añado un mensaje adicional en el caso del código 400 para saber qué dato ha provocado el fallo.

Es correct que todas las peticiones las haga por POST?

1 respuesta
comx

#3

  1. Obtener info, GET Method.
  2. Crear objecto a partir de un JSON, POST Method.
  3. Actualizar info a través de un JSON, PUT Method.
  4. Eliminar objeto de la base de datos (usando como mínimo el ID), DELETE Method.

Has pensado en publicar el código en GitHub ?

p.s. Si me mencionas quizás me entere la próxima vez que respondas jajajaj

1
Stricken

Echa un ojo a http://jsonapi.org/ y a http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api

1 2 respuestas
comx

#1 Lo que he mencionado es básicamente lo que ha dicho #5 en el segundo enlace.

Por cierto #5, muy útil el primer enlace. Gracias. +1

1 respuesta
bultack

#5 Gracias por los enlaces, les voy a echar un vistazo.

#6 Por ahora no lo publicaré en GitHub. Intentaré seguir los pasos que me has indicado y en cada método de la API haré una comprobación para ver si el método de petición es el correcto. Para la API tengo unas seis peticiones y sólo uno tendría que ir por GET ya que los otros son para insertar y actualizar...

He buscado un poco más por Google y he encontrado este pequeño ejemplo de cómo crear una API, le he estado echando un vistazo y más o menos me ha ayudado a entender un poco más cómo estructurar y diseñar el código, que esto es lo que me estaba dando más problemas que otra cosa.

Saphyel

Y por que no te pillas un microframework como zend express o silex? a mi usar PHP a pelo sin PSR ni nada me parece un acto medieval... Es mas si lo unico que te piden es montar un servicio Rest siempre puedes tirar de Drupal 8 y no necesitas ni tocar ni 1 linea de codigo.

2 2 respuestas
Merkury

#8 Para utilizar PSR (imagino que te referiras al 0/4 de autoloading) no necesitas un framework eh.

Por cierto recomendar Drupal (cualquier version) debería estar penado con permaban.

Igual lo de recomendar un framework solo por el PSR y usar Drupal esta relacionado...

1 respuesta
Saphyel

#9 recomende 2 microframeworks y no es solo por el PSR (no quiero repetirme, busca en la RAE minimo y recomendar igual te aclara conceptos basicos...), igual deberias mirar TAMBIEN la diferencia entre framework y microframework...
Sobre Drupal solo dije que puede usarlo si no quiere tocar codigo, no se si solo le piden los endpoints para testear o que...
Para mi deberia ser permaban criticar una respuesta sin aportar nada y sin entender de que estas hablando.

1 respuesta
Merkury

Lo de Silex o Zend Express me parece normal que lo recomiendes, pero en tu post lo has vinculado directamente a que implementan PSR, no veo ninguna otra cosa a favor, como un sistema de routing, gestión bastante mas sencilla de errores/excepciones o la implementación de respuestas HTTP como JsonResponse, que en esta caso le irian de cojon.

De todas formas #10 si a ti una empresa te manda un test técnico para ver como te manejas con PHP y les cascas una solución en drupal, ole tus cojones toreros pero igual el que no tiene ni idea eres tu eh...

1 respuesta
Saphyel

#11

#8Saphyel:

a mi usar PHP a pelo sin PSR ni nada

Prefiero alguien que dado un problema puede encontrar una solucion en un CMS/FW/polla marina, que alguien que copia de stackoverflow y ademas no cumple con los requisitos de la API (que lo he visto mas de una vez... por lo menos uno me puso la fuente de donde lo copio, fue honesto)

1 respuesta
Merkury

#12 Vale, vale para ti la perra gorda. Pero cuando recomiendas algo y luego expones una opinion todo en la misma linea, llame loco, pero normalmente son cosas relacionadas, pero oye...

1 respuesta
eXtreM3

#13 Freddy loco.

1 1 respuesta
DarkSoldier

#14 yo.. no digo nada pero están hablando de usar frameworks/microframeworks...

pd: para que usarlos pudiendo hacerte uno para cada proyecto??

1 respuesta
bultack

#8 No los uso porque no tengo ni idea de cómo funcionan. Entre el curso de inglés y que practico deporte, el tiempo que me queda libre no es tanto cómo para poder aprender todo lo que me gustaría, por eso hay cosas cómo Silex y Symfony que sí me gustaría aprender, que tengo en mi lista de cosas por aprender a utilizar pero que ahora mismo me está resultando imposible

Saphyel
#15DarkSoldier:

pd: para que usarlos pudiendo hacerte uno para cada proyecto??

welcome to 1980!

Shit me pillaste, no debo postear en MV sin cafe...

2 respuestas
BLZKZ

#17 al vuelo

1 1 respuesta
DarkSoldier

#17 -> #18

1
Gantorys

Hilo patrocinado por El día de la marmota.

Usuarios habituales

  • DarkSoldier
  • BLZKZ
  • Saphyel
  • bultack
  • eXtreM3
  • Merkury
  • comx