我的网络服务是否有效?

我的网络服务是否有效?

问题描述:

我有其暴露2方法 -我的网络服务是否有效?

  1. [POST方法]将客户端以XML的形式提供的对象的列表一个REST web服务。我的web服务方法将根据对象[mode = insert/update]中的一个属性插入/更新对象列表,并将返回一个包含对象及其状态列表(无论插入/更新是否成功)的XML。
  2. [POST方法]它将接受一个objectId列表,并以XML的形式从服务器返回这些对象的状态。

我知道,我们应该使用

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

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

我的问题是 - 弯曲约束以适应我们的要求可以吗?

您试图做的事情可以通过REST风格完成。虽然POST通常用于向集合添加单个实体,但它也可用于将数据块提交到“数据处理资源”。这几乎打开了通过POST开展任何事情的大门。

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

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

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

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

假设你的根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标识的资源进行交互,并且您处于统一界面的规则之内。

此Web服务不是RESTful。你总是可以弯曲约束条件,但是你失去了REST标签:-)

弯曲规则的问题在于,使用Web服务的客户端可能会承担可能不适用的事情。一般来说,如果您拥有客户端和服务,这不是一个大问题,但对于公共Web服务,您可能需要考虑更好地遵守REST原则。

+0

感谢您的快速响应。如何以REST风格实现第一种方法?一种方法是为[客户不想要的]每个对象调用。有没有办法以RESTful的方式处理多个插入/更新? – Fadd 2010-06-29 10:34:59

+0

@Surjit:你可能想查看一下[Darrel的回答](http://*.com/questions/3139405/is-my-web-service-restful/3144039#3144039)。 – 2010-06-29 21:29:16