0

我正在设计一个 REST API,在这个特定的用例中,试图找出最好的方法以及这个超媒体应该是什么样子。

场景是呼叫者打电话/persons?fields=lastName;filter=beginsWith=b是因为他想要返回一个姓氏以“b”开头的人的列表。

下面显示了我试图弄清楚如何最好地塑造/表示包括与之关联的超媒体的 JSON 响应。

您可以看到人员列表,而您只能看到 name 属性,因为它是每个人的部分表示。

然后我尝试在此处添加 HATEAOS,但不确定添加最有用的内容以及应该参考的内容。

我想好吧,我可以为我要返回的组(列表)本身提供一个 href。如果是这样的话,在哪里?我不认为像我正在做的那样把它放在根对象中是没有意义的。因为期望是返回一个人员列表,而不是一些根元对象,所以我对下面的内容感觉不好。

或者

有没有人认为在这个特定的实例中它没有用或没有真正接受 HATEOS,我应该在这里提供一些其他类型的 href 链接?

JSON - 返回的人员对象(表示)列表

[
    "meta": {
        "rel": "self",
        "href": "http://ourdomain.api/persons?fields=lastName;filter=beginsWith=b"
    },
    {
        "name": {
            "last": "best"
        }
    },
    {
        "name": {
            "last": "bettler"
        }
    },
    {
        "name": {
            "last": "brown"
        }
    }
]
4

1 回答 1

1

好吧,这确实是您的选择,但我认为如果您从可导航性中排除表示(即不提供指向它的链接),那么它不再是 HATEOAS(只是我的意见)。在我看来,您可以按照您在问题中提供的 json 的方式做一些事情,只需清楚地区分什么是调用的结果和什么是元信息:

{
  "meta": {
    "rel": "self",
    "href": "http://ourdomain.api/persons?fields=lastName;filter=beginsWith=b"
  },
  "resource" : [
    {
      "name": {
        "last": "best"
      }
    },
    {
      "name": {
        "last": "bettler"
      }
    },
    {
      "name": {
        "last": "brown"
      }
    }
  ]
}

这并不少见。另一种方法是在您返回的每个资源中提供指向列表的链接,其关系类似于parentor source(可能source更有意义,因为它是过滤查询),例如

{[
   { "name" : {
        "last" : "best"
        },
     "meta": {
        "rel": "source",
        "href": "http://ourdomain.api/persons?fields=lastName;filter=beginsWith=b"
       }
   },
   { ..and so on.. }
]}

毕竟,列表只是结果的一个容器,所以它会感觉更“干净”(至少对我来说)没有任何超媒体。

于 2015-08-28T07:29:15.493 回答