我对前端GUI的REST API存在问题,我想知道哪种方法更好。这些类型的问题是否有任何设计模式?
uri: /users/list
response: [
{
id: "1",
name "Aaa",
surname "Bbb",
contactDetails: {
telephone: "111-111-111"
email: "mail@mail.pl"
}
},
...
]
OR
uri: /users/list
response: [
{
id: "1",
name "Aaa",
surname "Bbb"
},
...
]
uri: /emails/list?userIds=1,..
response: [
{
userId: "1",
email: "mail@mail.pl"
}
]
uri: /telephones/list?userIds=1,..
response: [
{
userId: "1",
telephone: "111-111-111"
}
]
对于单个用户来说也是如此:
uri : users/{id}
uri : users/{id}/emails
uri : users/{id}/telephones
==============扩展班级模型============================== === 下面我粘贴为问题需求而设计的JSON类。
SystemPart : {
id : "sp2",
name : "UserAdministration",
parentSystemPart : {
id : "sp1",
name : "Administration",
...
}
...
}
SystemPermission : {
permissionType : "MODERATOR",
systemParts : [ // list of SystemPart
{
id : "sp1",
name : "UserAdministration",
parentSystemPart:{...}
},
...
],
...
}
User: {
id : "u1",
name : "a",
surname : "b",
contactDetails : {
telephone : "111-111-111"
email : "mail@mail.com"
},
identityCard : {
idType : "Id",
number : "321"
}
systemPermissions : [ // list of SystemPermission
{
permissionType : "MODERATOR",
systemParts : [...]
},
...
]
}
MapPoint : {
id : "mp1",
x : 11.11,
y : 22.22,
createdBy : { // User
id : "u1",
...
systemPermission : [...]
}
}
GUI客户端希望仅使用其作者姓名和姓氏来显示地图点数据 现在是api的MapPoints列表
/map-points/list?x=11.00&y=22.00&d=5.0
GUI的其他部分希望获得具有其权限的用户列表
/users/list?page=0&size=5
在我看来,问题出现在地图点列表api中,JSON是大的
答案 0 :(得分:1)
我选择第一个方法。 User
课程非常小,而且我没有看到为联系方式单独拨打服务有什么好处。
确保客户端可以根据每个参数过滤结果,这样API的用户就可以轻松获得他/她想要的内容。
例如如果列表中的用户数量相对较少,/users/list
会收回所有完美的内容,并且急切地缓存所有这些都可以提高客户的效果
uri: /users/list
response: [
{
id: "1",
name "Aaa",
surname "Bbb",
contactDetails: {
telephone: "111-111-111"
email: "mail@mail.pl"
}
},
...
]
如果用户数量非常大,请确保可以根据每个(或至少是重要的名称)参数将列表过滤到少量,并且客户端可以为特定用户调用您的服务,并在需要时懒洋洋地加载它们。
uri: /users/list?surname=Bbb
或
uri: /users/list?id=1
应该回来:
response: [
{
id: "1",
name "Aaa",
surname "Bbb",
contactDetails: {
telephone: "111-111-111"
email: "mail@mail.pl"
}
}
]