Sto creando un'API REST che espone un metodo di callback per un servizio di terze parti.
Immaginiamo che ci siano due servizi simili (ma non identici) di terze parti. Entrambi richiamano la mia API ( POST /api/callback
), ma hanno diversi formati di richiesta (JSON):
Provider 1
{"sender": "Provider1", "field1": "value1", "fieldN": "valueN"}
Provider 2
{"sender": "Provider2", "key1": "value1", "keyN": "valueN"}
Quindi hanno solo un parametro comune ( sender
) e altri potrebbero differire.
Successivamente, ho due DTO corrispondenti a cui JSON deve essere mappato
pseudo-codice:
class Provider1DTO {
string sender;
string field1;
string fieldN;
}
class Provider2DTO {
string sender;
string key1;
string keyN;
}
Provider1DTO dto1 = mapper.readJSON(json, Provider1DTO.class)
Provider2DTO dto2 = mapper.readJSON(json, Provider2DTO.class)
Domanda:
Qual è l'approccio corretto per raggiungere la personalizzazione per provider?
1) Introduci endpoint separati
/api/callback/provider1
/api/callback/provider2
2) Usa il singolo endpoint e analizza il campo sender
del corpo della richiesta per mappare JSON al DTO pertinente
3) Usa singolo endpoint e analizza X-Sender-ID
(esempio) di intestazioni di richiesta per mappare JSON al DTO pertinente
L'approccio 2 mi sembra il migliore, dal momento che non posso costringere i provider a utilizzare intestazioni di richieste personalizzate (come al punto # 3). Per quanto riguarda il n. 1: potrebbero esserci più servizi che forniscono un formato di richiesta identico, quindi non è necessario disporre di un endpoint separato
Che cosa pensi di questo? Grazie in anticipo