Architettura software | App con back-end API

5

Ho cercato in rete una risposta, ma non sono riuscito a trovare una domanda simile né a rispondere. Quindi eccomi.

Sto sviluppando un'app in cui un utente può scattare una foto di un'auto e recupererà il marchio dell'auto e probabilmente un modello.

Attualmente sto usando un'API come back-end per ricevere l'immagine, l'API invierà l'immagine a un'API diversa che può riconoscere il modello di auto +. La risposta verrà rispedita alla mia API, disinfetterò la risposta e la rimanderò all'app.

Mi chiedevo se questa sarebbe stata una buona struttura o se potessi farlo come nella foto qui sotto.

Flusso applicativo corrente:

Quellochepensopotrebbeessereilflussodiapplicazionimiglioremamenosicuro:

Nuovoflussodiapplicazioni:

La mia domanda qui è che è possibile implementare l'ultimo flusso di applicazioni, quindi non devo inviare un'immagine due volte, ma posso semplicemente inviare un'immagine dalla mia app direttamente all'API che non è mia, riprendi il token e ottieni la risposta in questo modo. La mia preoccupazione è che dovrò dare alle persone con un'app la mia API_key in modo che possano fare richieste all'API che non è mia. C'è la possibilità di usare oAuth1 ma non so se la mia chiave API sarà abbastanza sicura in quel modo, ogni consiglio sarà apprezzato.

EDIT1 La mia funzione di sanitizzazione nella mia API back-end è troppo grande per essere implementata nell'app stessa.

    
posta Gertjan Brouwer 04.03.2017 - 13:06
fonte

3 risposte

2

Ci sono tre (modifica: quattro) ragioni per cui non andrei per questo.

  1. Ci si affida all'API di terze parti per integrare ulteriormente con la propria API, per restituire un token e quindi fornire una risposta da un token non un'immagine caricata. Quindi dovresti sapere che forniscono quell'integrazione e la mantengono

  2. Stai ottenendo che i tuoi clienti (l'app) effettuino due chiamate API per eseguire un'unica operazione e che necessitino di documentazione perché non è un concetto standard, quindi è necessario documentare e fornire supporto per questo.

  3. Affrontare l'autenticazione è difficile e richiede tempo e pensieri. Quando puoi evitarlo, ci provo sempre.

  4. Se dai la tua chiave API ai tuoi clienti, cosa significa smetterla seguendo la tua procedura e non solo chiamando direttamente il metodo di analisi delle immagini direttamente e tagliandoti brevemente?

Sono d'accordo con altri commentatori che l'opzione 1 sia ragionevole. Stai mantenendo le tue implementazioni come una scatola nera per i tuoi clienti e un giorno, quando trovi un'API di terze parti migliore che è più veloce ed economica e fa un riconoscimento migliore - devi solo aggiornare la tua API e non devi preoccuparti di dal punto di vista dei tuoi clienti.

Se sei preoccupato per la velocità di trasferimento, perché non guardare prima il ridimensionamento delle immagini sul client o far caricare il client su qualcosa come l'archiviazione BLOB / Amazon S3 di Azure e passare semplicemente gli URL?

    
risposta data 04.03.2017 - 20:28
fonte
1

La divisione della logica di business nel client e nel back-end non è una buona pratica. Dovresti farlo completamente nel tuo back-end o nel client, e secondo me dovrebbe essere fatto completamente nel tuo back-end. Quindi l'immagine 1 è la strada da percorrere.

    
risposta data 04.03.2017 - 13:29
fonte
0

Sono d'accordo con il consenso generale ...

  1. Il carico sul tuo server per instradare queste immagini sarà minimo fino a quando non avrai successo, il che a quel punto il carico maggiore non ha importanza.
  2. L'alternativa richiede molto più tempo.
  3. L'alternativa non è sicura.
    1. Se l'altro servizio cambia il modo in cui operano, è molto riparato più velocemente al backend.
    2. Il client sarà molto più facile da costruire e mantieni, poiché sarà meno incline agli errori.

Un'alternativa potrebbe essere quella di caricare il client su S3, quindi inviare l'indirizzo al back-end per l'elaborazione. S3 ha sistemi di sicurezza, oppure puoi mantenerlo semplice e basta configurare il tuo bucket per cancellare tutti i messaggi che sono vecchi ...

    
risposta data 25.04.2017 - 04:40
fonte

Leggi altre domande sui tag