Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有关系的RESTful API_Rest_Api_Join_Relationship_Many To One - Fatal编程技术网

具有关系的RESTful 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,并使用它们拉入所

假设我正在为一家餐厅构建API,并且我拥有以下资源:

甜甜圈(有巧克力,有果酱)

收据(成本、甜甜圈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