Ho un'API RESTful che offre funzionalità di eCommerce. Un'area che sto cercando di decidere sulla corretta implementazione è come elaborare i pagamenti.
Diciamo che ho il seguente URI GET ... / checkout / {id} / pagamento. Questa risorsa fornisce dettagli all'applicazione client di quali dettagli devono essere inviati per effettuare un pagamento. Le specifiche delle informazioni nella risorsa dipendono dalle implementazioni seguenti
Implementazione 1 La risorsa contiene i campi di pagamento di base da compilare come numero di carta, indirizzo di fatturazione ecc. I dati vengono inviati all'API utilizzando POST ... / checkout / {id} / pagamento . L'API invia quindi una richiesta al gateway di pagamento (ad es. Paypal), attende la risposta e quindi invia una risposta appropriata all'applicazione client.
Implementazione 2 La risorsa contiene dettagli su come inviare una richiesta direttamente al gateway di pagamento (ad esempio, paypal). Il client invia il pagamento al gateway, attende una risposta e quindi invia il riferimento di pagamento (normalmente sempre fornito da un gateway di pagamento) all'API utilizzando il POST ... / checkout / {id} / pagamento.
Il problema che sto avendo è che entrambi hanno pro e contro.
L'implementazione 1 direi che è il metodo più sicuro perché tutto è contenuto in una richiesta all'API. L'API può quindi aggiornare le tabelle di back-end una volta che il pagamento è stato elaborato e restituire lo stato di successo o di errore al client. Poiché l'API invia una risposta al gateway, sa che la risposta che riceve è autentica.
L'implementazione 2 libera l'API dal dover elaborare il pagamento che è ottimo, ma richiede al cliente di effettuare due richieste. Uno per il gateway di pagamento e uno per l'API con il riferimento. Inoltre, come posso convalidare il riferimento di pagamento sull'API senza chiamare il gateway? Un cliente disonesto potrebbe inviare qualsiasi riferimento all'API che potrebbe quindi essere contrassegnato in modo errato come pagato.
Volevo solo lanciare le mie idee là fuori, ma se qualcuno ha una soluzione davvero buona per l'implementazione dei gateway di pagamento e dei servizi web RESTful API sarebbe grandioso.
Aggiorna Ho appena pensato a Implementazione 3 . Potrei effettivamente creare un'API più piccola separata per gestire i pagamenti. Funzionerebbe in modo simile all'implementazione 1, tranne che l'applicazione client non registra su api.site.com / .... ma pubblica su gateway.site.com / ... Questo mi dà un grado di sicurezza come Controllo il codice su gateway.site.com e garantisce che api.site.com non venga impantanato aspettando che il fornitore di servizi di pagamento risponda. L'API del gateway diventa quindi essenzialmente un client dell'API principale e pubblica i dettagli del successo del pagamento.
Qualche idea su questo?