rest - pasar - send array in get request
Pasar array en GET para una llamada REST (5)
Tengo una url para buscar citas para un usuario como este:
/user/:userId/appointments
¿Cómo debería ser la url si quiero obtener citas para múltiples usuarios?
deberia ser:
/appointments?users=1d1,1d2..
Gracias, Chris.
Creo que es una mejor práctica serializar sus parámetros de llamada REST, generalmente mediante codificación JSON:
/appointments?users=[id1,id2]
o incluso:
/appointments?params={users:[id1,id2]}
Luego los descodificas en el servidor. Esto le dará más flexibilidad a largo plazo.
¡Solo asegúrate de URLEncode los params también antes de enviarlos!
En lugar de usar http GET, use http POST. Y JSON. O XML
Así es como se vería su secuencia de solicitud al servidor.
POST /appointments HTTP/1.0
Content-Type: application/json
Content-Length: (calculated by your utility)
{users: [user:{id:id1}, user:{id:id2}]}
O en XML,
POST /appointments HTTP/1.0
Content-Type: application/json
Content-Length: (calculated by your utility)
<users><user id=''id1''/><user id=''id2''/></users>
Ciertamente podría continuar usando GET como lo ha propuesto, ya que es ciertamente más simple.
/appointments?users=1d1,1d2
Lo que significa que tendrías que mantener tus estructuras de datos muy simples.
Sin embargo, si / cuando su estructura de datos se vuelve más compleja, http GET y sin JSON, su programación y capacidad de reconocer los datos se vuelve muy difícil.
Por lo tanto, a menos que pueda mantener su estructura de datos simple, le insto a que adopte un marco de transferencia de datos. Si sus solicitudes se basan en el navegador, la práctica habitual de la industria es JSON. Si sus solicitudes son servidor-servidor, entonces XML es el marco más conveniente.
JQuery
Si su cliente es un navegador y no está usando GWT, debería considerar usar jquery REST. Google en servicios RESTful con jQuery.
Las colecciones son un recurso por lo que las citas están bien como recurso.
Las colecciones también suelen ofrecer filtros a través de la cadena de consulta, que es esencialmente lo que usuarios = id1, id2 ... es.
Asi que,
/appointments?users=id1,id2
está bien como un recurso RESTful filtrado.
Otra forma de hacerlo, que puede tener sentido según la arquitectura / marco de trabajo de su servidor, es repetir el mismo argumento una y otra vez. Algo como esto:
/appointments?users=id1&users=id2
En este caso, recomiendo usar el nombre del parámetro en singular:
/appointments?user=id1&user=id2
Esto es soportado nativamente por frameworks como Jersey (para Java). Eche un vistazo a esta pregunta para más detalles.
/appointments?users=1d1,1d2..
está bien. Es prácticamente la única opción sensata ya que no puedes pasar un cuerpo con un GET.