我正在使用Spring启动创建一个API,我试图想出处理两个具有相同端点的请求的最佳方法。因此,如果请求具有参数X,Y和Z它会做A事,否则做B事。
处理它的最佳方法是什么?也许是一个处理请求并指向正确方法的中间件?或者可以评估参数X是否为空?谢谢你的帮助。
例如:
请求A:
/payment
{
"holder_name": "John Doe",
"payment_method":
{
"card_number" : "5478349021823961",
"exp_date" : "2018-10-16",
"cvv" : "713"
}
}
请求B:
/payment
{
"holder_name": "John Doe",
"payment_method":
{
"boleto_number" : "123456789"
}
}
这两个请求具有相同的端点,但付款方式不同。
答案 0 :(得分:0)
最好的方法取决于应用程序的具体细节和需求。检查值是否缺失或为空可能不是最好的事情,例如,如果您收到四个字段card_number
,exp_date
,cvv
,boleto_number
要执行的正确操作。
您可以在根级别的额外字段中请求json中的类型。
<!-- language: json -->
{
"holder_name": "John Doe",
"payment_method": "TICKET",
"payment_details": {
"ticket_number": "123456789"
}
}
或者使用当前付款对象的字段。
<!-- language: json -->
{
"holder_name": "John Doe",
"payment_method": {
"type": "TICKET"
"ticket_number": "123456789"
}
}
这样您可以先检查方法类型,然后检查其他字段和详细信息是否与您希望该类型的字段匹配,然后再切换到正确的处理程序。
此外,您应该决定是否允许不属于指定方法的未知字段或字段。例如,如果您决定不严格,那么接收前面提到的4个字段(类型为CREDIR_CARD
)可以有效地处理为信用卡付款,并忽略额外字段。如果您决定更严格,可能会抛出错误,表明收到了意外字段。
您可以使用枚举来定义类型。
public enum PaymentType {
TICKET,
CREDIT_CARD,
CASH
}
最后,根据您是使用类或类似地图的对象作为已处理json的结构,您可以使用自定义转换器轻松转换对象,具体取决于类型。