如何使用友好的名称通过Web API设置层次结构值,而不将结构本身暴露给用户
本文关键字:结构 给用户 暴露 层次结构 设置 何使用 API Web | 更新日期: 2023-09-27 18:21:13
我们正在开发某种Web API,它允许我们为分层结构设置值,如下所示:
<ROOT>
<COLLECTION_ELEMENT>
<SIMPLE_ELEMENT /> // alias = nail
<SIMPLE_ELEMENT /> // alias = hammer
<COLLECTION_ELEMENT>
<SIMPLE_ELEMENT /> // red
<SIMPLE_ELEMENT /> // green
</COLLECTION_ELEMENT>
</COLLECTION_ELEMENT>
....
<COLLECTION_ELEMENT>
<SIMPLE_ELEMENT /> // alias = nail
<SIMPLE_ELEMENT /> // alias = hammer
<COLLECTION_ELEMENT>
<SIMPLE_ELEMENT /> // red
<SIMPLE_ELEMENT /> // green
</COLLECTION_ELEMENT>
</COLLECTION_ELEMENT>
</ROOT>
正如你所看到的,我们有两种类型的元素COLLECTION_ELEMENT
,它可以包含SIMPLE_ELEMENT
和其他COLLECTION_ELEMENT
。层次结构中的每个字段都有一个别名,它实际上是公开给合作伙伴的(我们不想公开我们层次结构的结构),每个结构的别名都是唯一的。
问题是,当我们的合作伙伴想要更新/设置属于嵌套COLLECTION_ELEMENT
的SIMPLE_ELEMENT
时,我们真的不知道如何给他提供好的API。例如,
现在,我在根级别上有两个COLLECTION_ELEMENT
。我想更新第二个COLLECTION_ELEMENT
条目的hammer
值。所以现在我们使用这样的结构hammer[1][2] - newHammerValue
。
1
显示它应该设置hammer
在2个父集合元素内的首次出现。这很好,但如果我们有更复杂的结构,有很多嵌套的级别,我们可以有像hammer[1][2][3][5][2]
这样的东西,在这种情况下,很难处理所有的错误和索引不匹配,而且这不会让我们的合作伙伴知道他现在在设置什么。
因此,问题是,如何使用友好的名称通过WebApi
设置层次结构值,而不将结构本身暴露给用户?有什么想法吗?
如果集合元素有别名,那么就可以使用自然的URI路径结构,该结构用于映射层次结构。
<ROOT>
<COLLECTION_ELEMENT> //alias = foo
<SIMPLE_ELEMENT /> // alias = nail
<SIMPLE_ELEMENT /> // alias = hammer
<COLLECTION_ELEMENT> /alias = bar
<SIMPLE_ELEMENT /> // red
<SIMPLE_ELEMENT /> // green
</COLLECTION_ELEMENT>
</COLLECTION_ELEMENT>
....
<COLLECTION_ELEMENT> //baz
<SIMPLE_ELEMENT /> // alias = nail
<SIMPLE_ELEMENT /> // alias = hammer
<COLLECTION_ELEMENT> //blunk
<SIMPLE_ELEMENT /> // red
<SIMPLE_ELEMENT /> // green
</COLLECTION_ELEMENT>
</COLLECTION_ELEMENT>
</ROOT>
有了这个层次结构,您的示例就变成了
/baz/hammer
我缺了一块拼图吗?