【问题标题】:REST API for multiple consumers面向多个消费者的 REST API
【发布时间】:2019-01-18 09:56:30
【问题描述】:

例如:我们有一个为多个消费者提供数据的 REST API。最常见的情况是:前端(所有人都可以访问)、管理员/管理(仅限管理员)、移动应用。

这些在 REST API 提供的响应数据方面有所不同。例如,在管理员请求中,API 应回复用户的电子邮件。在前端没有。或者移动应用程序不应接收不必要的数据,这些数据不会显示在视图中。

我的想法是在 REST API 之前设置适配器,但如果您没有多个可用域(例如 api.xyz.com、api-manage.xyz.com),这将不起作用。

我认为这是大多数应用程序都需要的常用方式。我不想构建多个 API 来涵盖这种情况。

在应用程序端有什么方法吗,例如中间件?或者我知道有一种基于角色的方法,但我认为这不够抽象,因为角色不决定它是哪个设备。

有一个小解决方案: 基于角色的决定用户可以检索哪些字段。此外,消费者必须放置一个标头或查询参数,如“frontend”、“admin”、“mobile”,以确定将返回哪些数据。这与“用户能够”无关。只是为了优化。

还有其他解决方案吗?

【问题讨论】:

  • 你听说过graphql吗?使用 graphql,客户端可以控制 api 返回的数据。这意味着您还需要一个 graphql 服务器和一个客户端。这听起来很适合您关于“客户控制数据”的问题陈述。
  • @AndyDufresne 很高兴知道!它也安全吗?因为中间的人可以伪造 graphQL 并获取不是为他制作的数据。我认为,第二个实现在起作用:REST API 应该只提供这些字段,允许用户查看,而与他使用的平台或设备无关。
  • 你是对的。虽然 graphql 没有具体说明如何实现授权,但是我们could 添加了它。阅读 graphql 根据您的业务需求提供的其他 advantages

标签: rest api architecture


【解决方案1】:

您的 API 不应该了解您的客户,但它应该为客户提供做他们想做/需要的事情的可能性。假设您需要显示包含详细信息的产品列表。在桌面上你可能会带来 100 个产品,但在移动设备上只有 10 个。所以 api 需要提供可配置的分页。此外,在桌面上,您可能会获得比在移动设备上更多的信息。因此,如果您有一个实体产品,在桌面上您将获得所有字段(例如多个属性),但对于移动设备,您只获得名称和一个属性(例如价格)以最小化有效负载大小。 所以 API 需要是通用的,但要让客户可以根据自己的需要使用它。

【讨论】:

  • 当然,分页、排序、过滤一般都会由API提供。但我认为带有字段的查询参数或类似的东西是可能的,但我也认为它对客户来说很难看,总是指定他想要消费的字段?
  • @Bohus Andrei 和 dothem - 我同意使用其余 api 进行配置会使服务器和客户端实现变得复杂。在为这个问题陈述应用像 graphql 这样的解决方案时,您发现了什么问题?
猜你喜欢
  • 2015-09-03
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 2014-02-14
  • 2019-12-12
相关资源
最近更新 更多