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

问题描述 投票:2回答:1

如果在何时/何时不使用上述将信息传递给REST调用的方法,我一直试图找到答案。

我一直在寻找各地,但每个帖子只讨论两种列出的方法之间的差异,或3,而不是所有4。

java spring rest spring-boot restful-architecture
1个回答
6
投票

1. @PayParam

PathParam通常用于使用它的id访问实体。例如。 /employees/{emp_id}

通常,如果您没有通过它的id作为路径参数找到实体,那么它就是HTTP响应代码404。

2. @QueryParam

QueryParam通常用于使用除id之外的任何其他字段来访问实体。想想“搜索”或“过滤”而不是使用“id”来到达实体。在这种情况下,您将不得不期望一组实体作为响应,而不像您将获得的单个实体作为发送id作为pathParam的响应

防爆。 /employees?firstname=joe

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

通常它是一个http响应代码200,如果没有通过搜索参数或过滤器参数找到任何实体,则将空数组作为响应主体。

3. @RequestBody

通常它是一个POST,PUT或PATCH http动词,我们将用它来发送请求者。

Why it's a bad idea to send requestbody with http GET

Why it's a bad idea to send requestbody with http DELETE

国家突变

为了实现状态变异,通常json / xml表示实体的所需状态将作为requestBody与POST / PUT / PATCH动词一起发送。 Rest原则没有说json或xml,它可以是任何东西;它可以是压缩的二进制格式,如protobuf,avro,cap'n'proto等,甚至也可以是纯文本。

READ操作(这些是READ不等同于HTTP GET的示例)

  • 一个。为了避免Loooong Urls - 如果获取实体所需的参数太长,我们通常会使用请求体来发送它,而不是使用url。 Http Protocol或Rest原则并不限制您的网址大小,但是某些浏览器限制了网址的最大长度。 What is the maximum length of a URL in different browsers? 湾graphql - 在这里,您将使用requestbody发布查询,以获取所需格式的数据 C。安全原因 - 如果您必须发送密码/令牌等机密数据来获取某些数据,通常您必须将其发布在请求正文或标题中。 (为什么?因为,如果它在url中,很可能最终会出现在应用程序日志中)

4. @RequestHeader

通常用于发送元数据;不是实际的实体(数据)。例如。 request-correlation-id,authheader等

5. @Matrixparam,@ CookieParam等

在JAX-RS规范中还有其他不那么受欢迎的HTTP动词,如@Matrixparam和@CookieParam。这是Jersey documentation(请记住,Jersey是JAX-RS的参考实现。你可能会或可能不会在Spring中找到相同的/等效的)

其他有趣的相关链接

When to use @QueryParam vs @PathParam

What is the difference between @PathParam and @QueryParam

HTTP POST with URL query parameters -- good idea or not?

How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?

© www.soinside.com 2019 - 2024. All rights reserved.