业务逻辑和 restful API 设计
Business logic and restful API design
假设我们有一个简单的 API 允许客户端获取特定类型的项目列表:
GET /items/foo
GET /items/bar
GET /items/blah
响应是请求类型的项目列表,每个条目都有一个唯一的 ID。
客户端通常会在 table/grid/etc.
中显示这些项目
现在,我们必须在客户端中实现固定功能,以便另一个 API 允许 pinning/unpinning 基于项目的 ID 和类型的项目。因此,我正在与我的同事讨论通知客户哪些项目已固定或未固定的可能性。
一个选项是让另一个 API GET /pinning/{type}
到 return 指定类型的所有固定项目的列表。
另一个解决方案是使用类似于 API GET /pinning/{type}
到 return 所有固定项目的 ID 列表。让客户自己解决。
第一个方案被采纳。他们的论点是后端负责业务逻辑,客户端不应该参与业务逻辑,因此客户端应该只显示从服务器接收到的数据。这个论点对我没有说服力。我认为服务器应该在这种情况下提供允许客户端执行额外表示逻辑的数据。
哪种解决方案更好?或者还有哪些其他可能的解决方案?
如果服务器只 return ItemIds 在 GET /pinning/{type}
,客户端将不得不重复调用类似 GET /items/{itemId}
的东西来获取它可以在 [=20] 上显示的数据=],对吧?这反过来只会增加服务器的负载。如果 id 就足够了,您可能可以摆脱建议的解决方案。由于客户端和服务器似乎都在同一个保护伞下(因为在您的公司中也是 API 消费者),您有足够的信息来做出决定。
即使它是一个有很多客户的 Public API 我仍然会沿着 returning 项目的路线而不仅仅是 itemIds - 可能以分页方式,出于性能原因。
假设我们有一个简单的 API 允许客户端获取特定类型的项目列表:
GET /items/foo
GET /items/bar
GET /items/blah
响应是请求类型的项目列表,每个条目都有一个唯一的 ID。 客户端通常会在 table/grid/etc.
中显示这些项目现在,我们必须在客户端中实现固定功能,以便另一个 API 允许 pinning/unpinning 基于项目的 ID 和类型的项目。因此,我正在与我的同事讨论通知客户哪些项目已固定或未固定的可能性。
一个选项是让另一个 API GET /pinning/{type}
到 return 指定类型的所有固定项目的列表。
另一个解决方案是使用类似于 API GET /pinning/{type}
到 return 所有固定项目的 ID 列表。让客户自己解决。
第一个方案被采纳。他们的论点是后端负责业务逻辑,客户端不应该参与业务逻辑,因此客户端应该只显示从服务器接收到的数据。这个论点对我没有说服力。我认为服务器应该在这种情况下提供允许客户端执行额外表示逻辑的数据。
哪种解决方案更好?或者还有哪些其他可能的解决方案?
如果服务器只 return ItemIds 在 GET /pinning/{type}
,客户端将不得不重复调用类似 GET /items/{itemId}
的东西来获取它可以在 [=20] 上显示的数据=],对吧?这反过来只会增加服务器的负载。如果 id 就足够了,您可能可以摆脱建议的解决方案。由于客户端和服务器似乎都在同一个保护伞下(因为在您的公司中也是 API 消费者),您有足够的信息来做出决定。
即使它是一个有很多客户的 Public API 我仍然会沿着 returning 项目的路线而不仅仅是 itemIds - 可能以分页方式,出于性能原因。