Amazon web services 为什么AWS使用{Key";:Key,“Value";:val}语法?

Amazon web services 为什么AWS使用{Key";:Key,“Value";:val}语法?,amazon-web-services,boto3,Amazon Web Services,Boto3,我习惯于(在Python和Java中)看到定义为{key:value}的dicts/hashmaps AWS使用格式{“Key”:Key,“Value”:val} 这种方法从何而来?它增加了复杂性,从这种复杂性中有什么好处吗 编辑:以下格式为示例: 这种方法的一个好处是,您不需要事先知道密钥,因此您可以更加灵活/模块化,允许第三方添加密钥和值。一种可能性:AWS倾向于在不同情况下使用相同的数据结构格式,以确保一致性,通过减少可变性降低总体系统复杂性。S3事件通知和Lambda@Edge触发器,其

我习惯于(在Python和Java中)看到定义为{key:value}的dicts/hashmaps

AWS使用格式{“Key”:Key,“Value”:val}

这种方法从何而来?它增加了复杂性,从这种复杂性中有什么好处吗

编辑:以下格式为示例:


这种方法的一个好处是,您不需要事先知道密钥,因此您可以更加灵活/模块化,允许第三方添加密钥和值。

一种可能性:AWS倾向于在不同情况下使用相同的数据结构格式,以确保一致性,通过减少可变性降低总体系统复杂性。S3事件通知和Lambda@Edge触发器,其中事件数据结构(此处显示为
{…}
)不必要地包装在一个外部对象中,该对象具有一个键和一个内部数组,其中一个成员为
{“Records”:[{…}]}
即使根据定义,在这些情况下,
记录
数组的内部对象不能多于一个或少于一个。他们这样做是为了一致性


另一种可能的解释是:SDK用于与服务通信的低级API使用XMLª,这种结构更合理

根据EC2 API参考,以下是一个示例响应:


ami-1a2b3c4d
形象
网络服务器
ami-1a2b3c4d
形象
堆栈
生产
...
它是一个具有多个属性的对象数组。情况并非总是如此,但这让我们回到上面的“一致性”论点

不可否认,使用SDK通常非常困难,而且字典看起来更简单,但SDK似乎只是简单地保留了在线使用的底层数据格式,而这种格式在多年前以XML为中心的世界中就被采用了

另一种可能性:可以看出,这里还有多个候选键,可以使用嵌套字典结构:

{ 
  "image": { 
    "ami-1a2b3c4d": { 
        "webserver: "", 
        "stack": "production",
        ...
    }
  }
}
此结构不适合响应分页。许多API操作返回有限的结果集和延续标记

这种“改进的”嵌套结构也很难扫描“key”等于“stack”的所有标记,因为您必须上下遍历树



imk XML。。。也有例外情况,而且大部分未记录的事实是,许多XML服务API秘密支持JSON,其中一些甚至支持使用HTTP请求头发送XML请求并接收JSON响应。。。但对于在线上的JSON交互,有同样的证据表明,它们似乎在服务端将XML转换为JSON,保留结构,或者对这两种格式使用相同的本机结构,无论序列化如何,这都会使服务交互保持一致,这一点很有意义。

您可以发布链接到您在何处看到过这一点吗?AWS生态系统允许您在某些地方创建自定义属性,这意味着它们的密钥命名需要灵活。这一效应会逐渐影响boto输出。与不能正确标记资源相比,它更不麻烦。@ingernet,你能举例说明这种格式如何允许你创建一个自定义属性,而{K:V}语法不允许吗?这实现了一个更可扩展的模式:如果有一天他们决定添加另一个属性,这是可能的。例如:
RemoveAfter
属性,用于在日期之后自动删除标记。用
key:value
方法是不可能的。@zerkms{key:k,'value:v,'RemoveAfter':}有什么{k:v,'RemoveAfter':}没有的?怎么会这样?为什么备选方案禁止您“提前知道钥匙”?你是说更常见的JSON方法是无用的吗?如果说有什么区别的话,那么问题中的语法所建议的抽象漏洞就更难使用,而且没有任何真正的好处,当然“对于服务使用XML,这种结构更有意义。”---XML的表达能力足以支持
val
语法或
val
。两者都是有意义的。@zerkms我想的
更具约束性。谢谢,这对我来说很有意义,也可以解释其他人工制品,例如(如您所说)lambda响应中的额外级别
{ 
  "image": { 
    "ami-1a2b3c4d": { 
        "webserver: "", 
        "stack": "production",
        ...
    }
  }
}