Raggruppamento e nidificazione di API REST

7

La mia domanda riguarda le migliori pratiche di aggregazione o raggruppamento delle API REST. Ho uno scenario in cui ci sono molti diversi fornitori, origini dati, ecc. E penso che raggruppare le API REST avrebbe molto senso mantenere il sistema mantenibile.

Ho molti scenari in cui ci sarà una singola chiamata API che innesca molte altre chiamate API (simili) per creare la stessa entità in un altro sistema . Ad esempio per un esempio di entità "utente" :

  1. API REST chiamate front-end: PUT ... / user
  2. Quello che immagino è che il codice in ascolto sull'API sopra farà quindi più chiamate REST PUT per dire vendorA / utente, vendorB / user, vendorC / user, internalSystemA / user, internalSystemB / user, ecc.

In questo modo:

                                                            +-------------------+              
+--------+                   PUT     +-----------+  CALL    | Vendor A API      |              
|        |                 +-------> | user      +--------> |                   |              
|        |                 |         +-----------+          +-------------------+              
|        |                 |                                                                   
| Front  | PUT    +--------++  PUT   +-----------+  INSERT  +-------------------+              
| End    +------> | user    +------> | user      +--------> | Internal System   |              
|        |        +--------++        +-----------+          +-------------------+              
|        |                 |                                                                   
|        |                 |         +-----------+  CALL    +-------------------+              
|        |                 +-------> | user      +--------> | Vendor B API      |              
+--------+                   PUT     +-----------+          |                   |              
                                                            +-------------------+             
                 +                                 +                                           
                 +---------------------------------+                                           
                         Internal REST APIs                                                    

Si noti che l'entità di esempio non deve essere "utente", ci sono molte entità che avranno una controparte sulle API del fornitore.

I fornitori in questo scenario offrono funzionalità diverse. Ma potrebbero esserci più fornitori che offrono la stessa funzionalità (e l'utente sceglierà il fornitore che desidera utilizzare). Per semplicità, diciamo che le funzionalità di esempio sono

  • Procurement,
  • Risorse umane,
  • Gestione,
  • pagamento.

Qual è la migliore pratica per raggruppare e nidificare le API REST in uno scenario del genere? È una buona idea raggrupparli per venditore o dovrebbero essere raggruppati come funzionali o per entità aziendale? Come sarebbe l'URL?

    
posta phpPhil 02.03.2015 - 01:55
fonte

2 risposte

1

Preferirei un raggruppamento più logico,

Immagina un sistema in cui vengono eseguite le prenotazioni alberghiere, dove ci sono 2 diverse API di prenotazione hotel (A e B) e un gateway di pagamento.

In questo tipo di situazione ci sarebbero poche buone pratiche da seguire,

  • Avvolgete qualsiasi API di terze parti in uno dei servizi (ogni volta che le API di terze parti modificano solo il servizio wrapper deve essere modificato), in questo esempio l'interfaccia singola può essere utilizzata per entrambi i servizi A e B.
  • Crea facciate di servizio di livello superiore in base alla funzionalità (in questo caso una facciata per la ricerca e una per la prenotazione)
  • Questo aiuterà anche a risolvere i problemi, perché se c'è un errore sarebbe facile tracciare l'intero processo poiché avviene in un unico metodo di facciata
risposta data 05.03.2015 - 04:59
fonte
1

La risposta dipende da alcune ipotesi non descritte nella domanda: 1. Non hai la libertà di modificare il fornitore o l'API interna 2. Il raggruppamento deve essere eseguito in un'unica transazione. Ad esempio, quanto deve essere severa l'API contro i guasti dell'API del fornitore. Cosa succede se 1 fornitore fallisce e il resto ha successo. Continuiamo a considerarlo un successo o a iniziare un'API di rollback (ad esempio, eliminare l'utente)

Sulla base delle ipotesi, non progetterò la mia API basata sull'implementazione, ad esempio con un'API del fornitore, ecc., ma prettamente basata sulla funzionalità, ovvero chi sono gli utenti della nuova API e i loro requisiti.

    
risposta data 30.04.2015 - 23:03
fonte

Leggi altre domande sui tag