Desidero scrivere un'app Django con un REST-ful api. framework Django REST offre tre serializzatori modello built-in: ModelSerializer che serializza a qualcosa di simileQual è la procedura migliore per serializzare i campi di chiave esterna in una API REST-ful
{
'normal_field': 'value',
'foreign_key_field': 42
}
e HyperlinkedModelSerializer che serializza a qualcosa di simile
{
'normal_field': 'value',
'foreign_key_field': 'http://domain/api/myothermodel/11'
}
La mia domanda è se c'è un altro buon modo per serializzare i dati in modo che il client sappia direttamente quali campi devono essere risolti e quali campi no.
Esempio: Un client che riceve questo
{
'foo': 'http://domain/api/myothermodel/11',
'bar': 'http://otherdomain/api/myothermodel/12'
}
non sa se foo o bar dovrebbe essere un campo chiave esterna risolvibile e non un URL semplice. Qualcosa di simile:
{
'foo': 'http://domain/api/myothermodel/11', # Here the client might know that this is only a plain url.
'bar': {
'_foreignkey': true, # Tells the client that this field should behave as a foreign key which has to be resolved first
'url': 'http://otherdomain/api/myothermodel/12'
}
}
Esiste uno standard o una procedura ottimale? O è meglio che il client non lo sappia dal JSON ma da un altro codice che ha o ottiene dal server?
Aggiornamento: Facoltativo: è possibile aggiungere quale via è consigliata per alcune librerie client note come AngularJS.
Questa è in realtà una domanda interessante che non ho pensato. Per noi i frontend sanno in anticipo cosa deve essere risolvibile – timop
Potresti chiarire cosa intendi per ** una chiave straniera che deve essere risolta prima **? Per soluzione, intendi che l'istanza correlata ha un punto finale di ubicazione della risorsa nell'API REST? E risolto prima, prima di quale operazione specifica? – Fiver
Sì: "Risolvi" indica che i dati rappresentano informazioni per ottenere l'istanza correlata. "Primo" significa che voglio finalmente mostrare l'istanza e tutte le istanze correlate sul mio sito. Quindi il client deve seguire tutte le relazioni e recuperare le istanze prima che la pagina possa essere resa. MA: Nel mio primo esempio non è ovvio che i dati siano informazioni "risolvibili" ma non solo dati semplici. Questo rende più chiaro? – Norman8054