2016-07-18 126 views
5

Quando si progetta un webservice, non importa se è soap, xml o json: preferiresti liste piatte o annidate?Mostra i servizi Web espongono elenchi annidati o piatti?

Esempio:

nidificato:

<carRequest> 
    <cars> 
    <car> 
     <manufature /> 
     <price /> 
     <description /> 
    </car> 
    <car> 
     <manufature /> 
     <price /> 
     <description /> 
    </car> 
    </cars> 
</carRequest> 

piatto:

<carRequest> 
    <car> 
     <manufature /> 
     <price /> 
     <description /> 
    </car> 
    <car> 
     <manufature /> 
     <price /> 
     <description /> 
    </car> 
</carRequest> 

Qual è il vantaggio di uno sopra l'altro?

risposta

6

Ci sono vantaggi e svantaggi combinati con stile personale, strumenti (le loro configurazioni predefinite, limitazioni o facilità d'uso), necessità di supportare più tipi MIME da una singola rappresentazione di oggetti, ecc. Non ho intenzione di andare in tutti di quello - dal momento che ciò che funziona per alcuni potrebbe non essere una buona soluzione per gli altri - ma voglio solo sottolineare alcune cose ...

Quale sembra più naturale, gli elementi piatti o gli elementi avvolti? In che modo le persone di solito pensano a elementi ripetuti? Ad esempio, <manufature>, <price> e <description> sono racchiusi in un elemento <car>. Perché? Perché sono correlati e insieme formano una struttura. Più di <car> s sono anche correlati e formano una struttura: una lista di <car> s. È più espressivo nella rappresentazione e nello schema XML e più leggibile. Ma naturalmente ora entriamo nelle preferenze personali e in tutte le guerre ...

C'è un altro vantaggio dell'elemento avvolto. Come si esprime un elenco di automobili vuote rispetto a un elenco di automobili che è nulla?

Se gli elementi sono piatti e non hai auto, cosa rappresenta questo quando lo si elimina in un oggetto?

<carRequest> 
</carRequest> 

La vostra richiesta sono cars = null o cars = []? Non lo sai

Se si va con gli elementi annidati allora cars = null è questo:

<carRequest> 
</carRequest> 

mentre cars = [] è questo:

<carRequest> 
    <cars> 
    </cars> 
</carRequest> 

E dal momento che lei ha citato SOAP, si potrebbe ad un certo punto necessario prendere in considerazione l'interoperabilità tra tecnologie e strumenti (vedere Why is it important to be WS-I Basic Profile compliant?) che contiene regole su come dovrebbe apparire XML nel messaggio SOAP. The style called document/literal wrapped pattern is preferred.

Questo è un argomento vasto e come TL; DR Posso solo pensare a "choose your poison". Spero che la mia risposta ti sia di aiuto.

+0

Come devo anche creare un servizio web 'soap' accanto al servizio web' xml', penso che la compatibilità con WS-I sia il punto in cui posso favorire uno rispetto all'altro modello. – membersound