【问题标题】:JSONAPI Delete RelationshipJSONAPI 删除关系
【发布时间】:2021-04-29 16:17:32
【问题描述】:

JSONAPI 规范指定删除关系的方式是通过带有以下正文的 PATCH 请求:

{ "data": null }

但是,我看不到任何使用 JSONAPI library by Google 的方法。

当我试图通过那个身体时,我得到了错误:

数据不是 jsonapi 表示

它来自源中的this line

问题是,我在unmarshalNodeUnmarshalPayload 中看不到任何处理datanull 的事实。此外,因为这是一个通用的recover,实际的错误是nil reference 错误,因为它假定data 与某些东西存在。

有没有办法用null 数据实际执行PATCH 请求?

【问题讨论】:

  • 我是否正确地假设您正在尝试使用关系链接更新一对一关系?
  • 这是一个 PATCH 请求,用于取消/删除一个有一个。更新很好,因为该实例中有一个请求正文。

标签: go json-api


【解决方案1】:

我对您引用的 GO JSONAPI 客户端库没有任何经验,但我知道有两种方法可以清除一对一关系,这意味着您可以使用第二种方法如果第一种方法不适合您,一种解决方法:

  1. 使用关系端点

Updating One-To-One Relationships 声明您可以使用 PATCH 请求更新关系到特定资源的 (/article/1) relationships 端点,即 /articles/1/ 关系/作者

在这种情况下,您可以使用上面提供的示例清除关系:

PATCH /articles/1/relationships/author
{ "data": null }

因此,虽然我假设您这样做是正确的,但您可能需要在使用 Google 的库时仔细检查您的路径以确保它是正确的。

  1. 使用普通端点

这是更新关系的另一种方式,您提供正在更新的资源的整个资源对象,而不仅仅是具有资源标识符对象的数据成员。虽然此方法似乎更适合一次更新多个关系或在同一请求中同时更新资源的关系和属性,但如果 Google 库在执行第一种方式时遇到问题,这可能是一个很好的解决方法。 This part of the spec 表明要在这种情况下更新关系,您需要使用 资源对象常规端点 发出 PATCH 请求作为主要数据。虽然规范提供的示例在这里没有显示清除关系的请求,但我认为它看起来像这样:

PATCH /articles/1
{
  "data": {
    "type": "articles",
    "id": "1",
    "relationships": {
      "author": {
        "data": null
      }
    }
  }
}

希望这对你有用。

祝你好运!

【讨论】:

    猜你喜欢
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2015-11-30
    • 2018-12-17
    • 2016-01-07
    • 2015-05-15
    • 2021-01-05
    相关资源
    最近更新 更多