设计用于返回多个对象计数的 REST api

Posted

技术标签:

【中文标题】设计用于返回多个对象计数的 REST api【英文标题】:Designing REST api for returning count of multiple objects 【发布时间】:2017-01-18 07:15:57 【问题描述】:

鉴于我需要返回应用程序中不同对象的计数,我应该如何设计我的 rest api 有一个问题。有多种方法可以考虑

    定义一个通常接受请求正文 (json) 中的对象标识符并返回响应中每个对象标识符的计数的 api。缺点是 api 太通用了,因为没有资源,所以可能不够安静。该网址看起来像 GET /counts

    为需要计数的每个资源定义单独的 api。假设我需要返回软件、表、流程、任务、作业等中定义的字段的计数,我将为这些资源中的每一个定义单独的 api。它看起来像 GET /field/count 或 GET /table/count。这样做的一个副作用是,我们需要计算的每个资源都会有许多 web api。这很糟糕吗?

请分享您对上述方法以及我可以设计符合 REST 标准的 API 的任何新方法的想法。

谢谢

【问题讨论】:

为什么要使用不同的 API 进行计数?什么是计数数据的驱动力?如果它是用于 UI - 一次只有一个?还是所有信息都应该同时提供? 据我所知,并不存在完全的“REST 标准”,“RESTful URL”的概念几乎是一个主观问题。核心 REST WS 原则主要关注其他事情,其中​​包括正确使用 HTTP 并提供理论上可以允许自动进程“理解”资源和 API 的信息(这在常见的“restful”接口中很少实现)。话虽如此,我会选择第二个变体,因为它更自然(即资源是有区别的) - 但是如果你的资源是“计数”,那么第一个也可以工作。 是的,一次返回所有信息会更好。网址应该是什么样的? “算作资源”是什么意思?还有其他方法吗? What’s the best RESTful method to return total number of items in an object?的可能重复 【参考方案1】:

这完全取决于使用 API 的客户端。

案例 1。如果它是一个需要在单个页面上计算多个表的 WebApp,那么两者都会导致糟糕的设计,您将不得不为计数数据进行数百次调用。您可以在单个 API 中计算计数并将其作为响应发送。

案例 2。如果客户单独使用计数,那么我建议使用明确定义资源的第二种方法。对于第二种方法,您正在使客户端变得智能,这是不推荐的。

正如 cmets 中所述,REST 是一个完全主观的话题,因此每个设计都可以有多个观点。

【讨论】:

以上是关于设计用于返回多个对象计数的 REST api的主要内容,如果未能解决你的问题,请参考以下文章

REST API返回结果对象设计

用于检索对象集基数的 REST API

对 Wordpress REST API 的 POST 请求返回一个空对象

在微服务 REST api 调用中返回对象列表是不好的做法吗?

从 REST API 客户端返回一个通用的 swift 对象

实体模型或 Pojo 类作为 REST API 的返回对象