如何将 iOS 应用程序连接到 Symfony2 RESTful Webservice?

Posted

技术标签:

【中文标题】如何将 iOS 应用程序连接到 Symfony2 RESTful Webservice?【英文标题】:How to connect iOS App to Symfony2 RESTful Webservice? 【发布时间】:2013-11-29 20:24:49 【问题描述】:

我有一个 ios 应用程序正在运行并且能够连接到 RESTful php Web 服务。该网络服务最初是用原生 PHP 构建的,现在我将它迁移到 Symfony2 网络服务。在 iOS 端,我以 JSON 格式发送请求,服务器处理数据并返回 JSON 响应数据,一切正常。

现在,我的 symfony2 网络服务能够对使用 httpie(用于测试)从浏览器窗口或终端发出的请求做出正确响应,如果我在参数中指定 .json,它会在浏览器窗口中返回 json 数据。但是,我不确定如何让 iOS 应用程序而不是浏览器发送请求。如果该信息有任何意义,我正在使用 FOSRestBundle。这是来自终端的示例:

http http://serveripaddress/web/app_dev.php/users/1.json Accept:application/json

它按预期返回 id = 1 的用户的 json 数据表示:

HTTP/1.1 200 OK
Allow: GET, PUT, DELETE
Cache-Control: no-cache
Content-Type: application/json
Date: Fri, 29 Nov 2013 20:15:43 GMT
Server: Apache/2.2.22 (Ubuntu)
Set-Cookie: PHPSESSID=n8o72oq61isruuov1bqgc9udf5; path=/
Transfer-Encoding: chunked
X-Debug-Token: 6c3818
X-Powered-By: PHP/5.3.10-1ubuntu3.8


     "id": 1, 
        "last_name": "Robinson", 
        "first_name": "Jack", 
         ....More data truncated ...

在我的浏览器中,我可以通过在地址栏中使用:http://serveripaddress/web/app_dev.php/users/1.json 来获得相同的结果。如何让 iOS 应用发送相同的请求?我想我需要的唯一更改是在 symfony2 代码中接受请求?请举一个简短的例子,我可以从例子中找出其余的。

编辑更详细:

澄清一下,我需要的是如何启动与服务器端 REST Symfony2 应用程序的连接。同样,这是我之前在使用原生 PHP 时所做的,但我如何连接到 Symfony2 路由?在使用本机版本时,我所做的是构造一个字典WithObjectandKeys,将命令的键值对(在PHP端)和参数作为JSON传递,并让服务器端返回JSON数据响应和成功或失败,简单明了.如果我使用 Symfony2,我猜这些命令现在变成了一条路线,怎么办?我正在使用 AFNetworking,iOS 客户端上的所有内容都不需要更改,除了我连接到 Symfony2 的部分。请举个例子给我一个具体的图片。

【问题讨论】:

【参考方案1】:

例如,您可以使用AFNetworking 2。它是一个完整的框架,允许您使用 Web 服务(以及更多)。

顺便说一句,您可以简单地使用(并触发)NSURLRequest,但如果您的应用程序与 webService 交互很多,我建议使用 AFNetworking。 (相信我,如果您想在 iOS 上制作应用程序,您确实想知道如何使用它)

【讨论】:

是的,我已经在使用 AFNetworking,它目前非常适合我的需求。您能否举例说明如何连接到名为 get_some_data 的示例路由,参数为 param1、param2?【参考方案2】:

我认为绑定到会话和 cookie 可能违反 REST 特性。我强烈建议您使用类似 WSSE 的东西。您可以将 EscapeWSSEAuthenticationBundle 用于 WSSE。或创建自己的。 深入了解的有用链接:

How to create a custom Authentication Provider

Configure WSSE on Symfony2 with FOSRestBundle

【讨论】:

您能否举一个在身份验证时从 iOS 应用程序实际连接到 Symfony2 应用程序的示例?假设 Symfony 端的路由是 user_login 并以用户名和密码作为参数,我应该如何将其传递给 Symfony2 并以 JSON 形式获得成功或失败响应? 在向 api 发送请求之前不需要 auth。您每次通过 symfony 防火墙上的特殊 wsse 标头对 api 请求进行身份验证。 询问身份验证只是一个例子,我需要的是一个例子,说明如何从客户端发送请求到 REST Symfony2 应用程序,比如从 iOS 或 Java 甚至 JS,只是一个例子是什么我要求。你能举一个这样的例子吗?它可以是任何示例,不一定是 auth,只是我可以研究并弄清楚如何针对我的特定场景进行操作的示例。

以上是关于如何将 iOS 应用程序连接到 Symfony2 RESTful Webservice?的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 上的 Symfony2 ClearDB 配置

未连接到互联网时如何显示警报? iOS

如何在 iOS 中使用 iphone 5 连接到支持蓝牙 2.1 的设备

如何从连接到 Xcode 的设备中理解 ios 崩溃报告?

如何将 Cowboy (Erlang) websocket 连接到 webflow.io 生成的网页

如何将通用链接连接到 UIViewController?