我正在为嵌入式硬件设备开发RESTful HTTP API。在此API中,硬件组件通常在API资源的URI层次结构中表示,然后具有子JSON对象,其具有特定于该硬件“对象”的属性/字段。为了控制/修改硬件,发送HTTP PUT请求,其中包含要更改的所需字段的JSON对象的内容主体。
我的问题是关于JSON请求正文中字段的顺序。假设我们正在更改同一个JSON对象中的多个字段。由于JSON对象是by definition,“无序的零个或多个名称/值对的集合”,这意味着应用这些硬件更改的顺序也是无序/未定义的,可能不太好。
例如,如果在设置“state”之前必须配置,那该怎么办?例如,以下内容可能会作为内容正文发送:
{
"setting1": 1234,
"state": "on",
}
但如果我们发送以下内容,会发生什么? (注意首先出现“state”字段。)
{
"state": "on",
"setting1": 1234,
}
问题是,默认情况下,JSON对象的上下文是“无序的”,因此行为是不确定的。
如果可以建立(可能通过API文档)请求中的JSON字段的顺序是重要的,这将被视为违反JSON和RESTful上下文中的最佳实践蜜蜂?别人怎么处理这个?如果还没有讨论过,我会感到惊讶,但我找不到任何东西。
答案 0 :(得分:1)
我不确定,但我认为试图对客户施加订购限制对其中一些人来说会有问题。我敢打赌,并非所有框架/ JSON库都会遵守排序,至少在默认情况下不是这样。如果你控制客户端,这可能不是什么大问题,但听起来你不是。
严格地说,您必须发送多个PUT请求,以确保以正确的顺序进行更新。这是最容易实现的,但也是最吵闹的。另一种选择是使用RFC 6902格式支持对端点的PATCH调用。这将允许您控制更改发生的顺序,但您的客户端需要构建PATCH。如果这些都不适合你,你也可以支持POST。