Come ottenere risorse diverse in un singolo endpoint in RESTful?

7

Ho un webservice REST che ha un paio di risorse, come Azienda e Utente. Ma ora ho bisogno di apportare una modifica all'API per restituire una lista speciale che combini compagnia, utente e forse altro tipo di risorsa. Come un elenco di consigli con vari tipi di risorse.

Qual è l'approccio migliore per risolvere questo problema?

Ho bisogno di creare un nuovo endpoint (risorsa), qualcosa del tipo: /recommendations ? Ho già il /company endpoint e il /user endpoint che restituisce gli oggetti corrispondenti. Questo va bene. Ma ora ho bisogno di un modo per restituire un array con una combinazione di utenti e aziende.

Inoltre sto pensando che il json assomigli ad una serie di oggetti, ma come il client può sapere quale tipo di oggetto sta analizzando se ogni oggetto nella matrice è una risorsa diversa?

Modifica

Voglio che il mio cliente possa mostrare una schermata di raccomandazioni nell'app. Il problema è che questa lista può combinare più tipi di dati (utenti, aziende). Non importa se queste risorse hanno una relazione o meno. Il cliente deve ricevere un messaggio del genere:

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

3 risposte

4

Associa le tue risorse di raccomandazione a /recommendations e quindi utilizza questa struttura:

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

Consente al consumatore di analizzarlo correttamente in base al nome ( users o companies per esempio).

    
risposta data 23.06.2013 - 19:17
fonte
2

Definirei un tipo di raccomandazione separato con tutte le informazioni pertinenti per le raccomandazioni in esso contenute. Nel tuo modello, questo tipo non mappa direttamente su una tabella di database, ma ottiene il suo contenuto da entrambe le tabelle Utente e Società (possibilmente utilizzando un UNION SQL).

    
risposta data 24.05.2013 - 11:13
fonte
2

Senza fare ipotesi sulle relazioni tra azienda e utente, penso che tu voglia solo un bel modo per restituire la composizione di diversi tipi di oggetti. C'è uno standard proposto che definisce abbastanza bene come farlo, Hypertext Application Language. Ecco un esempio:

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" }
         },
    }]
},
}

Copiato da ExampleDocument

    
risposta data 23.05.2013 - 00:36
fonte

Leggi altre domande sui tag