Nello sviluppo di un proxy client soap, quale struttura di ritorno è più facile da usare e più sensata?

1

Sto scrivendo (in PHP) un client / proxy per un servizio web SOAP. I tipi di ritorno sono coerentemente avvolti in oggetti risposta che contengono i valori di ritorno. In molti casi ciò ha molto senso, ad esempio quando vengono restituiti più valori:

GetDetailsResponse Object 
(
    Results Object
    (
        [TotalResults] => 10
        [NextPage]     => 2
    )

    [Details] => Array
    (
        [0] => Detail Object
        (
            [Id] => 1
        )
    )
)

Ma alcuni dei metodi restituiscono un singolo valore scalare o un singolo oggetto o array avvolto in un oggetto risposta:

GetThingummyIdResponse Object
(
    [ThingummyId] => 42
)

In alcuni casi questi oggetti potrebbero essere piuttosto profondi, quindi per ottenere le proprietà all'interno è necessario eseguire il drill down di più livelli:

$response->Details->Detail[0]->Contents->Item[5]->Id

E se li scarto prima di passarli indietro, posso rimuovere uno strato dal codice dei consumatori.

So che probabilmente sono un po 'un astronauta di architettura qui, ma quest'ultimo stile mi infastidisce, quindi ho lavorato con il mio codice per fare in modo che i miei metodi proxy restituissero il valore scalare al codice client dove non c'è assolutamente bisogno di un oggetto wrapper.

La mia domanda è, sto effettivamente rendendo le cose più difficili per i consumatori del mio codice? Sarebbe meglio se lasciassero i valori di ritorno avvolti negli oggetti di risposta in modo che tutto fosse coerente o rimuovesse gli strati non necessari di indiretta / astrazione?

    
posta cori 14.12.2012 - 21:12
fonte

1 risposta

1

Ho scoperto che è meglio essere il più coerente possibile in modo che tutti i servizi consumer sappiano cosa aspettarsi, sarà anche più veloce, più facile e meno bug per te semplicemente restituire un oggetto risposta su qualsiasi dato che stai inviando .

Dal lato del consumatore possono sempre usare le vars locali per ridurre la profondità:

$cont = $response->Details->Detail[0]->Contents;
$cont->Item[5]->Id;

In breve: fai sempre ciò che sorprenderà di meno i tuoi utenti, rendilo semplice per loro.

    
risposta data 15.12.2012 - 10:36
fonte

Leggi altre domande sui tag