¿Cómo obtener diferentes recursos en un solo punto final en RESTful?

7

Tengo un servicio web REST que tiene un par de recursos, como Empresa y Usuario. Pero ahora necesito hacer una modificación en la API para devolver una lista especial que combine compañía, usuario y quizás otro tipo de recurso. Me gusta una lista de recomendaciones con varios tipos de recursos.

¿Cuál es el mejor enfoque para resolver esto?

Necesito crear un nuevo punto final (recurso), algo como: /recommendations ? Ya tengo el punto final /company , y el punto final /user devolviendo los objetos correspondientes. Esto esta bien. Pero ahora necesito alguna forma de devolver una matriz con una combinación de usuarios y empresas.

También estoy pensando que el json se verá como una matriz de objetos, pero ¿cómo puede el cliente saber qué tipo de objeto está analizando si cada objeto en la matriz es un recurso diferente?

EDIT

Quiero que mi cliente pueda mostrar una pantalla de recomendaciones en la aplicación. El problema es que esta lista puede combinar múltiples tipos de datos (usuarios, empresas). No importa si estos recursos tienen una relación o no. El cliente debería recibir un json así:

"recomendations": [
    {
        "id_user": 1
        "name": "Jean"
        ...
    },
    {
        "id_company": 2
        "name": "Starbucks"
        ...
    },
    ...
]
    
pregunta alejandromp 22.05.2013 - 21:48

3 respuestas

4

Asigne sus recursos de Recomendación a /recommendations y luego use esta estructura:

{
   "users" : [ 
           { .. }, 
           { .. }, ..
    ],
   "companies" : [
           { .. }, 
           { .. }, ..
    ]
}

Le permite al consumidor analizarlo correctamente basándose en el nombre ( users o companies por ejemplo).

    
respondido por el Martin Wickman 23.06.2013 - 19:17
2

Definiría un tipo de Recomendación separado con toda la información relevante para las recomendaciones en él. En su modelo, este tipo no se asigna directamente a una tabla de base de datos, sino que obtiene su contenido de las tablas de Usuario y Compañía (posiblemente utilizando un UNION de SQL).

    
respondido por el Bart van Ingen Schenau 24.05.2013 - 11:13
2

Sin hacer suposiciones sobre las relaciones entre la Compañía y el Usuario, creo que solo desea una buena forma de devolver la composición de diferentes tipos de objetos. Hay un estándar propuesto que define bastante bien cómo hacerlo, el lenguaje de aplicación de hipertexto. Aquí hay un ejemplo:

GET /recommendations HTTP/1.1
Host: example.org
Accept: application/hal+json

HTTP/1.1 200 OK
Content-Type: application/hal+json

{
    "_links": {
    "self": { "href": "/recommendations" },
    "next": { "href": "/recommendations?page=2" },
    "find": { "href": "/recommendations{?id}", "templated": true }
},
"_embedded": {
    "recommendations": [{
        "_links": {
            "self": { "href": "/recommendations/123" },
            "users": { "href": "/users/98712" },
            "companies": { "href": "/companies/7809" }
       },
     },{
         "_links": {
             "self": { "href": "/recommendations/124" },
             "users": { "href": "/users/97213" },
             "companies": { "href": "/companies/12369" }
         },
    }]
},
}

Copiado de ExampleDocument

    
respondido por el imel96 23.05.2013 - 00:36

Lea otras preguntas en las etiquetas