2012-03-27 7 views
9

Actualmente estoy escribiendo un servicio web que proporciona acceso a algunos recursos. Intento seguir REST pero estoy enfrentando un problema con algunas partes de mi API.API REST, variable de ruta frente a parámetro de solicitud

tengo las URIs siguientes;

  • /MYSERVICE/usuarios/: para obtener todos los usuarios
  • /myservice/usuarios/{ID de usuario}: para obtener un usuario específico
  • /MYSERVICE/divisas/: para obtener todas las insignias
  • /myservice/insignias/{} badgeId: para obtener una licenciatura específica dge

Ahora, mi problema es que tengo que implementar una forma de obtener todos los usuarios que tienen una insignia en particular. puedo considero que esto es sólo un filtro aplico en la lista de usuarios, por lo tanto, los siguientes URI:

  • /myservice/usuarios/filter = insignia: {badgeId}

o puedo considero que esto es sólo un sub-recursos de una tarjeta de identificación, por lo tanto los siguientes URI:

  • /MYSERVICE/divisas/{} badgeId/usuarios/

¿Cuál parece ser el 'REST-obediente'?

Debo decir que he leído algunas publicaciones sobre este tema específicamente esta: Rest Standard: Path parameters or Request parameters pero no parecen cubrir mi problema.

+2

REST no tiene opinión sobre el aspecto de su URI. Cualquiera de los dos es igual de "REST obediente" –

+0

FYI, di una oportunidad a la pregunta que mencionaste, puede que te interese la [respuesta] (http://stackoverflow.com/a/31118242). – tne

Respuesta

0

Prefiero /myservice/users/?filter=badge:{badgeId} y creo que hay más API que utilizan este formato.

5

Si está buscando SER RESTANTE, considere usar HATEOAS (acrónimo horrible, pero la clave para ser verdaderamente RESTful).

Usando HATEOAS, su representación insignia podría ser algo como esto:

<badge> 
    <id>1234</id> 
    <name>Admin</name> 
    <link rel = "/rel/users" 
     href = "/myservice/users?badge=1234" /> 
    <link rel = "self" 
     href = "/myservice/badges/1234" /> 
</badge> 

Esto permite a sus clientes para disociar el esquema URI del servidor, ya que simplemente conseguir en cualquier href el/REL/enlace de usuarios proporciona. De acuerdo, su servidor aún necesita definir un esquema de URI internamente, pero si en algún punto del camino decide que no le interesa, puede cambiarlo fácilmente sin romper a sus clientes. Por ejemplo, es posible que desee cambiar su esquema URI a su segunda opción, lo que causaría su representación Placa para cambiar a este:

<badge> 
    <id>1234</id> 
    <name>Admin</name> 
    <link rel = "/rel/users" 
     href = "/myservice/badges/1234/users" /> 
    <link rel = "self" 
     href = "/myservice/badges/1234" /> 
</badge> 

clientes mediante el/REL/usuarios enlazan relación no se ven afectados por el URI cambio. Lo que esto se reduce a ... usa HATEOS, y el esquema de URI realmente no importa tanto.

¡Salud!