具有关系的RESTful API
假设我正在为一家餐厅构建API,并且我拥有以下资源:具有关系的RESTful API,rest,api,join,relationship,many-to-one,Rest,Api,Join,Relationship,Many To One,假设我正在为一家餐厅构建API,并且我拥有以下资源: 甜甜圈(有巧克力,有果酱) 及 收据(成本、甜甜圈id) 我的Web应用程序将要显示一个收据表,供经理查看。不幸的是,receipt对象本身不够有用,管理员需要查看donut是否有巧克力 如何最好地做到这一点?我可以想到3种实现: 1) 加入并使用has\u chocolate附加字段返回收据资源 2) 加入并返回收据资源,其中包含甜甜圈对象,该对象包含所有相关的甜甜圈信息 3) 拉入一页收据对象,收集并消除重复的甜甜圈id,并使用它们拉入所
甜甜圈(有巧克力,有果酱)
及
收据(成本、甜甜圈id)
我的Web应用程序将要显示一个收据表
,供经理查看。不幸的是,receipt
对象本身不够有用,管理员需要查看donut
是否有巧克力
如何最好地做到这一点?我可以想到3种实现:
1) 加入并使用has\u chocolate
附加字段返回收据
资源
2) 加入并返回收据
资源,其中包含甜甜圈
对象,该对象包含所有相关的甜甜圈
信息
3) 拉入一页
收据
对象,收集并消除重复的甜甜圈id
,并使用它们拉入所需的甜甜圈
对象-一次一个/donut/id
,或一次全部/donuts?id=id1、id2,id3
RESTful API应该具有解析为资源或资源集合的端点。然后可以在该端点上执行HTTP谓词,在本例中是GET。因此,您需要决定如何为API用户定义资源
在SQL中是否有两种资源,即甜甜圈和收据?
是否要将甜甜圈定义为具有收据作为其中一个字段的资源
这两种方法都可以,问题是当你开始创建一个资源“上面有额外的东西”的路由时。这对消费者来说开始变得难以理解,也变得不安
如果是我,我会选择选项3
- 为甜甜圈和收据的集合定义两个独立的端点:
和/v0/donuts/
/v0/receipts/
- 允许消费者通过公开必要的过滤器加入客户端
/v0/donuts/?ids=1,2,3,8
/v0/events//
路线,但考虑到用例是始终获得一批甜甜圈,这将导致消费者往返太多
听起来您还想对这些集合进行分页。在这种情况下,您应该定义一个max\u page\u size
,default\u page\u size
,并在响应中返回客户机一个next\u page
字段(如果是最后一页,则为空)。您还必须决定分页内容,在本例中可能是id