在研究 Faclor 路由器时,我非常喜欢 KeySets 的功能,它允许路由以任意组合匹配一组实体键,但这让我对路由排名感到好奇。
如果我有路线:"titlesById[{integers:titleIds}]['name','year']"
和另一条路线:"titlesById[{integers:titleIds}]['name']"
当我只请求name
密钥时,Falcor 路由器如何确定要使用的路由。我担心的是,当访问多个键而不是单个键时,您可能有更有效的数据访问策略。
在研究 Faclor 路由器时,我非常喜欢 KeySets 的功能,它允许路由以任意组合匹配一组实体键,但这让我对路由排名感到好奇。
如果我有路线:"titlesById[{integers:titleIds}]['name','year']"
和另一条路线:"titlesById[{integers:titleIds}]['name']"
当我只请求name
密钥时,Falcor 路由器如何确定要使用的路由。我担心的是,当访问多个键而不是单个键时,您可能有更有效的数据访问策略。
是和否。
它实现了路由优先级,含义如下:
特定键:4 个整数/范围:2 个键:1
所以['name', 'year']
和['name']
在优先级上是等价的。
但是你的规范有问题。路由器不允许相同优先级路由匹配相同路径。因此以下路径在优先级上是等价的,因此会在 Router 构造时引发错误。
{ route: 'titlesById[{integers:titleId}].name', get: ... },
{ route: 'titlesById[{ranges:titleId}].name', get: ... },
...
这将引发错误,因为范围和整数都匹配同一组传入数据(数字)并且它们都匹配相同的路由(titlesById、numbers、name)。这延伸到您的示例,您有两条路线匹配相同的路径,这不会发生(当然,除非一条路线与get
处理程序匹配,而另一条路线与处理程序匹配set
)。