如何创建一个接受字符串并执行数据库操作的php Web服务

我正在尝试创建一个PHP Web服务.我是PHP的新手.我有一个Java应用程序,它有2个字符串变量.这需要存储在Server数据库中以访问从服务器运行的php应用程序.所以我需要把它放在服务器上.所以我需要创建一个Web服务.是否可以将数据发送到Web服务?是否可以使用Web服务将数据写入数据库?
最佳答案
以下示例说明了PHP中的简单api / webservice(服务器和客户端)

如果需要一个java客户端(我只是看到有人评论它可能就是这种情况),那么你需要找到一种方法来以一种你可以用java处理它的方式来加扰响应.例如,如果您以javascript jQuery的形式与PHP通信. web服务的响应可能包含一个json响应,可以通过javascript进行搜索.我不熟悉java ..

开始吧

你描述自己想要的方式,你的问题有点奇怪.就我而言,Web服务是在服务器上运行的应用程序,它可以根据传入的请求(获取/发布/原始数据)处理操作.这些操作可以是获取数据,修改数据或注册数据.这也可以意味着有一个数据库或一个基于文本的文件来保存数据/从中获取数据.

如果这就是你的意思,那么是的……这是可能的.假设服务器a包含您的数据模型和操作列表add,get和n delete.您可能想要考虑的第一件事是为您的服务提供某种安全性.一个基本的安全示例是使用webserver-key.我通常使用随机的md5()生成的字符串.当然,这不是你可以采取的最好的安全措施,因为每个知道密钥的人都可以使用它,但我稍后会再回过头来看看.

除了访问您的网络服务器的安全性之外,还要考虑您希望发送数据的方式.您可以选择使用cURL向服务发送发布/获取请求,但这将包含所有打开的数据.另一个选项(稍微加扰一点)是在发送它之前进行序列化..更进一步你可能想要对你的字符串进行base64_encode.这至少会创建一个不可读的数据参数,并将其传输到您的网络服务器.在最好的情况下,您创建一个自定义密钥,该密钥可在webservice和de服务器上获得,该服务器与Web服务进行通信.此密钥对您的序列化参数进行加密,并可用于在Webapp的服务/用户端解扰响应/参数.

现在我们知道还有另一台服务器从我们的Web服务请求数据,我们还可以在“webservice密钥”中添加另一层安全性.对您的Web服务的每个请求都会发送一些参数(如$_SERVER [‘REMOTE_ADDR’]),这些参数可用于将密钥与服务器IP或域主机配对.这会限制可能访问您服务的用户数量.

现在,一个非常基本的例子怎么样?

首先是webservice.您可以使用OO方式处理基于参数的传入请求,但您也可以使用纯PHP文件:

http://www.webservice.com/api-contacts.php

>必需参数:动作
>可选参数:id&名称

使用$_GET [‘action’] =’get’和$_GET [‘id’] =’2’向api.php发送请求很可能会返回包含ID为’2’的联系人的响应.

要请求此数据,有几个选项.最基本的是file_get_contents或cURL.我认为cURL会更好,因为您可以更改更多选项以获得您想要的内容.

考虑到这是客户端上的脚本:

$param = array();
$param['action'] = 'get';
$param['id'] = 2;
$params = base64_encode(serialize($param)); // generates a scrambled string

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.webservice.com/api-contacts.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLTOP_POSTFIELDS, 'data='.$params);
$result = curl_exec($ch);
curl_close($ch);

当然,api-contacts.php将首先对$_POST [‘data’]字符串进行base64_decoding,然后对结果进行反序列化:

$data = unserialize(base64_decode($_POST['data']));

然后进行一些检查:
– $data [‘action’]有效吗?
– 如果是:是找到所需的参数(id为delete / get,name为add)
– 如果是:执行字段检查(有效名称,有效ID)
– 如果是:插入,删除或获取结果
– 如果是:返回响应

例如,响应也是一个数组

$response = array(
  'result' => 'success',
  'data' => mysql_fetch_assoc($getUser) // obviously this is just to illustrate there's userdata in the 'api-contacts.php?action=get&id=2' request.
);

最后但同样重要的是,不要忘记反序列化& base64_decode客户端的$result字符串.

这是我如何实现一个简单的Web服务来跨不同服务器上的域共享数据的基本解释.当然,我对其他人的各种改进和提示持开放态度.

//小插件:

我对序列化和base64编码响应的原因是因为数组不能作为文本响应发送,序列化字符串也可能在客户端收到时导致问题.

序列化& base64编码的参数不是必需的,它只是通过http协议传输数据时的一点点额外的安全性.只使用CURL_OPTPOSTFIELDS作为’?action = get& id = 2’就可以了!或者您可能希望该服务使用友好的URL并创建URL www.webservice.com/api-contacts/get/2.

作为响应类型,有一些常见的事情:
1)XML响应
2)JSON响应
3)base64_encoded序列化数组

但是,在某些情况下,简单的文本响应“ok”就足够了.或者您可能希望构建您的Web服务以理解HTTP标头响应,例如’200 OK’.

转载注明原文:如何创建一个接受字符串并执行数据库操作的php Web服务 - 代码日志