您将如何设计RESTful转换服务?

时间:2011-08-17 19:00:00

标签: rest restful-url

我们正在创建一项服务,以执行从一种格式到另一种格式的转换。转换的例子是货币,距离,时间,语言等。在我们的例子中,它是地理点(例如从十进制度纬度/经度到度 - 分 - 秒纬度/经度)。

通常,RESTful资源有一个类似的OO概念,它在服务器端是持久的,可以是CRUDed(我知道这只是使RESTful成为什么的一部分),但是在一个简单的服务转换东西的情况下,不一定存在。如何制作这个RESTful?目前我们有这样的一些:

要获取支持的格式列表,可以执行以下操作:

GET /coordinates/formats

将返回格式列表,包括例如DD和DMS(十进制度和度 - 分 - 秒)。

然后可以转身并执行转换:

POST /coordinates/DD/as/DMS

在这个例子中,我们会在请求体中传递十进制度的表示(如JSON或其他格式),并在响应体中接收度 - 分 - 秒的表示。

这当然有效,但感觉不合适,特别是因为对于不同的输入(不同的十进制度数)反复使用相同的URI。诀窍可能是真正专注于操纵它的资源。也许它是一个“转换”:

POST /coordinate/conversions

正文可能会接受一个值,它的格式和所需的输出。但是,所有资源的URI仍然相同......

思想?

1 个答案:

答案 0 :(得分:2)

我建议使用参数和GET。我还会切换路径元素并使/conversions成为您的根资源,因为转换是您的“域核心”。

主要原因是:

  • 从上面的api-client角度来看更容易使用(没有POST有效负载,非常容易测试/试用)。客户友好性是api-design的最高优先级之一。
  • GET更合适,因为你不会在服务器端“改变”任何东西,而是转换东西。
GET /conversions/coordinate?input=xxx&format=yyy

我喜欢用/conversions/formats回馈元数据的方法。它使格式易于查找,并且您的api更易于自我解释。然后,相应的数据形成来自上述调用的“格式”参数的可能值。

或者您是否存储转换(有利于改变状态的POST方法)?