设计一个宁静的服务

Posted

技术标签:

【中文标题】设计一个宁静的服务【英文标题】:Desgining a Restful service 【发布时间】:2013-06-08 21:36:08 【问题描述】:

假设我正在设计一个 Restful 服务,它给定 2 个整数编号返回它的总和。 在这种情况下,没有要读取、创建、更新或删除的资源。 所以,如果我设计类似 GET /sum/first/33/second/44 的东西,它不符合 REST 标准,因为 'sum' 是一个动词,而应该有一个名词代表资源名称。 那么,调用 sum 的 API 调用应该是什么样子。

请帮我设计。

【问题讨论】:

【参考方案1】:

如果您关心的是名词还是动词,请使用“summation”而不是“sum”。就参数而言,我认为您应该提供所有要汇总的数字,例如。 /summation/1,2,3,4 或 /summation/1+2+3+4。

【讨论】:

谢谢,但“求和”仍然不是资源。 “sum”是您已经定义的资源吗?我认为总结应该是一种行动,而不是一种资源。您可以定义类似 /numbers/1,2,3,4/summation 的内容,其中 summation 是一个动作,您可以在其中解析提供的参数“1,2,3,4”,添加它们并返回结果。 我不确定 /numbers/1,2,3,4/summation 是否符合 REST 架构 Deepak,您可以在查询字符串中传递参数,例如。 /numbers/summation?num=1,2,3,4。如果您不想使用逗号分隔的数字,那么您可以执行 /numbers/summation?firstNum=1&secondNum=2&thirdNum=3&forthNum=4 等等。为了使这个更漂亮,您的 url 可以重写为 /numbers/summation/1/2/3/4。在我之前的示例中,即 /numbers/1,2,3,4/summation,我的意思是说 /numbers/:listOfNumbers/summation 其中 :listOfNumbers 将保存要添加的数字(当然它看起来不漂亮),为什么你说不符合REST架构? @DeepakGarg BTW:“sum”只是“summation”的缩写,两个词都是名词和动词,名词代表应用动词的结果。比如“我在洗衣服”。在这种情况下,洗涤是一个名词。【参考方案2】:

REST 没有说明您的 URL 应该是什么样子。老实说,您可以拥有任何想要的东西:例如,GET /hdueqixp 返回“77”。

我,我喜欢简短、不言自明的 URI。我会使用/sum/33+44。您没有在请求 URL 中包含操作参数,因此不必担心动词与名词。这适用于仍在做GET /users/deepak?action=delete 之类的事情并期望删除资源的人。

【讨论】:

谢谢 Nicholas,它有帮助。 @DeepakGarg 实际上,我刚刚意识到,如果您在 URL 中包含一个加号,sum 这个词是多余的,并且它由您的 API 定义为求和。您也可以轻松拥有/33+44/result/33+44

以上是关于设计一个宁静的服务的主要内容,如果未能解决你的问题,请参考以下文章

wcf 宁静服务中的长时间计算

ACID 如何在宁静的微服务架构中工作

宁静的网络服务 415

为什么日本的网页设计风格还停留在90年代?

使用按钮单击调用宁静的服务

使用 OKHttp 获取我的宁静服务响应 null