【问题标题】:How to create a webservice with PHP for iOS?如何使用 PHP for iOS 创建 Web 服务?
【发布时间】:2013-03-25 20:01:07
【问题描述】:

我有一个网站,用 PHP 和 MySQL 数据库编写。为了学习如何编写 iPhone 和 Android 应用程序,我想创建一个可供 iOS 和 Android 应用程序使用的网络服务。

我该如何继续?访问 MySQL 数据库的功能已经到位,因为它们现在已用于该站点 - 但是下一步如何使这些功能/类可用于我的 Web 服务并因此可用于应用程序?我有哪些选择?认证?节点.js?有人知道很棒的教程吗?

谢谢。

【问题讨论】:

  • 这个问题的边界线太宽或离题了。你真的不能在谷歌上搜索任何细节并返回一个更具体的问题吗?

标签: php android ios web-services


【解决方案1】:

对于从设备向您网站的 API 请求信息,我建议使用 GET 或 POST:

获取

http://www.example.com/api/v1/getUsers?username=User*

发布

http://www.example.com/api/v1/getUsers

Post the following information to the above URL:
  username = User*

关于来自网络服务器的响应,我建议以 JSON 或 XML 格式输出信息。 Android 和 iOS 都有内置的 XML 解析库,也有 3rd-party 库来解析 JSON。如今,它们甚至可能是内置的。

我的建议是同时支持 JSON 和 XML,因此您可以使用最适合您正在使用的开发环境约束的任何方法:

JSON

{
  'success':True,
  'users': [
    {'id': 1, 'username': 'User1'},
    {'id': 2, 'username': 'User2'},
    {'id': 3, 'username': 'User3'}
  ]
}

XML(利用属性)

<response>
  <success>1</success>
  <users>
    <user id="1" username="User1" />
    <user id="2" username="User2" />
    <user id="3" username="User3" />
  </users>
</response>

XML(仅使用标签)

<response>
  <success>1</success>
  <users>
    <user>
      <id>1</id>
      <username>User1</username>
    </user>
    <user>
      <id>2</id>
      <username>User2</username>
    </user>
    <user>
      <id>3</id>
      <username>User3</username>
    </user>
  </users>
</response>

在PHP中,可以通过以下方式输出JSON:

<?php

$response = array(
  'success': True,
  'users': array(
    array('id' => 1, 'username' => 'User1'),
    array('id' => 2, 'username' => 'User2'),
    array('id' => 3, 'username' => 'User3')
  )
)

print json_encode($response);

根据您是否要使用标签属性,输出 XML 会稍微复杂一些...

【讨论】:

  • 谢谢约书亚。很大的帮助!我如何在开始时使用 oAuth 来授权我的应用程序?据我了解,我有一个 MySQL 表,我在其中添加了一个 app-id、一个键和一个令牌。如果 App 调用函数 authorize(appid, key),db 会检查 appid 和 key 是否匹配并返回必须在与 web 服务的每个事务中使用的令牌?
【解决方案2】:

您需要的是您的应用可以访问的 API。你可以用任何你喜欢的方式定义它们,但有些方式比其他方式更常见,例如 RESTful 实现。

使用 rest,您可以使用 4 个动词为域上的数据定义访问点:GET、POST、UPDATE 和 DELETE。您可能认识其中两个。

使用诸如 Slim Framework for php 之类的库,您可以像这样定义访问点:

    self::$Slim->post('/document', '\MyApp\DocumentController::newDocument');
    // Get all documents for authenticated user
    self::$Slim->get('/document', '\MyApp\DocumentController::getAllDocuments');

在此示例中,Web 服务将接受对 /document 的 post 或 get 请求,其中 get 表示“获取所有文档”,而 post 表示“新建”。这些函数是静态的,因此您不必为任何给定情况实例化所有控制器。

无论哪种情况,结果都是使用 JSON 发出的。 iOS 和 Android 都可以使用内置函数或第三方库来解释 JSON。我个人喜欢 AFNetworking for iOS。

简而言之,创建 www.yourdomain.com/api,并使用 Slim 框架添加 /api/document 等入口点,并让这些入口点执行您的逻辑。使用 JSON 响应,例如在 php.ini 中使用 json_encode()。在应用端使用 AFNetworking 发出请求并解释 JSON 数据。

同样,这些是我的偏好,还有其他方法。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 2018-08-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多