如果我理解正确的话,在休息的风格,每个查询(即对每一个资源的每一个动作,不改变资源的状态),应在查询字符串的所有编码,使用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接口。

在前面的例子中,我们所需要的“条件”标签,以防止参数和条件之间的冲突(即,如果我有一个字段命名“命令”,“网页”或类似的东西会发生什么..

我们虽然大约有前缀发送的参数,像

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可以很容易地映射到休息或JSON。

您将如何映射那种查询在其他应用程序?有一些标准定义的?或CRUD REST / XML / JSON样品一些网页?如何有关返回错误,或嵌套数据集?

非常感谢。

有帮助吗?

解决方案

恕我直言,以使您的系统是真正的REST风格,你必须重新思考所有消息/查询,你会送。

此部分:

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

是棘手的部分。你有什么样的其他条件?是否有很多?这个特殊的例子让我觉得,你可以把发票作为客户的一个子资源。当我休息,我总是尝试在路径标识资源,如果查询STIL需要的任何参数,我将它们移到查询字符串。所以我写的是这样的:

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

想想你的资源之间的关系。比方说,我们有一个一对多的关系资源Foo类型相关的资源型吧。在这种情况下,你可以询问这个关系是这样的:GET /foo/123/bar并添加查询字符串参数进行过滤。当您希望在涉及关系的其他资源的方式对其进行过滤的问题开始。恕我直言,这意味着你的资源的设计是不是真正的REST风格。

其他提示

您需要URL编码,XML能够通过它,但是,如果你转换XML以JSON,那么你可以传递字符串,然后json-> XML或json->对象来处理它。这将使您能够通过周围更复杂的对象。

它不是完美的,但工程。 :)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top