在CRNK中过滤双向关系

时间:2019-11-07 00:33:56

标签: rest json-api crnk

我正在玩crnk,试图推断出我在文档中找不到的位。我将在标准crnk示例中解释我的问题:https://github.com/crnk-project/crnk-framework/tree/master/crnk-integration-examples/spring-boot-example

项目与任务之间存在一对多的关系(其他资源无关)。如果我正确理解它(该示例使用显然不推荐使用的- (void)drawRect:(CGRect)frame { [super drawRect:frame]; if (self.viewModel == nil) return; NSAttributedString *string = [self.viewModel arabicStringWithTajweed]; CGRect originalRect = [self convertRect:self.arabicLabel.frame fromView:self.arabicLabel]; [string drawInRect:originalRect]; } @JsonApiRelation参数),则关系的所有者为1Task.project1。我现在要列出按相关资源的某些属性过滤的资源。例如。这按预期工作(从响应中保留了一些不重要的位):

opposite

但是无法进行相反的过滤:

GET http://127.0.0.1:8080/api/tasks?filter[project.id]=121

{
  "data" : [ {
    "id" : "1",
    "type" : "tasks",
    "links" : {
      "self" : "http://127.0.0.1:8080/api/tasks/1"
    },
    "attributes" : {
      "name" : "Create tasks",
      "description" : null
    },
    "relationships" : {
      "project" : {
        "data" : {
          "id" : "121",
          "type" : "projects"
        }
    }
  } ]
}

这在资源设置下是否可以预期(请参见上面的链接)?如果是,必须做什么才能使过滤在两个方向上都能起作用?

1 个答案:

答案 0 :(得分:0)

当前,这是存储库必须处理的事情,一种实现方法是使getter / setter变为双向,因此Task.setProject会将其自身添加到Project.tasks。

恕我直言,我认为这是存储库应该处理的事情,而不是内置在crnk引擎中的东西。从REST的角度来看,资源的POST / PATCH / DELETE不应接触相关资源。这将推迟对存储库的响应以进行那些查找。但是也许有可能为内存处理提供一些内置的支持。该问题与内存存储库有关。例如在JPA情况下,SQL会处理它(这也可能提供解决方案)。