我正在创建一个REST服务,允许用户使用翻译集合中的预定义翻译将输入转换为所需的输出。
为了管理翻译定义,拥有用户可以操作的翻译资源似乎很自然,例如:
但是,我不确定如何模拟执行/请求将输入转换为输出的行为。
我当前的设置是我对特定翻译发出POST请求,输入作为该请求的主体。请求的响应包含转换的输出:
对我来说POST方法似乎不对,因为我没有在系统中创建资源,我只是在执行转换而不是改变系统的状态。然而,POST方法很方便,因为它允许我发送一个请求主体(GET请求不应该这样做)。
那么:我如何在REST风格中正确建模此动作
答案 0 :(得分:2)
对于你正在做的事情,对我来说POST方法似乎不对,因为我没有在系统中创建资源
POST fine 。来自RFC 7231
POST方法请求目标资源根据资源自身的特定语义处理请求中包含的表示。例如,POST用于以下功能(以及其他功能):
o提供数据块,例如输入HTML的字段 形式,数据处理过程;
是的,您希望在统一界面中使用safe方法来支持您要共享的有效负载。 SEARCH可能最接近registered methods,但效果不理想。
如何在REST样式中正确建模此操作
你会如何将其作为一个网站?
您可能让客户开始使用一些bookmark;返回的表示将包含一堆链接,广告功能。表示中的语义允许客户端区分不同的链接,并找到它想要的链接。该链接将引导客户端表达一个或多个表单,并提供额外的语义提示,指导客户完成您为支持翻译而设计的集成协议。收集数据后,客户端会将表单提交到表单表示中指定的端点,这会将请求定向到您的翻译。
如果你这样做;但是使表示中的语义机器可读,你有自己的REST api。
注意:REST的难点在于没有提供URI,或猜测正确的HTTP方法。困难的部分是确保客户端实现和服务器实现相互分离。