我的网络服务是RESTFUL吗?

时间:2010-06-29 09:29:24

标签: web-services rest

我有一个REST Web服务,它公开了两种方法 -

  1. [POST方法]客户端将以XML的形式提供对象列表。我的Web服务方法将根据对象[mode = insert / update]中的一个属性插入/更新对象列表,并返回带有对象列表及其状态的XML [无论插入/更新是否成功]。 / LI>
  2. [POST方法]它将接受一个objectIds列表,并以XML的形式从服务器返回这些对象的状态。
  3. 我知道我们应该使用

    • 检索信息的GET方法
    • 用于创建新条目的POST方法
    • 用于更新现有条目的PUT方法。

    我知道我们的实现违反了一些REST约束,但是我们的要求迫使我们以这种方式实现它。

    我的问题是 - 弯曲约束以满足我们的要求是否可以?

3 个答案:

答案 0 :(得分:5)

您尝试做的事情可以完成RESTful。尽管POST通常用于向集合添加单个实体,但它也可用于将一大块数据提交给“数据处理资源”。这几乎打开了通过POST做任何你想做的事情的大门。

人们经常误解REST约束并相信你必须使用PUT和DELETE才能成为RESTful。不是这种情况。不需要使用所有方法。唯一的要求是不要滥用您使用的那些。

如果您将单个实体发布到集合以创建实体,那么对您的API用户来说显然会更直观。但是,如果这对您来说不是一个可行的选项,那么您可以自由定义一个新的媒体类型,该媒体类型可以包含一些要由某些数据处理资源创建/更新的对象。

重要的是明确这些规则。您应该创建一个新的媒体类型,例如application/vnd.yourcompany.objectlist+xml,您需要编写有关如何构建媒体类型的文档。

现在您已经定义了媒体类型,您的客户端将需要知道POST对象列表的位置。理想情况下,您将定义一个新的链接关系(例如objectprocessor),可以在其他文档中使用它来提供POST到的URL。在该链接关系的规范文档中,您应该向客户端开发人员解释,当您将application/vnd.yourcompany.objectlist+xml发布到具有链接关系objectprocessor的链接时,将会发生的是x,y和ž。

假设您的根URL返回了某种XHTML文档,如:

<html>
  <h1>My awesomely restful service that can create objects in batches</h1>
  <link rel='objectprocessor' href='http:/example.org/myservice/objectprocessor'/>
</html>

客户端应用程序可以处理此文档,发现此链接并根据链接关系定义了解将application/vnd.yourcompany.objectlist+xml发送到href中指定的端点所需的内容。

通过这种方式,消息是完全自我描述的,您正在与使用可发现的URL标识的资源进行交互,并且您在统一接口的规则范围内。

答案 1 :(得分:1)

此Web服务不是RESTful。您始终可以弯曲约束但丢失REST标签: - )

答案 2 :(得分:1)

弯曲规则的问题在于,使用Web服务的客户端可能会假设可能不适用的内容。一般来说,如果您同时拥有客户端和服务,这不是一个大问题,但对于公共Web服务,您可能希望考虑更好地遵守REST原则。