我全都是针对REST网络服务的,我的公司制定了一项政策来优先选择REST over SOAP。
但是,我需要公开一个不适合资源范例的Web服务。它本质上是一个计算,我需要发送大量参数(大约20个字段)并检索一个数字。
我考虑过使用HTTP POST并在请求体中发送JSON对象。这里的问题是,我的web服务支持SOAP-WS和REST,这种方法不属于任何这些类别。
我的问题是,这里的选项有哪些?我可以将其设置为RESTful WS吗?
答案 0 :(得分:4)
正如您所提到的,当您在资源上公开CRUD操作时,REST是有意义的。通常这些资源会持久存储在某些数据库或存储机制中。
在你的情况下,我猜没有存储或资源(你提供一堆数字并获得结果,没有任何存储,是真的吗?)。因此,您无法将这样的WS称为“RESTful”。
据说REST更像是一种“哲学”。您可以拍摄自己喜欢的作品并使用它们。您实现POST的想法,使用您的输入接受JSON结构并返回带有结果的JSON听起来不错。您还可以发布“application/x-www-form-urlencoded”内容(常规表单提交,如果有意义,则将结果返回“text / plain”。
我们的想法是构建一个易于理解且易于操作的WS。与SOAP-WS完全相反。 ;)
答案 1 :(得分:0)
经过一番研究,我发现这篇文章与本次讨论非常相关: http://info.apigee.com/Portals/62317/docs/web%20api.pdf
答案 2 :(得分:0)
我认为没有理由不能成为RESTful。将特定计算运行视为具有自己标识的资源(/calculation/ID123
);然后,您可以执行POST /calculation
以创建新的,/calculation/ID123/paramA
上的GET / PUT使用特定参数,然后在/calculation/ID123/result
上获取以检索计算结果(或说明由于某种原因无法获得计算结果的说明。当然,/calculation
上的GET将是您可以看到的已保存计算列表的检索,/calculation/ID123
上的GET将检索上面概述的子资源的描述(以及其他任何其他内容)您要提供的信息),并且清除特定计算是DELETE。
拥有大量子资源和高度瞬态资源并没有错。需要记住的重要一点是,客户端不应该使用URL。 (我不知道内容协商在这种情况下是否如此有用;这实际上取决于我想的特定计算。)