2010-08-06 80 views
1

我正在开发一个RESTful服务,其中可以执行进程并提供计算结果。为此我将流程本身建模为资源(例如:/ processes/translate)。我想通过发送带有附加输入参数作为查询参数的GET请求来执行该过程(例如:/ processes/translate?input1 = xxxx & input2 = xxxxx)。如何在REST风格的Web服务中描述输入参数

每个进程都有不同的输入参数,这些输入参数是在后端创建进程期间定义的。我的问题是我应该如何记录或描述以机器可读形式执行过程需要哪些输入。例如XML。

直到现在为止,在表示形式中整合原子:链接元素。我认为可能包括XFORM可能是一个解决方案?

问候 安德烈

回答

2

我不会用GET建模。虽然这是更简单的解决方案,但它也是(IMO)最不RESTful。我会让客户POST一个描述他们想要翻译的文档,并且你的服务将它们发回给他们可以找到答案的URI(有些翻译可能需要一段时间)。

例(ommiting很多HTTP头/上下文)

POST /processes/translate 
Content-Type: application/xml 
... 

<translation-request> 
    <input1 type="type1">....</input1> 
    <input2 type="type5">....</input2> 
</translation-request> 

响应:

200 OK 
Content-Location: /processes/translate/jobs/1234 
.... 
+0

感谢您的回复。我也使用你的建议方式。我想提供两个是执行的,一个是按照Restful Web Services Cookbook中描述的模式(通过使用GET)和一个异步执行的流程执行,就像您所描述的(使用POST)。我正在寻找一种最佳实践,让客户了解过程所需的输入参数以及如何嵌入这些信息,例如Atom Rrepresenation。 对不起,我的英文! – user345992 2010-08-11 12:40:18

+0

那么协议的格式(如Atom表示)就是REST所说的可以在带外完成的事情。真正几乎不可能向客户端发送机器可以解释的东西,并以正确的格式“填补空白”。拥有wiki/FAQ /任何描述同步和异步请求的例外格式的内容只需要客户端可用。 – Gandalf 2010-08-11 14:56:47

0

这一直是一个有趣的问题。我们有一个名为RESTx(http://restx.org)的项目,您可以非常方便地创建RESTful web services。您可以使用Java或Python编写自定义组件代码,然后通过将参数集发送到服务器来创建RESTful resources,然后将其存储。但是,每个参数集都有自己的URI,因此您可以通过访问新参数集的URI来始终使用这些参数运行代码。

重要的是,整个RESTful API是自动创建的。 RESTx检查组件代码,然后组装API描述。我们决定以人和机器可读的方式描述参数。你可以看到in a browserin plain JSON的例子。

我是这方面的首席开发人员,所以请随时与我联系,了解您可能遇到的任何问题。

+0

谢谢。我会看看它。它看起来很有趣。 – user345992 2010-08-11 12:42:09

相关问题