当前位置: 首页 > 知识库问答 >
问题:

RESTful API在同一URI上的多个操作时

暴博远
2023-03-14
POST /apple HTTP/1.1
Host: www.example.com

<different combination of arguments>

所以我的问题是:
在这个苹果案例中,如何设计一组优雅的RESTful API,让后端轻松处理它。

共有1个答案

郁明诚
2023-03-14

首先,尽量避免将HTTP方法与CRUD操作混为一谈。我相信这是REST混乱的主要来源。HTTP方法不能像那样干净地转换为CRUD操作。我在这里有一个详细的回答:

S3 REST API和POST方法

简言之。

    null
GET /apple 

{"state": "whole",
 "self": "/apple"}
PUT /apple

{"state": "sliced"}
PATCH /apple

{"from_state": "whole", "to_state": "sliced"}
POST /apple

{"transition": "slice"}
  • PUT版本是幂等的,所以您的客户可以在需要幂等的时候选择使用它。
  • 修补程序版本保证客户端知道当前状态并尝试有效的转换。
  • POST版本是最灵活的,您可以做任何您想做的事情,但需要详细记录。您不能简单地假设您的客户会知道该方法是如何工作的。

只要您的资源实现理解当apple.state被更改为其他内容时,它应该检测发生了什么更改并执行适当的转换,您就完全与协议解耦了。用了什么方法并不重要。

我相信这是最优雅的解决方案,并使从后端处理一切变得更容易。您可以实现您的对象,而不必太担心协议。只要对象可以在状态之间转换,它们就可以被任何可以影响这些转换的协议使用。

 类似资料:
  • 我关心的是提高源代码可读性,并且它涉及到通过将庞大的方法分解成更小的(简洁的)方法来减小它们的大小。简单地说,我有一个非常完整的方法,它可以做很多不同的事情,例如: 我想将方法更改为: 我关心的是应用这种重构时的性能(时间和内存)。对于一个很小的人名单,当然不是问题,但是我担心的是这个名单的渐近增长。 例如,对于更老式的我可以看到以下影响: 我知道Java是如何将foreach指令转换为的。因此,

  • 这个问题类似于如何运行github操作步骤,即使前一步失败,但仍然无法完成作业,但接受的答案对我没有帮助,因为它会创建一个额外的作业。 下面我要做的是 当测试应用程序(步骤2)通过时;测试清理步骤应该运行,github操作工作流返回成功 当测试应用程序(步骤2)失败时;应运行测试清洁、行动松弛和失败行动步骤。github操作工作流返回失败 我如何修复下面的代码来实现它?

  • 我在textfile中有一个id列表=id1、id2、id3等 每个id都与repo中的csv dataframe相关联:“/home/data/”+idX+“/*.csv” 我试着做这样的事情却没有结果: 谢谢你的帮助

  • 问题内容: 我试图在相同的数据上有两个轴。 数据是一对。情节是a ,我有两个和一个。 对于y值,所有数据均以米为单位,我希望有一个轴以米为单位显示该轴,以英尺为单位显示该数据。现在,这感觉很普通,但是我无法决定最明显的方法。一种有效的方法是复制数据并以英尺为单位设置y值,然后添加另一个并完成该操作。 但是我认为,子类化或向其注入一些功能以缩放值会更明智。还是我应该采用第一种方法? 你怎么看? 问题

  • 我试图在相同的数据上有两个轴。 数据是两个。该图是,我有两个和一个。 所有的数据是以米为y值,我想有一个轴显示它在米和一个轴显示它在英尺。现在这感觉像是一件常见的事情做,但我不能决定最明显的方式来做它。一种可行的方法是复制数据,并在脚中使用Y值,然后添加另一个并使用它。 但是我认为更明智的做法是将子类化,或者在中注入一些功能来缩放值。还是我应该采用第一种方法? 你觉得呢?

  • 问题内容: 我正在尝试解析JSON文档,并在同一行上打印几个值。有没有办法获取以下文件: 然后吐出来: 我可以获得所需的值,但它们分别打印在不同的行上: 如果某处有一个示例说明如何执行此操作,那么我会感激任何提示。 问题答案: 您的示例中最简单的方法是将String Interpolation 与选项一起使用。例如 产生 您可能还需要考虑将值放入数组中并使用@tsv例如 产生制表符分隔的