【问题标题】:Handle with dynamic request that depend on the parameters处理取决于参数的动态请求
【发布时间】:2018-03-16 10:58:41
【问题描述】:

我正在使用 Spring Boot 创建一个 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"
      }
   }

这两个请求具有相同的端点,但支付方式不同。

【问题讨论】:

    标签: java spring api apache-kafka


    【解决方案1】:

    最好的方法,取决于应用程序的具体细节和需求。检查值是否丢失或 null 可能不是最好的做法,例如如果您收到 card_numberexp_datecvvboleto_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 的结构,您可以使用自定义转换器轻松转换对象,具体取决于类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 2016-04-09
      相关资源
      最近更新 更多