【问题标题】:Buliding an API using php and json使用 php 和 json 构建 API
【发布时间】:2014-07-28 21:30:15
【问题描述】:

我有以下通过 json 显示数据库记录的脚本。效果很好。

我的问题是我如何使用它创建一个安全的 API,以便当用户放置 api 时说 http://www.waco.com/profile.php?id=0990999&security=xxxxxxxxx 在他们的网站上, 它将从我的服务器中提取信息并将其显示在他们的网站上。下面是整个工作代码

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
$(document).ready(function(){
    var formhtml =  "logreq=1";
    var postURL= 'profile.php';
    $.ajax({
        type: "POST",
        url: postURL,
        data: formhtml,
        dataType: JSON,
        success: function(html){
            var output= '<table class="logtable"><tbody><thead><th>Log</th><th>Username</th><th>Date</th><th>Event</th></thead>';
            var logsData = $.parseJSON(html);
            for (var i in logsData.logs){
                output+="<tr><td>" + logsData.logs[i].title + "</td><td>" + logsData.logs[i].user + "</td><td>" + logsData.logs[i].date+ "</td><td>" + logsData.logs[i].log+"</td></tr>";               
            }
            //write to container div
            $("#log_container").html(output);
        },
        error: function (html) {
            alert('Oops...Something went terribly wrong');
        }
    });
});
</script>
</head>
<body>
    <div id="log_container">

    </div>
</body>
</html>





<?php
    $db = mysqli_connect("localhost","root","","profile_database");
    //MSG
    $query = "SELECT * FROM logs LIMIT 20";
    $result = mysqli_query($db, $query);
    //Add all records to an array
    $rows = array();
    while($row = $result->fetch_array()){
        $rows[] = $row;
    }
    //Return result to jTable
    $qryResult = array();
    $qryResult['logs'] = $rows;
    echo json_encode($qryResult);

    mysqli_close($db);
?>

我需要帮助。

【问题讨论】:

  • 我认为您想要的是生成一个供人们提取包含其数据的 JSON 字符串的提要。由他们以特定方式将其放置在他们的网站上。如果嵌入式代码是您所追求的,那么这不是实现它的方法。

标签: php json


【解决方案1】:

我假设您的示例过于简单化,并且您将研究防止 SQL 注入以及任何其他验证以确保您获得预期的数据。

话虽如此,我会将您的 PHP 代码放在一个单独的文件中,供用户调用并将您的代码放入其中,如下所示:

if(isset($GET['id']) && isset($GET['security'])){
  $id = $GET['id']; $secure = $GET['security']; // TODO: escape these strings

  $db = mysqli_connect("localhost","root","","profile_database");
  //MSG
  $query = "SELECT * FROM logs LIMIT 20 Where id = $id And security = $secure";
  $result = mysqli_query($db, $query);
  //Add all records to an array
  $rows = array();
  while($row = $result->fetch_array()){
    $rows[] = $row;
  }
  //Return result to jTable
  $qryResult = array();
  $qryResult['logs'] = $rows;
  echo json_encode($qryResult);

  mysqli_close($db);
}

希望对您有所帮助。 This 是一个很好的起点。我还会研究像 CodeIgniterCake 这样的 PHP 框架,它们将帮助您正确构建 API。

【讨论】:

  • 非常感谢。我想我可以使用 PDO 来对抗 SQL 注入,使用 htmlentities/htmlspecialchars 来对抗 xxs 攻击。我的问题是我可以发送给我的用户以放置在他们的站点中的结果 API 是什么,以便能够从我的服务器中提取信息。我只是困惑。谢谢
  • 如果我理解正确的话,“结果 API”是包含安全访问数据库的代码的 PHP 文件。您还缺少某种身份验证机制,可让您确定该用户是否有权访问数据。还记得你的网址吗?那必须是包含服务器端代码并​​连接到数据库的 PHP 文件。
  • 你给用户链接,他们用 URL 字符串插入他们的信用:your_site.com/yourPHPFile.php?id=myId&secrurity=email 或类似的东西。然后,如果他们在您的系统中,他们就会取回他们的数据。
  • 我必须给他们这个链接以及例如waco.com/profile.php?id=0990999&security=xxxxxxxxx
  • 连同上面html文件头部和主体中的ajax代码
猜你喜欢
  • 1970-01-01
  • 2017-11-15
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 2011-10-29
相关资源
最近更新 更多