如何为用于设计计算器服务的REST API建模

时间:2019-06-08 14:58:21

标签: rest web-services

我一直在阅读有关设计面向客户的REST服务API的最佳实践。例如,我们应该使用名词来命名所有公开的URI。此外,这些动词应遵循HTTP命令的语义。例如,GET请求永远不要修改资源,而应该在这里使用PUT请求。面试时有人问我这个问题,但我不能令人满意地回答这个问题。我正在设计一个计算器,它提供以下功能,对两个操作数进行加,乘,除,减。我如何遵循REST原理向客户端公开这些方法。这些操作使用什么URI?而且我不确定是否将添加操作映射到GET,PUT或POST。其他操作相同(除法,乘法等)。这里有什么指导方针?

3 个答案:

答案 0 :(得分:1)

我认为REST一词的一个问题是,它对不同的人可能具有不同的含义。采访者可能对REST有不同的理解。当出现这种情况时,我的第一个倾向是尝试弄清楚REST对他们意味着什么。他们是说超媒体吗?他们是否关心您所说的正确使用动词和名词?或者他们认为REST只是一些返回JSON的HTTP端点。所有这些都是可能的。

我认为我倾向于回答以下问题:

GET /add/1/2
GET /multiply/5/6
etc..

答案 1 :(得分:1)

  

这里的指导原则是什么?

您将如何使用网站?

任何时候有人问您关于REST的问题时,这应该是您的第一个试探法。 REST是
architectural style,专为“跨越多个组织的基于网络的长期应用程序”而设计。这种建筑风格的参考应用程序是万维网。

  

我正在设计一个提供以下功能的计算器,对两个操作数进行加,乘,除,减。我如何按照REST原理向客户公开这些方法。

客户端需要掌握三项信息,这些信息需要传递给服务器-操作和两个操作数。在网络上,收集此类信息的常用方法是提供一种表格。在这种情况下,它可能是操作的下拉列表,以及几个接受数字的文本控件。因为纯函数是safe,所以我们可能会使用GET作为表单方法。因此,HTML处理规则将采用表单描述的值,并将其转录为查询部分中的键值对。

因此网址看起来像

/22520c7f-6207-490e-99c9-bd1bb37f4056?op=add&firstArg=6&secondArg=9

关键的概括是认识到HTML表单正在扮演URI Template的角色-服务器将模板传递给客户端,客户端填写详细信息并将结果用作请求的目标

这意味着如果您想用其他某种媒体类型替换HTML,则需要指定URI模板的描述,一些描述可接受范围的机制以及合理的默认值。

  

用于这些操作的URI是什么?

使用REST吗?绝对没关系。这就是重点–客户端将URI视为不透明值。

URI只是标识符;您可以将它们视为程序中的变量名。这些机器只是不在乎拼写是什么(只要这些拼写与RFC 3986一致)。

由于拼写无关紧要,因此您可以使用任何碰巧的本地拼写约定。很多人喜欢“可破解的” URI,标识符的拼写将有用的信息传达给人类读者。

URI是resources的标识符; “任何可以命名的信息都可以是资源”。这会激发一些“名词而不是动词”的噪音-资源是网页,文档,图像,脚本或……“资源”的概念刻意含糊,因此可以灵活地使用。 / p>

  

我不确定是否将添加操作映射到GET,PUT或POST。

关键在于查看客户端请求的语义。每当您要执行的是查询/查找时,只要计算机可以为用户自动执行某些操作即可,那么您正在查看安全的语义,并且该方法很可能是GET或HEAD(特殊情况)。

如果我们要服务器更改其自身资源的表示形式,那么PUTPOST就会发挥作用。

在这种情况下,所有这些操作都只是在进行查找,因此GET是合适的。

(要注意的一件有趣的事是,这些操作都不依赖于服务器状态;它们是纯函数。因此,使用code on demand(使用javascript或某些合理的替换服务)为客户端服务可能很有意义-并使用客户端的处理器执行计算,而不是在网络上进行一堆往返操作。

答案 2 :(得分:1)

其他比我经验更多的人都回答了实现此目的的好方法的例子。

我只想指出这是一个非常好的问题。我正在读理查德·泰勒(Richard Taylor)和UC Irvine的其他人的论文。理查德·泰勒(Richard Taylor)当时是罗伊·菲尔丁(Roy Fielding)的顾问,当时菲尔丁(Fielding)在其博士论文中描述了REST。在比较REST和SOAP的讨论中,本文包括以下内容:

” ......服务语义与内容语义越接近,服务就具有丰富的REST API的可能性就越大。

...

REST和SOAP之间的区分可能反映出缺乏设计指导;怎么能 并非以内容为中心的服务,例如拍卖竞标 ...以REST一致的方式干净地构造?”

当他们说“更接近内容”时,它们表示服务看起来更像最终用户要检索的一些动态或静态信息,而不是服务看起来像是为用户主动执行某些功能或计算的东西

他们继续提供有关此问题的其他指导-但我还没有读完这篇论文,因此,我将让您自己进行查找。 :-)

在网上搜索以下内容:从表示形式到计算形式: Web体系结构,Richard N. Taylor,UCI

相关问题