我读过(以及其他)以下关于API设计的博客:https://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling。它帮助我更好地理解了很多方面,但我还有一个问题:
如何处理处理某些数据并直接提供响应的功能。想想,动词就像翻译,计算或充实。他们应该使用哪个名词,是否可以通过GET,PUT或POST调用它们?
P.S。如果它应该是GET,那么如何处理GET请求的最大长度
答案 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)
您应该从以下过程开始:
让我们来看看你的翻译示例。您可以决定源语言中的每个单词都是资源。这会给:
http://example.com/translations/en-fr/hello
可能会返回:
Content-Type: text/plain
Content-Language: fr
bonjour
如果您的进程长时间运行,您应该创建一个客户端可以POST到的请求队列,并为他们提供另一个(新)资源,他们可以查询该资源以查看该进程是否已完成。