RESTful API 设计中的条件查询(Filtering)

RESTful API 是一种基于 HTTP 协议的 Web API 设计风格,其核心理念是资源和 CRUD(Create、Read、Update、Delete)操作,即通过 URI 定位资源,并通过 HTTP 请求方法来实现 CRUD 操作。而条件查询是在查询资源时,按照某些特定条件进行筛选,只返回满足条件的资源,是 RESTful API 中常见的操作。本文主要讲解 RESTful API 中的条件查询以及如何有效地设计和使用它。

概述

条件查询包括查询参数(query parameter,也称查询字符串 query string)和过滤器(filter),其中查询参数是指通过 URI 传递的参数,用于限制资源的数量和排序方式;过滤器是指通过其他方法(如 HTTP 请求体)传递的参数,用于根据特定条件检索资源。在 RESTful API 设计中,常见的查询参数包括:

  • page:用于分页,设置查询的页码号;
  • per_page:每一页的资源数量;
  • sort:资源排序,指定资源排序的属性和方式;
  • fields:资源筛选,指定返回的属性列表;

而过滤器则是通过特殊的查询参数来实现,即在 URI 中添加一个特定的查询参数,例如 ?gender=male&age=18,来进行性别为男性,年龄为 18 的筛选。下面是一个基本的 URI:/users?gender=male&age=18,其中 /users 是资源名称,? 表示查询开始,gender=maleage=18 是查询参数,表示只返回性别为男性且年龄为 18 的用户信息。

设计原则

RESTful API 中条件查询的设计应该遵循以下原则:

声明性

条件查询应该是声明性的,即通过查询参数和过滤器明确指定查询条件,而不是使用代码逻辑来过滤和排序。这样做可以简化客户端代码,提高可读性和可维护性。同时,声明性的条件查询也可以使查询参数和过滤器的实现更加容易,不会受到代码逻辑的影响。

一致性

条件查询应该与其他 RESTful API 操作保持一致,例如使用标准的 HTTP 请求方式(GET、POST、PUT、DELETE 等)。同时,应该使用标准的查询参数和过滤器,如上述的 pageper_pagesortfields 等。这样可以使 API 更加清晰和易于理解,从而提高用户体验。

灵活性

条件查询应该具有一定的灵活性,允许用户进行多种不同的查询。例如,用户可以根据不同的属性值进行筛选,或使用不同的比较操作符(如等于、大于、小于等),或使用逻辑操作符(如 AND、OR 等)进行复合查询。同时,查询参数和过滤器也应该支持多个值的情况,如 genres=action&genres=comedy 表示同时返回动作和喜剧类型的资源。

实例

以下是一个基本的查询用户 API,支持分页、排序、筛选功能:

--- --------------------------------------------

其中 sort 表示按照姓名排序,name=tim 表示只返回姓名为 Tim 的用户,page=2 表示当前页是第二页,per_page=10 表示每页返回 10 条用户信息。

如果要同时返回男性和女性用户,可以使用逻辑操作符 & 来连接两个查询条件,例如:

--- --------------------------------

上述代码表示返回既是男性用户又是女性用户的所有资源信息。如果要使用比较操作符,如大于和小于,可以使用特定的查询参数,例如:

--- ------------------------------

上面的查询表示返回年龄在 18 到 35 岁之间的所有用户信息。除此之外,查询参数还可以支持多个值的情况,如:

--- ----------------------------------

上面的查询表示同时返回动作类型和喜剧类型的资源。

结论

条件查询是 RESTful API 中常见的操作,能够根据特定条件检索并筛选资源。在设计 RESTful API 的时候,应遵循声明性、一致性和灵活性的原则进行设计,使得用户能够更容易地使用和理解该 API。同时,应该使用标准的查询参数和过滤器,如分页、排序、筛选等,从而提高 API 的可读性和可维护性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67383686317fbffedf0ee7c1