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

阅读时长 4 分钟读完

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

纠错
反馈