【问题标题】:PHP and basic RESTful services; GET requesting all records vs one recordPHP 和基本的 RESTful 服务; GET 请求所有记录与一条记录
【发布时间】:2016-04-21 23:21:14
【问题描述】:

我的 PHP 课程有一个涉及 RESTful 服务的项目,我们在其中设置了如下基本服务:

$request = $_SERVER["REQUEST_METHOD"];
switch($request) {
    case 'GET':
        $user = $acctReader->read($_GET["username"], $_GET["password"]);
        if (isset($_GET["id"]) && $user == true) {
            // echo method to return single record from db after validating that $user is an account in a separate table
        } elseif (!isset($_GET["id"] && $user == true) {
            // echo method to return ALL records from db
        }
    case 'POST':
    case 'PUT':
    case 'DELETE':
    default
}

我正在让 GET 响应用户验证,这样如果他们输入有效的用户名/密码但 明确请求单个 id,他们应该看到所有记录
这是我的 html 的一部分:

<form action="TaskService.php" method="GET">
        <label for="username">Username</label>
        <input type="text" name="username" id="username" required/><br />
        <label for="password">Password</label>
        <input type="password" name="password" id="password" required/><br />
        <label for="id">Task ID</label>
        <input type="text" name="id" id="id" placeholder="optional"/>
        <input type="submit" name="getTask" value="GET TASK"/>
</form>

我能够验证我的第一个条件(输入用户名、密码和 id)它返回一个值。但是,当我没有传入 id 时,我无法让它给我所有记录。
关于我应该在哪里进行更改的任何想法?

【问题讨论】:

  • 返回所有记录的方法在哪里?
  • 我不知道您在这里的确切使用情况,但如果请求中未发送某些数据,您似乎将返回所有用户。我不确定这是一个好主意,因为 1)如果您的用户数据库变得足够大,那么您将移动大量数据,并且 2)您基本上是在公开整个用户数据库。如果浏览器可以看到所有用户,那么其他人也可以。
  • @GordonM,是的,这很有意义。就我上面的问题而言,这仅与我的班级有关。我们只学习了非常 REST 的基本概念以及它的工作原理。这绝对不是现实世界意义上的优雅解决方案,但它的主要目的是作为起点

标签: php rest get


【解决方案1】:

$_GET["id"] 将被设置,即使它是空的。您将不得不选择我们

if (!empty($_GET["id"]) && $user == true) {
    // echo method to return single record from db after validating that $user is an account in a separate table
} else {
    // echo method to return ALL records from db
}

或者

if (isset($_GET["id"]) && $_GET["id"] != '' && $user == true) {
    // echo method to return single record from db after validating that $user is an account in a separate table
} else {
    // echo method to return ALL records from db
}

但当字段可能包含时,请注意使用empty()

  • 0(0为整数)
  • 0.0(0 作为浮点数)
  • “0”(0作为字符串)

因为这些都被认为是空的

See the manual

【讨论】:

  • 感谢@RiggsFolly,完全间隔使用empty()
猜你喜欢
  • 2016-03-09
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 2011-11-02
  • 2010-12-16
  • 1970-01-01
  • 2018-11-29
  • 2021-10-08
相关资源
最近更新 更多