嵌套JSON请求的RESTful标准

时间:2018-03-18 07:19:35

标签: json rest standards hierarchy restful-architecture

我正在编写一个RESTful网络服务,并陷入两难境地,我找不到明确的答案。我需要创建一个bill资源。我有两种方法,需要建议使用哪种方法和原因:

方法-1

构建一个大的JSON有效负载,让后端验证并创建嵌套资源。 JSON请求如下所示:

 {
      'type_id' : ,
      'supply_state_id' : ,
      'consumer' : 
      {
           'name'  : ,
           'mobile_number' : ,
           'address' : 
           {
                'address1' : ,
                'city' : ,
                'zipcode' : ,
           },
      },
      'consignee' : 
      {
           'name' : ,
           'mobile_number' : ,
           'email' : ,
           'gstin' : ,
           'address' : 
           {
                'address1' : ,
                'city' : ,
                'zipcode' :
           }
      },
      'dated' : ,
 }

请注意,上面的结构已达到二级嵌套,根据我的发现到目前为止并没有消化。 为了消除嵌套,我有一个替代方案,建议首先创建所有嵌套资源,然后在目标资源中使用它们的对象id,即bill

方法-2

识别所有嵌套资源,然后在单独的API匹配中创建,使用他们的id来创建最终/目标bill资源

首先,我们使用json有效负载创建两个address资源:

{
    'address' : 
    {
        'address1' : ,
         'city' : ,
         'zipcode' : ,
    }
}

说它返回我们获得address_id的响应,然后我们使用它来创建consumerconsignee资源:

消费者

{
    'consumer' : 
    {
         'account_id' : ,
         'name'  : ,
         'mobile_number' : ,
         'address_id' : ,
    }
}

收货人,使用单独的address_id

{
    'consignee' : 
    {
        'name' : ,
        'mobile_number' : ,
        'email' : ,
        'gstin' : ,
        'address_id' : ,
    }
}

现在我们使用上述请求中的consumer_idconsignee_id来创建所需的资源

{
    'type_id' : ,
    'supply_state_id' : ,
    'consumer_id' : ,
    'consignee_id' : ,
    'dated' : ,
}

两种方法都有自己的PRO和CON而不是另一种。我将重点介绍主要内容:

方法-1:

  • PRO :赞成性能和可读性
  • CON :由于资源嵌套而导致的巨大有效负载

方法-2:

  • PRO :模块化和简单化的方法
  • CON :由于多次API调用而导致性能下降

请建议应采用何种方法以及原因。

如果可以的话,请回答以下问题:

  • 性能
  • 代码可维护性(从后端角度来看,方法1比方法2具有更高的代码复杂性,反之亦然,从前端角度来看)
  • 应用程序增长,因此请求可能会在JSON中变得更大

1 个答案:

答案 0 :(得分:0)

如果您的消费者或收货人或其他嵌套对象弹出多个账单,我更喜欢方法二,它可能稍微不那么可读,但您仍然会有某种消费者ID,所以我&#39 ; d说损失很小。

关于多次通话的事情,您只需要使用第一个账单发送consumer-creation-json,我猜你希望几次使用同一个消费者。