REST建模:如何在REST中对动作或行为进行建模?

时间:2017-07-18 19:19:52

标签: rest

我正在创建一个REST服务,允许用户使用翻译集合中的预定义翻译将输入转换为所需的输出。

为了管理翻译定义,拥有用户可以操作的翻译资源似乎很自然,例如:

  • GET / translations
  • GET / translations / 1
  • 发布/翻译

但是,我不确定如何模拟执行/请求将输入转换为输出的行为。

我当前的设置是我对特定翻译发出POST请求,输入作为该请求的主体。请求的响应包含转换的输出:

  • POST / translations / 1 / output
  • 请求正文:输入文档(json)
  • 响应正文:输出文档

对我来说POST方法似乎不对,因为我没有在系统中创建资源,我只是在执行转换而不是改变系统的状态。然而,POST方法很方便,因为它允许我发送一个请求主体(GET请求不应该这样做)。

那么:我如何在REST风格中正确建模此动作

1 个答案:

答案 0 :(得分:2)

  

对我来说POST方法似乎不对,因为我没有在系统中创建资源

对于你正在做的事情,

POST fine 。来自RFC 7231

  

POST方法请求目标资源根据资源自身的特定语义处理请求中包含的表示。例如,POST用于以下功能(以及其他功能):

     

o提供数据块,例如输入HTML的字段         形式,数据处理过程;

是的,您希望在统一界面中使用safe方法来支持您要共享的有效负载。 SEARCH可能最接近registered methods,但效果不理想。

  

如何在REST样式中正确建模此操作

你会如何将其作为一个网站?

您可能让客户开始使用一些bookmark;返回的表示将包含一堆链接,广告功能。表示中的语义允许客户端区分不同的链接,并找到它想要的链接。该链接将引导客户端表达一个或多个表单,并提供额外的语义提示,指导客户完成您为支持翻译而设计的集成协议。收集数据后,客户端会将表单提交到表单表示中指定的端点,这会将请求定向到您的翻译。

如果你这样做;但是使表示中的语义机器可读,你有自己的REST api。

注意:REST的难点在于没有提供URI,或猜测正确的HTTP方法。困难的部分是确保客户端实现和服务器实现相互分离。