我有一个 REST Web 服务,它公开了 2 种方法-
我知道我们应该使用
我知道我们的实现违反了一些 REST 约束,但我们的要求迫使我们以这种方式实现它。
我的问题是 - 可以改变约束以适应我们的要求吗?
最佳答案
您尝试做的事情可以通过 RESTful 方式完成。尽管 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-services - 我的网络服务是 RESTFUL 的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3139405/