如何使用友好的名称通过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_ELEMENTSIMPLE_ELEMENT时,我们真的不知道如何给他提供好的API。例如,

现在,我在根级别上有两个COLLECTION_ELEMENT。我想更新第二个COLLECTION_ELEMENT条目的hammer值。所以现在我们使用这样的结构hammer[1][2] - newHammerValue

1显示它应该设置hammer在2个父集合元素内的首次出现。这很好,但如果我们有更复杂的结构,有很多嵌套的级别,我们可以有像hammer[1][2][3][5][2]这样的东西,在这种情况下,很难处理所有的错误和索引不匹配,而且这不会让我们的合作伙伴知道他现在在设置什么。

因此,问题是,如何使用友好的名称通过WebApi设置层次结构值,而不将结构本身暴露给用户?有什么想法吗?

如何使用友好的名称通过Web API设置层次结构值,而不将结构本身暴露给用户

如果集合元素有别名,那么就可以使用自然的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

我缺了一块拼图吗?