我正在研究基于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"
},
"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"
}
}
}
}
完整
:{
"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"
}
}
}
我想知道你的看法。
伊万