【问题标题】:Canonical technique for POSTing an array of objects with REST使用 REST 发布对象数组的规范技术
【发布时间】:2012-02-02 20:49:31
【问题描述】:

感谢您抽出宝贵时间阅读本文。我查看了 Stack Overflow 并没有看到类似的问题,但如果我错过了一个问题,我深表歉意。

所以我正在构建一个 RESTful API,以及一个作为所述 REST API 的(第一个)使用者的用户界面。

我需要创建一个对象。该对象的创建需要大量的配置。

我了解我需要使用的动词(POST - 我们不要争论这一点)和我需要拥有的 URL 路径。我的问题是关于如何配置参数。让我给你一个 JSON 格式的示例配置对象,以便不可知:

    { 
     name: "foo",
     barid:1, 
     features:[
        {
         id:1, 
         config: {
            foo:bar, 
            fubar:baz
         } 
        }, 
        {
         id:2, 
         config: {
            foo:bar, 
            fubar:baz
         }
        },... 
    ]  
   }

所以我想知道的是......发布 features 参数的正确方法是什么?我是否应该将“功能”设为 JSON 字符串并在服务器端对其进行反序列化?您是否遵循一些约定在 RESTful POST 中构建嵌套对象数组?其他开发人员将不得不使用它,我当然不希望人们不得不手动构建 jQuery 对我的 JSON 对象所做的事情,它看起来像:

features[0][featureid]:2
features[0][configuration][min]:-64
features[0][configuration][max]:50
features[0][include]:true
features[1][featureid]:3
features[1][configuration][min]:0
features[1][configuration][max]:80.5
features[1][include]:true

我的 grails 应用不太喜欢这样 :)

再次感谢您的宝贵时间。

【问题讨论】:

    标签: jquery rest grails


    【解决方案1】:

    Grails 可以接受features[0].featured=2&features[0].configuration.min=-64 之类的参数,但您必须在实际映射之前准备空结构和特征数组。应该是:

    import org.apache.commons.collections.ListUtils
    import org.apache.commons.collections.Factory
    
    class DataCommand {
    
      String name
    
      List features = = ListUtils.lazyList([], {
          new FeatureCommand(
              configuration: new ConfigurationCommand()
          )
      } as Factory)
    
    }
    

    +

    class FeatureCommand {
        int featured
        ConfigurationCommand configuration
    }
    
    class ConfigurationCommand {
        int min
        int max
    }
    

    lazyList 按需创建列表元素。如果您确切知道功能的数量 - 您可以使用lazyList手动填充它。

    顺便说一句,这也是将正文中的实际 JSON POST/PUT 到服务器而不是请求参数的好方法。例如,它是 BackboneJS 的默认方式。因此,您将能够自己解析传入的 JSON,映射到相同的命令(需要很少的配置)。

    【讨论】:

    • 嘿Splix - 我不知道Grails,我很欣赏提醒。我将在未来使用它(并且可能会重构另一个应用程序以使用它)但最后我真的在问一个关于 REST 的问题,而不是关于 Grails 的问题。因为其他人将使用我的 RESTful API,所以我希望按照最小意外的原则进行操作,并确保我的 API 是他们以他们期望的方式使用的东西,无论语言和平台如何。
    • 您可以使用标准 JSON(作为 POST 正文),这很常见,而且似乎大多数语言都可以使用 JSON。如果您更喜欢查询参数 - 我认为features[0].featured=2 格式没有任何问题,这也很常见(这是我第一次看到features[0][featured]:2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2016-09-16
    • 2023-04-03
    • 2019-10-03
    • 1970-01-01
    相关资源
    最近更新 更多