2012-02-21 15 views
32

Estoy tratando de diseñar una API RESTful donde los usuarios puedan obtener un solo producto o lista de productos en una única solicitud GET. Cada producto tiene una identificación única.REST api: solicitando múltiples recursos en un solo obtener

La URL solo producto es bastante simple:

http://mycompany.com/api/v1/product/id 

Esto devuelve la información de un solo producto. Estoy confundido sobre cómo debería ser la URL para la información de productos múltiples.

¿Qué tal

http://mycomapny.com/api/v1/product/ids 

donde IDS es una lista separada por comas de identificadores separados?

+2

id utiliza algo como http: //mycompany.com/api/v1/getproducts? Ids = [listofids] – Dampsquid

+1

¿Cómo se duplica una pregunta sobre el diseño de la API? de una pregunta sobre los detalles de implementación en Rails? – Tgr

Respuesta

28

Tu sugerencia de identificadores separados por comas es lo suficientemente bueno.

Sería instructivo examinar algunas API REST públicas para ver cómo se manejan. Por ejemplo, la API de StackExchange separa los identificadores con un punto y coma - https://api.stackexchange.com/docs/answers-by-ids

+0

Gracias por el ejemplo API. – user824212

+1

Me pregunto por qué las personas no usan productos? Id [] = 1 & id [] = 2. Los analizadores de URL manejan esto muy bien. –

+5

@JulioGreff Creo que es porque se ve un poco feo. Ninguna otra razón en particular. –

65

Recomendaría pensar que es como si estuviera enumerando varias representaciones del recurso filtrado por id. Como tal se realiza una solicitud GET al recurso de base:

https://example.com/api/v1/products

y filtrar la lista de respuestas por id:

https://example.com/api/v1/products?id=1,2,3

+14

Esta es la respuesta superior, porque la razón es: '/ products' y' products? Id = 1,2,3' darán __existentes__ respuestas (= recursos de la colección). Comparar '/ products/1' y'/products/1,2,3' es una receta para los dolores de cabeza de los clientes, a menos, por supuesto, que todos los puntos finales anidados devuelvan colecciones por defecto (lo que también es un enfoque interesante, por ejemplo, ver el [api] + json] (http://jsonapi.org/) format) – Philzen

+1

Me gusta este enfoque, pero ¿no debería ser https://example.com/api/v1/products?id=1&id=2&id=3? – Nitek

+2

@Nitek No; [no hay garantía] (http://stackoverflow.com/q/1746507/578288) que los parámetros de consulta duplicados se combinen en una matriz. Para su URL de ejemplo, PHP le diría que 'id' es igual a' [1, 2, 3] ', pero Ruby on Rails le diría que es igual a' 3', y otros marcos también pueden actuar de manera diferente, p. diciendo 'id' es igual a' 1'. –