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

REST API,何时使用@PathParam、@QueryParam、@RequestBody和/或@RequestHeader

程智明
2023-03-14

我一直在试图找到一个答案,如果在何时/何时不使用上面的向REST调用传递信息的方法方面有某种标准的话。

我到处都在找,但每一个帖子都只讨论列出的方法中的2种,或者3种,而不是全部4种之间的区别。

共有1个答案

柯良骏
2023-03-14

1.@PathParam

PathParam通常用于使用资源的id获取资源。例如/employees/{emp_id}

通常,如果您没有通过id作为path param找到资源,那么它就是HTTP响应代码404。

注意:queryparam也可以用于其他操作,如sort。例如/departments/123/employees?sort_by=salary

通常它是一个http响应代码200,其中有一个空数组作为响应体,如果您没有通过搜索参数或筛选参数找到任何实体。

3.@RequestBody

为什么用http GET发送requestbody是个坏主意

为什么用http DELETE发送requestbody是个坏主意

下面是我们使用RequestBody的情况

A.状态突变

为了实现状态突变,通常实体所需状态的JSON/XML表示将以requestbody和post/put/patch动词发送。Rest原则没有提到json或xml,它可以是任何东西;它可以是压缩的二进制格式,如protobuf、avro、cap'n'proto、flatbuffers等,甚至也可以是纯文本。

B.读取操作(这些示例说明读取并不等同于HTTP GET)

>

  • A。为了避免looong URL--如果获取实体所需的参数太长,我们通常会使用请求体来发送它,而不是使用URL。Http协议或Rest原则不限制您的url大小,但有些浏览器对url的最大长度有限制。

    不同浏览器中URL的最大长度是多少?

    b.graphql-在这里,您将使用requestbody发布查询,以获取所需格式的数据

    c.安全原因--如果您必须发送机密数据(如密码/令牌)以获取某些数据,通常您将不得不将其发布在请求正文或报头中。(为什么?因为,如果它在url中,它很有可能最终出现在应用程序日志中)

    4.@RequestHeader

    一般用于发送元数据;而不是实际的实体主体(数据)。例如request-correlation-id、authheader、安全令牌等

    5.@MatrixParam、@CookieParam等

    在JAX-RS规范中还有其他不太流行的HTTP谓词,如@MatrixParam和@CookieParam。这是Jersey文档(请记住,Jersey是JAX-RS的参考实现,您可能在Spring中找不到类似的内容)

    何时使用@QueryParam与@PathParam

    @PathParam和@QueryParam之间有什么区别

    带有URL查询参数的HTTP POST--好主意还是不好?

  •  类似资料:
    • 问题内容: 我不是在问这里已经问过的问题: @PathParam和@QueryParam有什么区别 这是一个“最佳做法”或约定俗成的问题。 当你使用。 我能想到的决定可能是使用两者来区分信息模式。让我在下面说明我的LTPO-不够完美。 可以为信息类别保留PathParam的使用,它很好地属于信息树的一个分支。PathParam可用于向下钻取实体类层次结构。 而QueryParam可以保留用于指定属

    • 我不是在问这里已经问过的问题:@PathParam和@QueryParam之间有什么区别 这是一个“最佳做法”或惯例问题。 何时使用和。 我能想到的是,这个决定可能是利用这两者来区分信息模式。让我在下面举例说明我的LTPO-不够完美的观察。 PathParam的使用可以保留给information category,它很好地属于information Tree的一个分支。PathParam可用于向

    • 问题内容: 我试图过滤/修改Post和Put调用,以确保从HTML和JS代码中过滤出用户提供的所有参数,以防止XSS攻击。我想确保这是在API级别上实现的,因此无论使用什么客户端,它都将受到保护。 对于Jersey 1.x,可以通过实现ContainerRequestFilter并在将它们与请求的servlet匹配之前修改request.getQueryParameters()来实现。示例:htt

    • 看起来在这个话题上有一些问题,但许多问题现在已经过时,或者问的是不同的问题。 例如,我想做 我不想在 我有一个方法签名,它同时接受请求参数和请求主体(它是Kotlin,但我不认为这实际上有什么不同)。 我可以很好地访问RequestParam,但是RequestBody包含的不仅仅是我在body中发送的JSON,它包含了body和请求参数的合并。在上面的示例中,它将为body绑定输出以下内容 有没

    • 我使用spring boot 1.4.3.RELEASE来创建web服务,然而,在用,id属性为null 能不能请你指点一下,有没有我遗漏的。

    • 我尝试使用和通过Postman发送JSON和多个文件,但它不起作用。有可能在API中同时使用这两个注释吗?