我正在编写我的第一个 Web 服务,但我遇到了与 JSON 数据传递相关的问题。我的 Web 服务分为两个文件:controller.php包含服务处理程序,以及service.php包含应请求提供的类和方法。
这是来自 controller.php 的获取片段:
public function atender() {
// pre-procesamos la petición
if (!empty($_POST)) {
if (!empty($_POST["class"]) && !empty($_POST["action"]) && !empty($_POST["function"])) {
$clase = ucwords($_POST["class"]);
$metodo = "{$_POST["action"]}{$this->obtenerMetodo($_POST["function"])}";
$id = (!empty($_POST["datos"]) ? stripslashes($_POST["datos"]) : null);
我可以在 GET 和 POST 模式下处理请求(我将 GET 用于不需要身份验证的方法,例如getCategories、getCategoryById、getProducts和getProductById。这些是获取寿司餐厅菜肴类别和菜肴的方法。)
对于任何 GET 请求,一切都按预期进行。当我处理 POST 请求时,我的问题就来了。我需要以 JSON 格式获取所有 URL 参数,因为这是为 iOS 应用程序提供服务,而 JSON 是我们处理传入/传出数据的方式。
这是来自 service.php 的处理片段:
public function putUser($datos) {
if (!empty($datos)) {
$usuario = json_decode($datos);
$this->log .= implode("/", $usuario) . "\r\n";
在这种情况下,$datos是来自请求的 JSON 编码数据。它在 controller.php (上面的代码)中作为$id接收。因为这是我的第一个 Web 服务,所以我很可能在这里做了一些非常糟糕的事情,但我有点失明。
我尝试了服务处理代码的不同变体。使用 json_decode($datos, true) 也不起作用。我明白了
'Unexpected token <' 作为响应,并以原始形式(使用 Google Chrome 的高级 REST 客户端)显示:''Warning: implode() [
<a href='function.implode'>function.implode</a>
]: Invalid arguments pass in /home/refine/public_html/sushigo/palma /service.php 在第 344 行'。
我知道 SOAP 通常是编写此类自定义代码的更好替代方案,但现在,我需要坚持使用此代码并为我的下一个项目实现更好的替代方案。你能告诉我我做错了什么吗?