php json 服务器,PHP:构建 JSON 数据接口的 Web 服务器

Table of Contents

前言

在应用开发的过程中,涉及网络,常常就需要通过一些 HTTP 请求从网上获取数据。很多网络服务器(Web server)提供了 URL 类型的 API,通过访问特定的 URL,就能从服务器返回数据,比如:

在浏览器访问上面这个链接,服务器就会返回数据。返回的数据类型有很多种,如:JSON,XML等。

本文旨在通过一个例子简要介绍这种服务器程序的构建,最终完成一个服务器程序,实现通过 URL 与服务器通信,服务器返回 JSON 格式的数据。

问题及需求分析

API

观察上面的 URL,我们可以发现它可以分为两个部分。

一是主机地址:http://api.openweathermap.org/data/2.5/weather。

二是参数:q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1。

主机地址和参数之间用 ? 隔开。参数又可以分为多个独立的参数。在这个 URL 中,共包含了两个参数,分别是 q 和 appid,等号后面是参数的值。

我们要做的是一个物联网温度传感器的后台服务器,即根据不同的 URL,返回温度数据或储存温度数据。

假设我们的 API 如下:

获取最近的一个温度数据 API:

http://localhost:8888/temperature.php?key=lsw&query=get

返回示例(JSON):

成功:{"status":true,"date":"2016-11-17 19:13:09","value":32.63}

失败:{"status”:false,”message”:”*"}

备注:”value” 的数据类型是 double

上传一个温度数据 API:

http://localhost:8888/temperature.php?key=lsw&query=set&value=27.1

返回示例(JSON):

成功:{"status":true,"message":"setting success"}

失败:{"status”:false,”message”:”*"}

URL 中的 temperature.php 就是我们即将编写的网页文件。key 和 query 是两个参数,在 query=set 时,还应带有 value 参数。返回的数据类型是 JSON,以 status 标志操作是否成功,以及附带有信息或数据。

JSON 数据

JSON 数据是可以带有数据类型的,如上面返回示例中的 value 是一个 double 类型的数据。

实现

本地服务器开发环境:MAMP

MAMP 是经典本地服务器环境的 Mac OS 软件。MAMP 这几个首字母代表苹果的 Mac OS 系统上的 Macintosh、Apache、MySQL 和 PHP。在 Windows 系统上也有相应的开发环境,WAMP。这里以 MAMP 为例进行说明。

MAMP 分免费版和专业版,我们目前只需要用到免费版。安装完成后运行,点击 Start Servers 就可以运行本地的服务器。默认的本地服务器地址是:http://localhost:8888。

在 MAMP 的 Preferences.. -> Web Server -> Document Foot 可以定位到服务器源文件目录。服务器的程序就保存在这个目录里。

后台数据库 MySQL

为了存储数据,服务器需要有一个数据库,并实现与数据库之间的通信。首先我们用 MAMP 运行本地的服务器,在打开的导航网页中打开数据库的管理页面。

423246ba8ebc

新建一个名为 temperatureData 的数据库,再新建一个数据表 temperature,并添加如下字段:

423246ba8ebc

这样就完成了数据库的配置,目前只需要储存温度信心,因此只配置这几个条目。

服务器程序

有了数据库,接下来就要写服务器程序了。服务器程序需要完成以下几个部分的内容:

连接数据库,与数据库通信,实现数据的读取与存储。

获取 URL 中的参数,根据不同的参数和参数值执行相应的操作。

封装要返回的信息,以 JSON 形式返回。

具体的程序如下,在关键的地方以注释的方式进行说明。

//函数:用于把数据封装为 JSON 格式

function echoJSON($withStatus,$andMessage){

$data = array('status' => $withStatus, 'message' => $andMessage);

$jsonstring = json_encode($data);

header('Content-Type: application/json');

echo $jsonstring;

}

// 配置数据库

$user = 'root';

$password = 'root';

$db = 'temperatureData';

$host = 'localhost';

$port = 8889;

$link = mysqli_init();

$success = mysqli_real_connect(

$link,

$host,

$user,

$password,

$db,

$port

);

$privateKey = "lsw";

if($success){

//与数据库连接成功后,获取 URL 中的参数值,根据参数执行相应的程序。如:$_GET["key"] 用于获取 URL 中 "key" 的参数值。

$key = $_GET["key"];

if($key == $privateKey){

$query = $_GET["query"];

switch ($query){

case "get":

$result = mysqli_query($link,"SELECT * FROM `Temperature`");

$row = mysqli_fetch_array($result);

$data = array('status' => true, 'date' => $row["Date"], 'value' => (double)$row["Value"]);

$jsonstring = json_encode($data);

header('Content-Type: application/json');

echo $jsonstring;

break;

case "set":

$value = $_GET["value"];

$valueDouble = (double)$value;

if($valueDouble){

mysqli_query($link,"DELETE FROM `Temperature` WHERE 1");

mysqli_query($link,"INSERT INTO `Temperature`(`Date`, `Value`) VALUES (CURRENT_TIMESTAMP,$valueDouble);");

$data = array('status' => true, 'message' => 'setting success');

$jsonstring = json_encode($data);

header('Content-Type: application/json');

echo $jsonstring;

}else{

echoJSON(false,"invalid value");

}

break;

default:

echoJSON(false,"unsupported query");

}

}else{

echoJSON(false,"invalid key");

}

}else{

echoJSON(false,"Connect Error: " . mysqli_connect_error());

}

// 关闭数据库连接。

mysqli_close($link);

?>

在服务器目录里新建一个 temperature.php 文件,将上述程序复制到文件中保存。用 MAMP 运行服务器,下面将检验我们服务器的配置情况。

{"status":true,"date":null,"value":0}

在浏览器中显示如下:

423246ba8ebc

完整的程序请看这里。

关于如何使用这个 Web 服务器完成物联网温度传感器,请参考:LOT|物联网 温度传感器。

有任何疑问的话,欢迎在下方评论区讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值