【问题标题】:Best practice for passing large parameter data to a REST call将大参数数据传递给 REST 调用的最佳实践
【发布时间】:2016-08-16 08:09:30
【问题描述】:

我有一个 REST 服务,允许用户传入他们希望从调用中返回的属性列表,例如:

/Item/123/Properties/Name,Id,Description,Type

可以传入数百个属性名称,这会导致段之间支持的字符数(例如:/IamASegment/)为 260,而无需更改注册表等。

所以我的问题是,当我需要支持用户传入这样的大量数据时,最好的方法是什么,是否应该通过 header 传入?

【问题讨论】:

    标签: rest http-headers


    【解决方案1】:

    适当的 REST 解决方案是在上一页/状态上创建一个 表单,并通过 POST 提交该表单,这反过来会生成一个重定向的 GET 到实际的参数化资源.在这种情况下,参数可以是一些数字,例如代表请求字段的位字段。

    类似这样的:

    GET /items
    {"form": {
       "Id": { "type": "number" },
       "Name" : { "type": "checkbox" },
       "Description" : { "type": "checkbox" },
       ...
    }
    
    POST /items
    {"Name": "true", "Description": "true", ... }
    

    重定向到:

    GET /items/123?fields=110110111
    

    当然,您必须为表单、请求、响应等定义正确的media-types

    【讨论】:

    • 我可以在我的情况下看到这个解决方案的几个问题,首先我们处理的项目上可用的属性数量远远超过 260,因此传回 1 和 0 的想法将会失败进入同一问题的260限制。此外,随着我​​们产品的发展,我们向项目添加了更多属性,这需要继续维护解码 1 和 0 的代码,我们当前的后端将只接受 Property = Name 的调用作为查询。
    • 您当然可以将这些位编码为真正的位,您可以轻松地在一个字符中获得 6 位,260 位就是 44 个字符。编码对客户端完全透明,因此您可以在服务器上控制它而无需更新客户端。它甚至可以是动态的,您只需要记住/存储/计算哪个字段是哪个位。
    • 这仍然留下了确定哪个字段是哪个字段的问题,这是需要维护的额外代码并且即使它是一个优雅的解决方案也无法扩展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2014-12-30
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多