Uso di mappe senza caratteri sui limiti dell'API

0

Che cosa ne pensi di passare mappe senza nome alle API ( pacchetti, sistemi, adattatori ) esterne al dominio principale come in 1st Way di seguito?

Gli oggetti strongmente tipizzati si trovano all'interno dell'API del dominio e le regole aziendali li stanno utilizzando.

1st WAY:

Domain  ->  Web API  ->  Clients
Passes strongly-typed domain objects
  • Ogni volta che una richiesta proviene dall'API Web, richiede Dominio e Dominio passa gli oggetti dominio strongmente tipizzati ( mi piace: []SomeDomainObject ) all'API

  • Quindi, l'API Web le trasforma in JSON e la risposta ai client

2nd WAY:

Domain  ->  Web API  ->  Clients
Passes property maps which loose their types
  • Ogni volta che una richiesta proviene dall'API Web, richiede a Dominio e Dominio di trasformare gli oggetti dominio strongmente tipizzati in mappe di proprietà ( come: map[string][object] ) e li passa al API

  • Quindi, l'API Web le trasforma in JSON e la risposta ai client

Nel 1o modo:

  • Quando gli oggetti del dominio o le regole cambiano, ciò può influire sull'API Web. Ad esempio: l'API Web deve adattarsi ai nuovi dati aggiunti agli oggetti dominio.

  • Quindi, la modifica nel dominio si riflette nelle modifiche nei servizi esterni a causa di types

Nel 2o modo:

  • Il dominio controlla tutto. Ogni volta che gli oggetti del dominio o le regole cambiano, l'API Web risponde automaticamente con ciò che il dominio desidera.

  • Qualsiasi modifica nel dominio si riflette automaticamente sui client esterni, poiché non avranno bisogno di vedere le entità di dominio, vedranno solo le proprietà. E, può facilmente passarli ai client come vengono forniti dal dominio.

  • Il lato negativo è che l'API Web perderà la strong sicurezza del tipo degli oggetti Dominio e vedrà solo mappe di proprietà senza nome.

posta Inanc Gumus 14.07.2017 - 11:15
fonte

2 risposte

2

Non ci sono vantaggi per il 2o metodo e molti svantaggi.

dichiari:

Whenever domain objects or rules change, Web API will automatically response back with what the domain wishes.

Tuttavia, il web api code non cambia in entrambi i casi e la web api deployment cambia in entrambi.

Un tipo strong può essere serializzato su JSON tramite riflessione senza codifica manuale. Quindi non è necessaria alcuna modifica del codice. Ad esempio, aggiungi o rimuovi le proprietà.

Allo stesso modo, se aggiorni il dominio nel 2 ° metodo, devi comunque distribuire quel codice aggiornato, presumibilmente compilato o in bundle con il codice API. Quindi è una modifica richiesta per il livello API.

Idealmente il livello Api dovrebbe essere trasparente per il client e il dominio. Per il client, chiamare l'API dovrebbe essere uguale a chiamare direttamente il dominio. tipi forti e tutti.

Alla fine della giornata il codice cliente deve conoscere la struttura dei dati per poter funzionare. Quindi hai bisogno di "tipi" di versioni sia attraverso schemi che con la pubblicazione di librerie client strongmente tipizzate.

    
risposta data 14.07.2017 - 14:26
fonte
1

In entrambi i casi è fattibile a modo loro. Anche se potrei fare un suggerimento sulla seconda strada usando le proprietà, fai un favore a te stesso e fornisci una versione come una proprietà. Altrimenti si rischia di creare problemi inutili lato client durante gli aggiornamenti.

Sono parziale al 1o modo, ma in realtà funziona solo se l'interfaccia è per lo più solidificata e non è probabile che cambi. Se aggiungi o modifichi nuovi campi e metodi per tutto il tempo, creerai frequenti tiri di capelli. Intendiamoci, è ancora possibile utilizzare il 1o modo con un po 'del 2 ° modo mescolato per buona misura. Per le aree in cui prevedi che ci siano cambiamenti frequenti, puoi comunque preferire l'uso di una mappa per rappresentare coppie chiave-valore. Richiede solo un po 'di prova del futuro da parte tua in anticipo.

E come sempre, assicurati di seguire la convenzione delle modifiche minori della versione per le modifiche all'API compatibili con versioni precedenti e le modifiche principali della versione altrimenti come una buona regola generale.

    
risposta data 14.07.2017 - 12:29
fonte

Leggi altre domande sui tag