gpt4 book ai didi

xml - 如何在 REST 中传递复杂的查询?

转载 作者:数据小太阳 更新时间:2023-10-29 01:51:16 26 4
gpt4 key购买 nike

如果我理解正确,在 rest 风格中,每个查询(即对每个资源的每个不修改资源状态的操作)都应该使用 get 方法编码在查询字符串中,根本没有主体。

我说得对吗?

好吧,我有几个应用程序通过 Visual Basic 6 组件处理的 XML 消息与数据库通信。

查询的消息是这样的

<xml>
<service>account</service>
<resource>invoice</resource>
<action>query</action>
<parameters>
<page>1</page>
<page_len>10</page_len>
<order>date</order>
<fields>*</fields>
<conditions>
<date>2009-01-01..2009-01-31</date>
<customer_id>24</customer_id>
</conditions>
</parameters>
</xml>

现在我们正在重新设计我们的 XML 消息,我们希望以一种可以轻松将它们映射到 RESTful 接口(interface)的方式进行。

在前面的例子中,我们需要“conditions”标签来防止参数和条件之间的冲突(即,如果我有一个名为“order”、“page”或类似名称的字段会发生什么...... .

我们考虑发送带有前缀的参数,比如

http://account/invoice/?_page=1&_page_len=10&_order=date&_fields=*&date=2009-01-01..2009-01-31&customer_id=24

XML 应该是这样的

[...]
<_order>date</_order>
<_fields>*</_fields>
<date>2009-01-01..2009-01-31</date>
<customer_id>24</customer_id>
[...]

我们正在尝试为 crud 操作定义一些非常简单的 XML 格式,并且生成的 XML 可以轻松映射到 rest 或 JSON。

您将如何在休息应用程序中映射此类查询?是否有一些标准定义?或带有 crud rest/XML/JSON 示例的页面?返回错误或嵌套数据集怎么样?

非常感谢。

最佳答案

恕我直言,为了使您的系统真正 RESTful,您必须重新考虑您将发送的所有消息/查询。

这部分:

<conditions>
<date>2009-01-01..2009-01-31</date>
<customer_id>24</customer_id>
</conditions>

是棘手的部分。你还有什么其他条件?有很多吗?这个特殊的例子让我认为您可以将发票视为客户的子资源。当我休息时,我总是尝试识别路径中的资源,如果查询仍然需要任何参数,我将它们移动到查询字符串中。所以我会写这样的东西:

GET /customers/24/invoices?start_date=2009-01-01&end_date=2009-01-31

考虑您的资源之间的关系。假设我们通过多对多关系将资源类型 Foo 与资源类型 Bar 相关联。在这种情况下,您可以像这样询问此关系:GET/foo/123/bar 并添加查询字符串参数以对其进行过滤。当您想以涉及与其他资源的关系的方式过滤它时,问题就开始了。恕我直言,这意味着您的资源设计并不是真正的 RESTful。

关于xml - 如何在 REST 中传递复杂的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/872984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com