我偶然遇到了一个问题,我觉得随着时间的推移,情况越来越糟。我遇到的问题是,API-调用可能会给出相同的结果,但具有略有不同的属性,我遇到了一个问题,即如何使用@ngrx实现这一点。
示例:
- 我们有一个用户角色:
system user
。- 未登录的用户使用
/api/activities
获取活动 System user
使用/api/su/activities
来获取活动- 两个API调用都返回活动,但其中一个调用也返回属性
activity_categories
- 未登录的用户使用
- 在登录
SU
之前,他们使用/api/activities
获取活动,结果存储在存储中 - 然后
SU
登录,现在需要每个活动(activity_categories(的额外数据,并检查这些活动是否已经获取。如果是,则跳过API调用(/api/su/activities
( SU
现在得到一个错误,因为每个活动都缺少它们的类别(活动['activity_categories'](
那么,有什么聪明的方法可以绕过这一点吗?:(
对此有两种可能的解决方案。最简单的方法是忽略这些数据是"相同"的事实,并将两组不同的活动数据(一组是丰富的,另一组不是(作为完全独立的东西存储在状态存储中。
另一种选择是重构API以提供一个只返回活动的额外类别数据的端点(例如/api/su/activitiycategories
(,然后如果您已经在状态中有基本活动数据,则只调用第二个端点。然后,您可以使用额外的类别数据更新状态数据。
您可能需要在状态中存储一个标志(例如"activitiesEnrichedWithCategories"(,以控制是否需要执行该调用。在基本活动不存在的情况下,您需要同时执行两个调用以获取丰富的数据,或者调用/api/su/activitycategories/
端点。
第二个选项的实现要复杂得多,但如果有很多活动,那么可能值得付出额外的努力。