为iOS App删除Items API(为API调用调用PHP)

时间:2014-04-17 18:42:49

标签: php ios api

这是我们目前的设置。我们有一个iOS应用程序,它对我的​​PHP脚本进行API调用,该脚本处理请求并通过PDO和MySQL查询数据库。因此,在这种情况下,有一个update_items.php API,iOS应用程序将参数值发送给用户,并根据用户是在更新项目还是删除项目,API会相应地处理它并多次查询数据库(所有请求都在一个请求中) )。

这就是我的困境。我有更新位工作,但如何使用相同的更新API通过POST请求删除项目?我的iOS开发人员提出的一个快速补救措施是,如果用户滑动删除某个项目,他会将该项目的名称发送为" DELETE"或类似的规定。这将启动数据库记录的删除查询。我不喜欢这样,因为任何人都可以解决这个问题并利用系统。例如,在编辑项目时,我所要做的就是输入DELETE作为项目的名称,API会像删除请求一样处理它。必须有更好的方法,我将不胜感激任何建议。下面是我当前处理API调用的PHP代码。但是,我的建议是在用户单击DONE以编辑其项目页面后同时发送两个API调用。一个是update.php,如果用户更新项目,另一个是delete.php,如果用户决定删除一个项目。

// now check for updating/deleting ingredients for the menu item 
if( isset($the_request['id']) ) {
    /* 
        iterate through avalialable values because there could be multiple ingredient ids involved. handle it. 
    */
    for( $i=0;$i<count($the_request['id']);$i++ ) {
        // the queries. check if ingredient is being deleted or not via passed paramater value
        switch($the_request['name'][$i]) {
            case 'DELETE':
                // assign passed parameter for delete query
                $params = array(
                    ':id' => $the_request['id'][$i]
                );
                // the query
                $query = 'DELETE FROM TABLE WHERE id = :id';
            break;
            default:
                // assign passed parameters for query
                $params = array(
                    ':name'  => $the_request['name'][$i],
                    ':price' => $the_request['price'][$i]
                );
                // Remove the empty values
                $params = array_filter($params, function($param) { return !empty($param); });
                // Build an array of SET parameters
                $set = array_map(function($key) {
                    return sprintf('%s = %s', substr($key, 1), $key);
                }, array_keys($params));
                // don't forget the id
                $params[':id'] = $the_request['id'][$i];
                // the query
                $query = sprintf('UPDATE TABLE SET %s WHERE id = :id', implode(', ', $set));
        }
        // prepare statement
        if( $ingStmt = $dbh->prepare($query) ) {
            $ingStmt->execute($params);
        } else {
            echo json_encode(array('error' => $dbh->errorInfo().__LINE__));
        }
    }
    $ingStmt->closeCursor();
}

1 个答案:

答案 0 :(得分:1)

REST回答是没有使用POST请求,请使用单独的DELETE请求。