1

我们正在开发某种 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。层次结构中的每个字段都有一个别名,它实际上是暴露给伙伴的(我们不想暴露我们层次结构的结构),每个结构的别名都是唯一的。

问题是当我们的合作伙伴想要更新/设置时,我们真的不知道如何给他好的 API SIMPLE_ELEMENT,这属于嵌套COLLECTION_ELEMENT。例如,

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

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

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

4

1 回答 1

0

如果您的集合元素有别名,那么您将能够使用用于映射层次结构的自然 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

我缺少一块拼图吗?

于 2013-07-04T14:15:14.523 回答