Come gestisci la sequenzialità nelle API?

3

Considera un caso d'uso del modulo:

  1. Il sistema mostra un elenco di potenziali filtri (per nome, per data di creazione ...).
  2. L'utente sceglie un filtro e fornisce i parametri necessari.
  3. Il sistema mostra un elenco di potenziali oggetti.
  4. L'utente sceglie un singolo oggetto.
  5. Il sistema restituisce l'oggetto scelto in qualche modo.

Sono bloccato su come questa sequenzialità verrà applicata nell'applicazione.

Supponiamo di provare ad accoppiare liberamente l'interfaccia utente dalla logica di business. Sospetto che abbiamo una specie di classe UI (riga di comando, grafica ...). Questa sarebbe una fine del confine. Dall'altra parte del confine, ci sarebbero una o più classi di controllori.

Da un lato, ho potuto applicare questa sequenzialità nell'interfaccia utente. Andando passo dopo passo a questo caso d'uso, sarebbe molto facile impedire all'utente di iniziare il passo 4 prima di completare il passo 2. Nei controller, ci sarebbe un metodo per ogni sottofase (searchWithFilters (...), chooseInList ( ...)) e l'interfaccia utente li chiamerebbe nei momenti appropriati. Tuttavia, se l'interfaccia utente viene ridisegnata in qualcos'altro, è compito del progettista far rispettare la sequenzialità nell'interfaccia utente.

C'è un modo in cui posso applicare questa sequenzialità nel controller, in modo che questo carico non sia sull'interfaccia utente? Questa sarebbe una buona idea da fare? Come potrei fare questo?

    
posta user2890248 20.02.2016 - 01:18
fonte

2 risposte

5

Is there any way I can enforce this sequentiality in the controller, so that this burden is not upon the UI? Would this be a good idea to do? How would I do this?

L'implementazione di questo flusso di lavoro è probabilmente NON una buona idea nell'API. Il design e il layout dell'interfaccia utente saranno sempre un "carico" sull'interfaccia utente e forzare una determinata interfaccia utente limiterà le potenziali interfacce utente in futuro. Ad esempio, potrei creare un'interfaccia utente su un dispositivo mobile o uno smartwatch che mostri solo un elenco limitato o una sola voce, saltando o sostituendo i passaggi da 1 a 3.

Il modo migliore per approcciare questo è dividere l'API in più aree (eventualmente rappresentate da diversi controller).

Un'area avrebbe accesso agli elenchi di oggetti filtrati, gestendo i passaggi da 1 a 3. I filtri potevano essere codificati o descritti in qualche forma di linguaggio di query. Il linguaggio di query offre all'UI la massima flessibilità, ma è più lavoro da creare e potenzialmente crea vulnerabilità di sicurezza. Dovresti anche considerare il paging o limitare i risultati di un gran numero di oggetti. Standard come OData aiutano a fornire dati veramente generici, ma probabilmente non è necessario andare in questa misura.

La seconda area sarebbe la visualizzazione e la modifica di singoli oggetti per i passaggi 4 e 5. Il modo in cui lo fai dipende strongmente dall'API e dai dati modificati. Puoi utilizzare JSON dritto su REST in una singola chiamata o dividere l'oggetto in diverse chiamate Web per diversi aspetti dell'oggetto.

Se è necessario gestire la sequenzialità nelle API, ad esempio i passaggi in un flusso di lavoro, creare una qualche forma di contesto o ID del flusso di lavoro e trasmetterlo a ciascuna chiamata API. Ogni API può verificare se i passaggi precedenti richiesti sono stati completati. Può anche essere un identificatore per informazioni di stato. Nota che questo design può creare problemi di affinità con il server o aggiungere più carico sul sistema con i controlli aggiuntivi.

    
risposta data 20.02.2016 - 01:39
fonte
1

Puoi organizzare l'utente con questi passaggi rivelando selettivamente le informazioni disponibili che consentono all'utente di raggiungere il passo successivo.

Tuttavia, non vogliamo essere troppo restrittivi su un ordine specifico. Ad esempio, dovrebbe esserci un loop (backedge) da 3 a 2, in quanto l'utente può applicare criteri aggiuntivi.

Per l'interfaccia utente, quello che farei è fornire due riquadri o aree. Uno con la batteria di potenziali filtri, ordinamenti, ecc ... e l'altro con risultati filtrati. La prima volta in questa pagina o finestra (ad esempio nessun filtro selezionato), il tuo dominio potrebbe avere troppi risultati, quindi devi semplicemente mostrare un segnaposto che richiede all'utente di selezionare i filtri, altrimenti mostrerai tutti i risultati.

Se i tuoi dati sono tabulari, puoi integrare il filtro & ordina nelle intestazioni delle colonne.

Ogni volta che viene selezionato un filtro, si ottengono i parametri; questo nel primo riquadro. Ogni volta che un filtro riceve dei parametri, aggiorni il secondo pannello, che contiene i risultati filtrati correnti.

In qualsiasi momento, se l'utente fa clic su un elemento, li porti lì (cioè in un'altra pagina o finestra che mostra quel singolo oggetto).

Quando si tratta di riga di comando, si avranno più problemi nell'applicazione, ma allora cosa? Fornire utili opzioni della riga di comando e consentire all'utente di emettere comandi come meglio credono. Fornire una query sulle potenziali opzioni di filtro / ordinamento. È possibile consentire l'assemblaggio di un set di filtri e consentire una query utilizzando tale set di filtri. E consentire la selezione di un singolo elemento per chiave primaria, ad esempio. Non è necessario limitare l'ordine qui.

    
risposta data 20.02.2016 - 01:40
fonte

Leggi altre domande sui tag