Diseñe un servicio RESTful con múltiples identificaciones

Estoy diseñando un servicio RESTful. Es enumerar un conjunto de datos. El principal problema es que el conjunto no tiene un identificador único razonable. Tampoco se puede calcular fácilmente el conjunto específico dentro del conocimiento del sistema. Como resultado, no parece posible tener un servicio GET /items/{identifier}.

Tengo la identificación de cada elemento que se solicita. Mi principal problema es que no parece RESTful enumerar los identificadores en el URI (por ejemplo, GET items/{id1},{id2},...,{idn} ). ¿Derecha?

Pude ver que ELIMINAR tiene un caso de uso similar: eliminar varios elementos en un ciclo de solicitud.

¿Cómo se satisfaría tal caso de uso mientras se permanece dentro del reino REST? ¿Es eso posible?

preguntado el 03 de julio de 12 a las 03:07

¿Qué restricción RESTful le preocupa? Los URI son simplemente identificadores que siguen las reglas establecidas en RFC 3986. Personalmente, no veo ningún problema en usar una lista de valores separados por comas como parte del identificador URI. -

1 Respuestas

El enfoque establecido en la pregunta en realidad significa que para cada combinación de ids hay un recurso. digamos que tenemos 2 ids: 1 y 2.

/items/1,2

/items/2,1

Los anteriores representan diferentes recursos, aunque el resultado es el mismo. Esto puede resultar confuso para el consumidor de la API.

Otra forma de modelar esto es mediante el parámetro de consulta como semántica de filtrado. Supongamos, que el id es en realidad un campo de un recurso.

Ejemplo, obtener item by id 1:

GET
/items/1

Response:

{
    "id": 1,
    "type": "table",
    "color": "black",
    ...
}

Entonces, la pregunta es, ¿qué sucede si necesito obtener varios artículos a granel? Puede generalizar esta pregunta a la pregunta general de filtrado items por valores en ciertos campos. Por ejemplo: obtener todos los items De tipo mesa

GET
/items?query="name='table'"

Response:
{
    "data": [
        {
            "id": 1,
            "type": "table",
            "color": "black",
            ... 
        },
        {
            "id": 2,
            "type": "table",
            "color": "grey",
            ... 
        },
        {
            "id": 6,
            "type": "table",
            "color": "brown",
            ... 
        }
    ]
}

Así que se puede hacer la misma pregunta para obtener items sin que importe id is 1 or 2. Digamos que modelamos el or operación como || en la sintaxis de query

GET
/items?query="id=1||id=2"

Response:
{
    "data": [
        {
            "id": 1,
            "type": "table",
            "color": "black",
            ... 
        },
        {
            "id": 2,
            "type": "table",
            "color": "grey",
            ... 
        }
    ]
}

Respondido 04 Abr '15, 15:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.