【发布时间】: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