【问题标题】:How should RESTful api handle tuple query string parameters?RESTful api 应该如何处理元组查询字符串参数?
【发布时间】:2019-09-02 19:55:07
【问题描述】:

我正在实现一个 GET 端点。端点需要获取一个元组参数列表。假设我有一个端点,它采用名称和年龄参数并进行一些过滤;

GET /users?name=jack&age=30

但是,端点需要支持多个元组参数。请记住,年龄参数是可选的。比如;

jack,30
matt,23
harry,NONE
mary,27
...

我打算做如下的事情。但不确定这是否是正确的方法。

GET /users?nameAgeFilters=name:jack age:30,name:matt age:23...

(注意:空格和半列会被编码)

这样做可以吗?否则,建议的方法是什么?

【问题讨论】:

  • 我认为这样做并没有什么坏处,只要您的应用程序在处理 URL 中的此类查询的方式上保持一致。您还可以选择发送一个名称数组和一个年龄数组,其中索引 0 处的所有元素都分组在一起,索引 1 处的所有元素等等。

标签: rest http get query-string


【解决方案1】:

取决于客户的能力。你可以使用JSON:

[{"name":"jack", "age":30},{"name":"matt", "age":23}]

然后base64对其进行编码并发送给服务器:

GET /users?nameAgeFilters=R0VUIC91c2Vycz9uYW1lQWdlRmlsdGVycz0=

然后在请求处理程序中对其进行解码并迭代JSON 数组。

伪代码:

JSONObject jsonObj = new JSONObject(base64decode(nameAgeFilters));
JSONArray filters = jsonObj.getJSONArray("");
iterate...

【讨论】:

    【解决方案2】:

    这样做可以吗?

    是的。它只是一个标识符,你可以使用任何你喜欢的拼写。

    关心您使用哪种拼写约定的原因:客户端是否容易发现 URI 模式并构造他们需要的 URI?当您关心 HTML 客户端时,application/x-www-form-urlencoded 键值对是一个很好的选择,因为 HTML 表单在其中内置了语义,可以准确地将这些信息传递给客户端。

    HTML 表单方法的概括是URI Template。该规范描述了在第 4 级应支持的键/值对的许多不同编码。

    【讨论】:

      【解决方案3】:

      如果年龄参数是可选的,您可以使用 @QueryParam 进行空控制。例如

      @GET
      @Path("/users")
      public Response getUsers(
          @QueryParam("name") String name,
          @QueryParam("age") int age
      ) {
          if(age!=0){
             //with age parameter stuffs
          } else{
             //without age parameter stuffs
          }
          return Response.status(200).entity("").build();
      }
      

      【讨论】:

        猜你喜欢
        • 2018-04-14
        • 1970-01-01
        • 1970-01-01
        • 2015-04-19
        • 2017-08-11
        • 2013-04-10
        • 2015-02-16
        • 2012-07-01
        • 2012-06-15
        相关资源
        最近更新 更多