2010-11-10 11 views
6

Me gustaría formular una pregunta sobre el diseño de una API REST HTTP que estoy exponiendo.diseño REST pregunta múltiples identificadores para un recurso que deben estar expuestos a los clientes

tengo que acceder a veces un artilugio con el ID 3:

http://ourserver/service/widgets/3

Obtener el widget con ID 3

Pero también a veces necesito para acceder a un widget por él es SKU #.

¿Es incorrecto exponer el mismo recurso a través de 2 URLS?

BUt Necesito que mis clientes obtengan un widget por su ID o por su SKU.

¿Cuál de los siguientes es mejor?

  • http://ourserver/service/widgets/bysku/skyunumber
  • http://ourserver/service/widgets/skyunumber?idtype=sku

De nuevo a repetir, necesito mis clientes a ser capaz de buscar un widget de 2 maneras diferentes. ¿Cuál es la mejor forma de diseñar las URL?

+0

No lo sé ... parece irrelevante. Haz lo que funciona – Stephen

+2

Estoy haciendo una pregunta sobre el diseño adecuado de un servicio de descanso. No es irrelevante, pero gracias por tu aporte. – rest

+0

¿Por qué no puedes pasar el mismo URI dos veces? –

Respuesta

13

Yo sugeriría teniendo en cuenta lo siguiente:

GET http://ourserver/service/widgets?sku=34342323 
=> 
303 See Other 
Location: http://ourserver/service/widgets/43 

GET http://ourserver/service/widgets/43 

Mediante el uso de una redirección, puede soportar cualquier número de criterios para encontrar widgets. La cuestión clave a considerar es qué sucede cuando comienza a habilitar el almacenamiento en caché. Si devuelve representaciones de varias URL, termina contaminando la memoria caché con varias copias y hace que sea mucho más difícil invalidar las copias en la memoria caché cuando realiza actualizaciones.

+0

Buena idea, pero voy a llamar a esta API millones de veces, crearía una sobrecarga significativa para mí. – rest

+0

@rest La respuesta 303 en sí misma es almacenable en caché, por lo que solo incurre en un viaje de ida y vuelta adicional por sku. –

+0

Solución similar descrita en "RESTful Web Services" P.84 –

Cuestiones relacionadas