gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 22:56:08 25 4
gpt4 key购买 nike

我正在尝试创建一个php web服务。我是php新手。我有一个Java应用程序,它有2个字符串变量。这需要存储在服务器数据库中,以便访问从服务器运行的php应用程序。所以我需要把它放到服务器上。所以我需要创建一个web服务。是否可以将数据发送到Web服务?是否可以使用web服务将数据写入数据库?

最佳答案

下面的示例演示了php中的一个简单api/webservice(服务器端和客户端)
如果需要一个java客户端(我只是看到有人评论了可能的情况),那么您需要找到一种方法,以一种可以用java处理的方式来扰乱响应。例如,如果您以javascript jquery的形式与php通信。webservice的响应很可能包含一个json响应,javascript可以理解这个响应。我不熟悉Java。
让我们开始吧
你的问题在描述你想要什么方面有点古怪。就我而言,web服务是运行在服务器上的应用程序,它可以根据传入的请求(get/post/raw data)处理操作。这些操作可以是获取数据、修改数据或注册数据。这也可能意味着需要一个数据库或一个基于文本的文件来保存数据/从中获取数据。
如果这就是你的意思,那么是的。有可能。假设服务器A包含您的数据模型和操作列表addget和ndelete。你首先要考虑的是你的服务的安全性。一个基本的安全示例是使用webserver密钥。我通常使用一个随机的md5()生成的字符串。当然,这不是你能接受的最好的安全措施,因为每个知道钥匙的人都可以使用它,但我稍后再讨论这个问题。
除了访问web服务器的安全性之外,还要考虑您希望的数据传送方式。您可以选择使用curl向服务发送post/get请求,但这将包含所有打开的数据。另一个选择(稍微混乱一点)是在发送之前序列化。再往前一步,您可能希望对字符串进行base64编码。这至少会创建一个无法读取的数据参数,并将其传输到Web服务器。在最好的情况下,您可以创建一个自定义密钥,该密钥可在与webservice通信的webservice和de服务器上使用。此密钥会扰乱序列化参数,并可用于解扰webapp的服务/用户端的响应/参数。
现在我们知道有另一个服务器从我们的webservice请求数据,我们还可以向“webservice key”添加另一层安全性。对webservice的每个请求都会发送一些参数(如$_SERVER['REMOTE_ADDR']),这些参数可用于将密钥与服务器ip或域主机配对。这将限制可以访问您的服务的用户数量。
现在,一个非常基本的例子会是什么样子?
首先是webservice。您可以使用oo方法处理基于参数的传入请求,但也可以使用普通php文件:
http://www.webservice.com/api-contacts.php
必需参数:操作
可选参数:id&name
使用$_get['action']='get'和$_get['id']='2'向api.php发送请求很可能会返回包含id为“2”的联系人的响应。
对于请求此数据,有几个选项。最基本的是文件获取内容或卷曲。我认为卷曲是更好的,因为有更多的选择,你可以改变得到你想要的。
考虑到这是你在客户端的脚本:

$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将是base64_,首先对$_post['data']字符串进行解码,然后取消对结果的序列化:
$data = unserialize(base64_decode($_POST['data']));

然后是一些检查:
-$data['action']有效吗?
-如果是:是否找到所需的参数(id表示删除/获取,name表示添加)
-如果是:执行字段检查(有效名称、有效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_在客户端解码 $result字符串。
这是我如何实现一个简单的webservice来跨不同服务器上的域共享数据的基本解释。当然,我愿意接受其他人的各种改进和建议。
//小插件:
我序列化和base64编码响应的原因是,数组不能作为文本响应发送,而且序列化的字符串在客户端接收时可能会导致问题。
参数的序列化和base64编码不是必需的,它只是通过http协议传输数据时的一点额外安全性。只是把curl_optpostfields用作'?action=get&id=2'也行!或者您可能希望服务使用友好的url并创建url www.webservice.com/api-contacts/get/2
作为响应类型,有一些常见的事情:
1)XML响应
2)JSON响应
3)base64_编码的序列化数组
但是,在某些情况下,简单的文本响应“ok”就足够了。或者您可能希望构建您的webservice来理解像“200ok”这样的http头响应。

关于php - 如何创建一个接受字符串并执行数据库操作的php Web服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15656027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com