nojimage/cakephp-rest

一个包含用于与RESTful Web服务交互的数据源的CakePHP插件。

安装: 714

依赖者: 0

建议者: 0

安全: 0

星标: 14

关注者: 6

分支: 27

类型:cakephp-plugin

2.0.3 2013-06-14 01:59 UTC

This package is auto-updated.

Last update: 2024-08-29 03:47:16 UTC


README

一个包含用于与RESTful Web服务交互的数据源的CakePHP插件。

Build Status

要求

  • PHP 5.2.8以上
  • CakePHP 2.x。

安装

获取插件

使用composer

composer require "nojimage/cakephp-rest":"2.*"

或者,使用git子模块

git submodule add https://github.com/nojimage/CakePHP-ReST-DataSource-Plugin.git app/Plugin/Rest

设置APP/Config/bootstrap.php

CakePlugin::load('Rest');

工作原理

  • 数据源通过CakePHP的HttpSocket类(默认)或您自己的实现/扩展(例如,启用OAuth的HttpSocket http://github.com/neilcrookes/http_socket_oauth),在构造函数中传递,发出HTTP请求。
  • 它实现了创建、读取、更新和删除方法,这些方法由Model::save()、Model::find()和Model::delete()调用。这些方法期望您的Model对象具有一个请求属性,其格式定义在HttpSocket::request中,如果尚未设置,则将适当的HTTP动词添加到数组中,例如POST、GET、PUT、DELETE。
  • 这些方法调用公共RestSource::request()方法,传递一个您的模型对象的实例,但您也可以直接访问它,传递一个具有请求属性的对象,或一个格式定义在HttpSocket::request中的数组,或一个字符串,该字符串是一个URI。
  • HttpSocket::request()的原始响应根据响应的内容类型标题(目前支持XML和JSON)转换为数组,并在成功(由2xx HTTP响应代码确定)时返回结果,或在失败时返回布尔值false。
  • 此外,如果请求()方法的参数是对象,则结果也添加到对象的response属性中,如果请求失败,并且对象具有onError()方法,则将触发该方法。

直接使用

  1. 在APP/Config/database.php中,向数据源定义中添加。

    /**

    • RestSource
    • @var array */ public $rest = array( 'datasource' => 'Rest.RestSource', 'database' => false, );
  2. 为每个您想要与之交互的Web服务中的事物创建一个模型。例如创建一个TwitterStatus模型

  3. 确保您的模型使用此数据源,通过设置它来在$useDbConfig属性中,例如。

    public $useDbConfig = 'rest';

  4. 在您模型中创建一个与您可以通过Web服务执行的功能相对应的方法。例如。

    public function save($data = null, $validate = true, $fieldList = array()) {
      $this->request = array(
        'uri' => array(
          'host' => 'twitter.com',
          'path' => 'statuses/update.json'
        ),
        'body' => array(
          'status' => $data['TwitterStatus']['text']
        )
      );
      return parent::save($data, $validate, $fieldList);
    }
    
  5. 在您的应用程序的任何地方,调用

    $result = ClassRegistry::init('TwitterStatus')->save(array('TwitterStatus' => array('text' => 'Hello World!')));
    

注意。此示例仅为示例,不包括例如身份验证等,但演示了基本思想。

其他用途

我将此功能从许多其他数据源中抽象出来,并将其广泛用作基础数据源,为每个需要的Web服务扩展,在这些类中处理每个Web服务的具体细节,例如身份验证,通过重载Rest数据源中的每个公共方法来处理。

例如,您可以创建一个TwitterSource,它扩展了RestSource,并重载构造函数以传递我的 HttpSocketOauth扩展到CakePHP的HttpSocket类的实例,以及请求()方法,添加常见的请求参数,例如主机键和在路径键的末尾加上'.json',以及特定的身份验证参数,然后只需调用parent::request()来处理请求的发出和响应的解析。