我正在构建API以允许API的客户端发送通知以提醒用户更新订单状态。到目前为止,有两个通知:
我想构建此API,以便扩展到与订单相关的其他通知,但为此API的客户端保留一个简单的URI。 如何定义我的资源以保持我的API RESTFul?
我在考虑使用其中一种结构:
选项1 :
POST: /api/ordernotification/receive/{id}
POST: /api/ordernotification/complete/{id}
选项2(省略资源中的状态并将其发布):
POST: /api/ordernotification/?id={id}&statusID={statusID}
修改
选项2.1(保留明确的URI,如@Jazimov所建议的):
POST: /api/ordernotification/{statusID}/{id}.
哪个选项更合适?一种选择对另一种选择有什么好处吗?或者还有其他我没想过的选择吗?
答案 0 :(得分:1)
如果我理解正确,您有两种类型的ordernotifications
:用于通知receive
的用户和用于通知complete
的用户。如果这些是两个独立的数据模型,那么我认为嵌套它们是一个好主意(即一个名为ReceiveOrderNotification
和CompleteOrderNotification
的表。如果是这种情况,那么您可能希望完全公开两个不同的端点,例如POST /api/receiveordernotification
和POST /api/completeordernotification
。
但我不认为这是你能做的最好的,因为订单通知之间可能有很多重叠的相似之处。现在,选项2更像是GET
,因为您正在使用查询参数,因此使用您的第一个选项让我们将它们折叠为:
POST: /api/ordernotification/
然后传递一些JSON数据来创建通知
{
"orderId": "orderId",
"userId": "userId",
"prompt": "not marked received/not marked done"
}
我还删除了/{id}
,因为当你POST
创建一个全新的东西时,通常还没有创建id。即使客户端正在创建id
并将其发送到API,最好将其保持打开状态,以便您的API能够以自己的方式处理创建新的独特资源。
这是RESTful,因为POST
会创建包含特定数据点的资源ordernotification
。您的第一个选项使操作本身成为资源,但可能未在后端的任何数据模型中表示。为了尽可能地保持REST,您的API端点应该代表数据库域(表,集合等)。然后,让您的控制器根据请求中发送的数据选择要使用的服务方法。否则,REST端点会预先公开所有逻辑,并成为一长串不可维护的端点。
答案 1 :(得分:1)
我会沿着这些方向去做一些事情
__main__
以后可以通过
访问multiprocessing.forking.Popen
或者
<?php
if(isset($_POST['submit']))
{
if(empty($_POST['word'])) {
echo "<center>Title do not match. Please insert the correct title.</center>";}
else
{
if(isset($_POST['word']) && !empty($_POST['word']))
{
require 'config.php';
$word = $_POST['word'];
$query="SELECT * FROM data WHERE word LIKE '%" . $word . "%'";
$sql = $conn->query($query); ?>
<?php if(!$sql)
{
echo "<center>No Record</center>";
}
?>
<table class="table table-bordered table-hover table-striped">
<tr>
<td width="258" align="center" class="style5">TITLE</td>
<td width="170" align="center" class="style5">MENTION</td>
</tr>
<?php
if($sql ==true)
{
while($row = $sql->fetch_assoc())
{
$dataID = $row['dataID'];
?>
<tr>
<td style="text-transform:uppercase" align="center">
<a href="admindisplay.php?id=<?php echo $row{'dataID'}?>">
<span style="text-transform:uppercase"><?php echo $row{'word'};?></span>
</a>
</td>
<td style="text-transform:uppercase" align="center">
<span style="text-transform:uppercase"><?php echo $row{'mention'};?></span>
</td>
</tr>
<?}}
else
{?>
<tr>
<td colspan=2>Results Not Found.</td>
</tr>
<?}?>
</table>
<?php
}
}
}
?>
对URI的语义丰富程度没有实际限制,所以你也可以利用它并明确。
答案 2 :(得分:0)
我认为,要更新已插入记录的状态,您的端点应该是PUT而不是POST。
您可以使用
PUT: /api/ordernotification/:id/status/
使用客户端json数据
{
"status": "your_status"
}
根据请求数据,端点应该更新记录。