REST API:如何处理处理逻辑

时间:2016-12-23 10:34:51

标签: rest api-design

我读过(以及其他)以下关于API设计的博客:https://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling。它帮助我更好地理解了很多方面,但我还有一个问题:

如何处理处理某些数据并直接提供响应的功能。想想,动词就像翻译,计算或充实。他们应该使用哪个名词,是否可以通过GET,PUT或POST调用它们?

P.S。如果它应该是GET,那么如何处理GET请求的最大长度

3 个答案:

答案 0 :(得分:2)

这实际上是关于命名比功能更多的讨论。它很可能在您的API中处理逻辑,您只需要注意命名它。

虚构的API时间。它获得了这个资源:/v1/probe/{ID},它响应GET,POST和DELETE。

假设我们想要启动我们的探测器,然后希望探测器将我们观察到的物体的计算通量变化(完全由物质组成)给我们。虽然它不是真实的,但我们可以说这必须在飞行中计算。我的一位勇敢的队友决定在GET /v1/1324/calculateflux进行计算。

如果我们遵循真正的REST-ful做法......哎呀。突然间,我们没有处理名词,是吗?如果我们GET /v1/probe/1324/calculateflux我们已经破坏了RESTful实践,因为我们现在要求动词 - calculateflux

那么,我们该如何应对呢?

您需要重新考虑名称calculateflux。这并不好 - 它没有在探针上命名资源。 **在这种情况下,/v1/probe/1324/fluxvalue是一个更好的名称,/v1/probe/1324/flux也可以。

为什么?

RESTFUL API几乎只在其URI中使用名词 - 请记住,每个URI都需要描述一个特定的东西,你可以获取POST PUT或DELETE等等。 这意味着只要存在已处理的值,我们就应该为资源提供已处理(或计算)值的名称。这样,我们通过坚持始终当前的数据来保持RESTful(我们可以我们随时重新计算Flux值,并且我们没有改变探测器的状态(我们没有使用GET保存任何值)。

答案 1 :(得分:0)

好吧,我可以告诉你,我知道这件事。

GET           // Returns, JUST return  
DELETE        // Delete 
POST          // Send information that will be processed on server
PUT           // Update a information 

此架构适用于laravel框架。阅读ref

中的链接会非常有趣

价: https://rafaell-lycan.com/2015/construindo-restful-api-laravel-parte-1/

答案 2 :(得分:0)

您应该从以下过程开始:

  1. 识别系统中的资源(名词)。
  2. 他们都应该回应GET。
  3. 让我们来看看你的翻译示例。您可以决定源语言中的每个单词都是资源。这会给:

    http://example.com/translations/en-fr/hello
    

    可能会返回:

    Content-Type: text/plain
    Content-Language: fr
    
    bonjour
    

    如果您的进程长时间运行,您应该创建一个客户端可以POST到的请求队列,并为他们提供另一个(新)资源,他们可以查询该资源以查看该进程是否已完成。