我想遵循最佳实践来实现REST API。我想公开一种资源,我可以想到将其用作端点的两种方法。
我想让用户有机会获得某个广告系列的所有付款。
我可以公开/campaigns/{id}/payment
,它返回分页的付款清单,其中包含每个付款人的所有数据(姓名,地址,日期...)。 /campaign/{id}
依次返回广告系列的所有数据(名称,说明...,paymentId
的数组,以及逐一获取它们的路线)。
或者我可以公开/payments/campaigns/{campaignsId}
。
什么是最好的方法,为什么?
答案 0 :(得分:1)
假设REST关心URI的拼写是一个误解。
但是,我建议您在URI中为您的API采用一致的命名约定。 一种通用方法是对URI使用使用复数名词来引用集合并组织URI以表示层次结构。
因此,对于您在问题中描述的情况,可以使用/campaigns/{id}/payments
来标识您的资源。它标识特定广告系列的付款集合。
答案 1 :(得分:1)
我之所以使用<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js " integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo " crossorigin="anonymous "></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js " integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49 " crossorigin="anonymous "></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js " integrity="sha384-o+RDsa0aLu++PJvFqy8fFScvbHFLtbvScb8AjopnFD+iEQ7wo/CG0xlczd+2O/em " crossorigin="anonymous "></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.21.0/moment.min.js" type="text/javascript"></script>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css" integrity="sha384-Smlep5jCw/wG7hdkwQ/Z5nLIefveQRIY9nfy6xoR1uRYBtpZgI6339F5dgvm/e9B" crossorigin="anonymous">
<!--Font Awesome (added because you use icons in your prepend/append)-->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<body>
<div class="col-sm-4 input-group">
<div class="input-group-prepend">
<div class="input-group-text">
<i class="fa fa-search"></i>
</div>
</div>
<input type="text" class="form-control">
</div>
</body>
,是因为它传达了客户端在使用/campaigns/{id}/payments
查询此URL时客户端可以期望的响应内容,这是最常见的做法。
GET
读起来很像“用GET /camapaigns/{id}/payments
给我所有的广告费用”。因此,这遵循最小惊讶原则。而且,客户端然后可以准确地获取所请求的内容。
如果您想了解更多有关RESTful API的信息,请使用API design guide。