Utilizzo delle Web API di Instant Developer Cloud

Introduzione

Le Web API create da Instant Developer Cloud sono di tipo REST ed in standard oData (www.odata.org) e quindi è possibile fare riferimento alla documentazione relativa.

Una prima infarinatura delle chiamate la potete trovare nella guida ufficiale di oData:

Nota bene:

Per testare i link di queste Web API occorre una autenticazione Basic con user: alladin e password: opensesame.

Differenze con oData

Rispetto alle possibili opzioni dei comandi oData ci sono alcune differenze dovute alle caratteristiche dei documenti di Instant Developer, per fare un esempio se volessi utilizzare il parametro $expand per indicare alla web api di restituire una determinata collection otterrò un messaggio di errore che mi avverte che questa funzionalità non è stata implementata.

Quindi se eseguo la chiamata:

https://prod3-pro-gamma.instantdevelopercloud.com/datamapdesignpatterns/Order(10540)?$expand=OrderDetails

Ottengo come risposta:

{
    "error": {
        "code": -3,
        "message": "Request type not implemented: '$expand=OrderDetails'"
    }
}

Su Instant Developer Cloud posso richiedere il caricamento delle collection di primo livello del documento mediante l’opzione childLevel=1, quindi la nostra richiesta diventa;

https://prod3-pro-gamma.instantdevelopercloud.com/datamapdesignpatterns/Order(10540)?childLevel=1

Esempi di chiamata

Per facilitare chi ha poca dimestichezza con le chiamate Web API con oData riportiamo alcuni esempi significativi.

Chiamata con ordinamento record

Posso eseguire l’ordinamento dei record risultanti mediante il parametro $orderby.

https://prod3-pro-gamma.instantdevelopercloud.com/datamapdesignpatterns/Order?$orderby=OrderDate desc

Chiamata con limite sul numero record

Se vogliamo avere la lista degli ultimi 10 ordini si utilizza il parametro $top combinato ad $orderby.

https://prod3-pro-gamma.instantdevelopercloud.com/datamapdesignpatterns/Order?$top=10&$orderby=OrderDate desc

Chiamata per chiave primaria con più campi

In caso la chiave primaria sia composta da più di un campo è possibile indicarli separati da virgola.

https://prod3-pro-gamma.instantdevelopercloud.com/datamapdesignpatterns/OrderDetail(OrderID=10540,ProductID=3)

Chiamata con filtro e conteggio dei record

Vediamo come recuperare una lista di OrderDetail filtrati per OrderID = 10540 ed ottenere anche il numero di record trovati.

https://prod3-pro-gamma.instantdevelopercloud.com/datamapdesignpatterns/OrderDetail?$count=true&$filter=OrderID eq 10540

Nella risposta sarà presente anche questo valore:

 "@odata.count": 4

Chiamata con paginazione

Se vogliamo ottenere un set di risultati da paginare per la nostra chiamata occorre che nell’header della stessa si imposti il valore:

Prefer: odata.maxpagesize=100

Questo fissa la paginazione a 100 record per volta.
In questo modo nella risposta alla fine dei dati avremo il link per la chiamata ai successivi 100 record.
Qui sotto un esempio di risposta.

{
    "@odata.context": "https://prod3-pro-gamma.instantdevelopercloud.com/datamapdesignpatterns/$metadata#Order",
    "value": [
        {
            "OrderID": 11074,
            "CustomerID": "SIMOB",
            "EmployeeID": 7,
            "OrderDate": "1998-05-06",
            "RequiredDate": "1998-06-03",
            "ShippedDate": null,
            "ShipVia": 2,
            "Freight": 18,
            "ShipName": "Simons bistro",
            "ShipAddress": "Vinbæltet 34",
            "ShipCity": "Kobenhavn",
            "ShipRegion": null,
            "ShipPostalCode": "1734",
            "ShipCountry": "Denmark",
            "ItemCount": 1
        }
    ],
    "@odata.nextLink": "https://prod3-pro-gamma.instantdevelopercloud.com/datamapdesignpatterns/Order?$orderby=OrderDate desc&$skiptoken=eyJwYWdlIjoxLCJwYWdlU2l6ZSI6MSwicGFnaW5nTW9kZSI6MiwibGFzdFJvdyI6eyJPcmRlckRhdGUiOiIxOTk4LTA1LTA2VDAwOjAwOjAwLjAwMFoiLCJPcmRlcklEIjoxMTA3NH19"
}
2 Mi Piace