最佳实践(?):每个资源一个ResourceAssembler或每个资源集一个ResourceAssembler

我正在研究基于REST API的应用程序。该应用程序管理一些复杂的数据,而我正在通过API公开这些数据。

我不想一直收集所有数据,因此我拥有同一资源的不同版本。一个处理最少约10%用例所需的最少数据的数据库。然后是包含所需字段的典型集合的版本,它将覆盖所有情况的约80%,然后是“完整”版本,其中包含与资源关联的所有数据。这涵盖了其余10%的用例。 请注意,资源是等效的,因为这些版本中的每一个都使用HATEOAS公开所有数据或使用实际数据。因此,最低版本在字面上仅包含极少的数据,其余数据通过链接存在。与典型版本相似。完整版中包含所有数据。

应用程序是使用Spring Boot及其中的REST支持以Java编写的。我正在使用ResourceSupport,并且ResourceAssembler类处理这些资源。

这是我的问题:您将如何分解ResourceAssembler?

您是否已针对每种资源类型定义了一个ResourceAssembler,所以在这种情况下,应使用三个不同的ResourceAssembler?还是您只有一个ResourceAssembler,它具有三个函数,分别返回资源的每个版本?

资源示例,我知道json的格式不是100%正确,但这只是为了说明概念。

典型值:

{
    "long":1
    "name": {
        "firstname":"John"
        "lastname":"Doe"
        "middleInitials":null
    }
    "home": {
        "street1":"Mainstreet"
        "street2":null
        "zip":"123-456"
        "city":"Gotham"
        "country":"USA"
    }
    "spouse": {
        "long":2
        "name": {
            "firstname":"Jane"
            "lastname":"Doe"
            "middleInitials":null
        }
        "address": {
            "street1":"Mainstreet"
            "street2":null
            "zip":"123-456"
            "city":"Gotham"
            "country":"USA"
        }
    }
    "_links": {
        "employer":{
                    "href": "http://localhost:8080/companies/887456"
               },"children":{
                    "href": "http://localhost:8080/persons/1/children"
               },"work":{
                    "href": "http://localhost:8080/addresses/12288522"
               },"self":{
                    "href": "http://localhost:8080/persons/1"
               },"persons":{
                    "href": "http://localhost:8080/persons"
               }
    }
}

最低:

{
    "long":1
    "_links": {
        "name":{
                    "href": "http://localhost:8080/names/509679243"
               },"spouse":{
                    "href": "http://localhost:8080/persons/2"
               },"address":{
                    "href": "http://localhost:8080/addresses/45888457"
               },"_links": {
        "employer":{
                    "href": "http://localhost:8080/companies/887456"
               },"persons":{
                    "href": "http://localhost:8080/persons"
               }
     }
   }

}

完整

{
    "id":1
    "name": {
        "firstname":"John"
        "lastname":"Doe"
        "middleInitials":null
    }
    "home": {
        "street1":"Mainstreet"
        "street2":null
        "zip":"123-456"
        "city":"Gotham"
        "country":"USA"
    }
    "work": {
        "street1":"Mainstreet"
        "street2":null
        "zip":"123-456"
        "city":"Gotham"
        "country":"USA"
    }
    "spouse": {
        "id":2
        "name": {
            "firstname":"Jane"
            "lastname":"Doe"
            "middleInitials":null
        }
        "address": {
            "street1":"Mainstreet"
            "street2":null
            "zip":"123-456"
            "city":"Gotham"
            "country":"USA"
        }
    },"children": [
        {
            "id":3
            "name": {
                "firstname":"William"
                "lastname":"Doe"
                "middleInitials":null
            },},{
            "id":4,"name": {
                "firstname":"Marrie"
                "lastname":"Doe"
                "middleInitials":null
            }
        },]
    "employer": {
        "id":887456
        "companyname":"ACME"
        "boss": {
            "id":6
            "name":{
                "firstname":"Ronald"
                "lastname":"McDonald"
                "middleInitials":"H.M."
            }
        }
    }
    "_links": {
        "self":{
                    "href": "http://localhost:8080/persons/1"
               },"persons":{
                    "href": "http://localhost:8080/persons"
               }
    }
}

我想知道你的看法。

伊万

cj1987fdsgsg 回答:最佳实践(?):每个资源一个ResourceAssembler或每个资源集一个ResourceAssembler

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2830337.html

大家都在问