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

我应该同时实现PUT和修补程序路由吗?

夏烨霖
2023-03-14

我试图了解putpatch之间的区别。如果需要创建更新资源的路由,例如user,是否应该同时实现putpatch

如果可以使用patch部分更新资源,为什么要使用put

共有1个答案

马德宇
2023-03-14

我正在尝试学习PUT和patch之间的区别。

从“它们怎么一样?”

PUT和PATCH都在远程创作上下文中使用;我们使用那些消息语义来告诉服务器使它自己的某个资源的表示形式看起来像我们的本地副本。

例如,如果我想更改我的网站首页的标题,我可以

GET /home.html

将当前版本加载到HTML编辑器中。然后我可以对我的本地副本进行更改。为了释放我的更改,我向服务器发送一条消息“使您的副本像我的副本一样”。

使用PUT,请求的有效负载是我的文档版本的完整副本。我将整个文档发送回服务器进行处理。

另一方面,如果您的文档较大(相对于HTTP头的大小),并且您的更改较小,那么补丁文档将小于完整的表示形式;如果网络足够可靠,较小的请求可能比可重复的请求有更好的投资机会。

当然,您最灵活的做法是支持这两种方法,并在响应OPTIONS请求时描述这两种方法以及您支持的补丁格式的媒体类型。允许客户端根据自己的本地上下文选择适当的方法。

补丁比PUT要求更多的兼容性,因为客户端和服务器都需要理解相同的补丁媒体类型(除了理解表示本身的媒体类型之外)。

如果你正在做一些非常具体的事情,那么一般的指导方针可能就不适用了。

例如,如果您要实现一个用于json:api客户机的json:api,那么您将希望使用PATCH,因为json:api在PUT的使用上有一个非常特殊的位置,application/vnd.api+json指定了如何将其用作补丁文档。因此,客户机和服务器理解相同补丁表示的担忧“消失”了。

 类似资料:
  • 我正在开发两个REST API,它在我的后端编辑和暂停一些东西。对于编辑,我使用的是: 什么是最好的方法开发暂停视频服务。我应该为此使用还是?输入将只是ID。如果我使用,那么如何区分编辑和暂停呢?如果我有另一个API需要开发,例如:视频重启,我如何在REST API中容纳这些动词?

  • 我对PersondTo有以下定义: 下面是一个示例记录: 现在,无名氏离婚了。所以我需要向这个URL发送补丁请求: 我想不出该怎么做。以下是我到目前为止所做的尝试: 以下是上面的问题: 1)由于我只设置了MaritalStatus,其他字段都将为null。因此,如果我打印出请求,它将如下所示: 请欣赏那些编写客户机应用程序的人提出的使用Spring的RESTTemplate使用Restful we

  • 问题内容: 因此,我正在编写一个框架,我希望以此为基础来开发一些我正在使用的应用程序(该框架在那里,所以我有一个可以使用的环境,并且该系统可以让我使用例如一个登录) 我要创建这个框架,并且它的应用程序都使用面向资源的体系结构。 现在,我想创建一个URL路由类,该类可以由APP编写器(也可能由CMS App用户)扩展,但我想通过查看以下方法找出最佳方法:其他应用程序如何做到这一点。 问题答案: 我更

  • 我试图通过使用Play1xx正确制作的教程,但我使用的是Play2.3.5。旧项目已在project/文件夹中build.scala。新的play 2.3.5仅在项目的根目录中有build.sbt。当我试图在project子目录中创建一个新文件build.scale时,确实会出现错误。问题是,我如何将以下设置从旧项目的build.scala设置到我的build.sbt,而不必费心创建以将build

  • 有很多类似“REST vs SMTH”的比较(例如vs Kafka,vs JSON-RPC),但我也看到了JSON-RPC和JSON补丁之间的许多相似之处--它们都指定了操作/方法、值/参数,并允许执行批处理请求。我看到的唯一区别是,JSON-RPC还用ID和错误描述响应格式,因此看起来更加成熟。但也许它们只是有不同的优点和缺点,不同的合适用例?

  • 所以我正在学习Comparator和Comparable,我有以下问题。我有一门课: 另一个类Name实现了可比较的,在构造函数中有两个String。我不完全理解的是比较器的功能,我读过Java留档,我知道它用于对元素进行不同的排序,而不改变我的例子中的名称类它也可以在某些情况下允许空值,但是这个我的类构造函数中的声明工作正常,我根本不需要在PhoneBook类中实现比较器接口: 并实现了我希望它