假设我的数据库中有以下表格(如果需要,我可以随意重新设计):
我想为这个数据库模式设计一个webservice接口 此Web服务的客户将能够提出以下问题:
此界面的功能/方法应该是什么?
使用此方案,获取主机的位置意味着进行两次调用 到了api:
h = gethost(id),
loc_id = h.location_id;
location = getlocation(loc_id);
我不喜欢这种方法是它强迫客户 api对API进行大量(异步)调用跟踪 在获得他想要的信息之前,对象的层次结构。
根据您的经验,这是最好的方法吗?
PS。如果您的解决方案涉及更改架构,我也很满意。
编辑:换句话说,我想要的是
之间的良好中间地带解决方案1:Web服务只有一个方法:query(String),它接受某种数据库查询语言(如SQL)中的查询。
解决方案2:Web服务为用户可能需要的每个可能的查询提供了一种方法:getUserWithAuthorization(user_id)getUser(user_id)getLocationOfHost(host_id)getAreasWithLocations(),... etc. #interfacebloatinghell。
答案 0 :(得分:0)
首先,删除所有动词(getResourceX)。
通常,您可以通过客户端可以执行单个调用并获取所有信息的方式来设计API,但也可以在更精细的级别上获取数据。
如果我正确地假设您从最大到最小子集的数据集是这样的: 领域 - >地点 - >主持人 - >授权 - >用户
所以这可以是你的资源URI
1接到电话到
api/areas
将返回所有区域及其所有位置以及每个位置的主机等。
如果您需要有关特定区域的信息,可以执行 1次呼叫至
/api/areas/{id}