erwin32/rest

Rest客户端分支

dev-master 2014-02-08 12:25 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:03:17 UTC


README

(c) 2013 Travis Dent tcdent@gmail.com

基本用法

$api = new RestClient(array(
    'base_url' => "https://api.twitter.com/1.1", 
    'format' => "json", 
     // https://dev.twitter.com/docs/auth/application-only-auth
    'headers' => array('Authorization' => 'Bearer '.OAUTH_BEARER), 
));
$result = $api->get("search/tweets", array('q' => "#php"));
// GET http://api.twitter.com/1.1/search/tweets.json?q=%23php
if($result->info->http_code == 200)
    var_dump($result->decode_response());

可配置选项

headers - 一个包含要包含在每次请求中的HTTP头和值的关联数组。
parameters - 一个参数关联数组,将在每次请求中与单个请求参数合并。
curl_options - 应用到每个请求的cURL选项。这些将覆盖任何自动生成的值。
user_agent - 用户代理字符串。
base_url - 用于每个请求基础的URL。
format - 要附加到资源并支持解码的格式。
format_regex - 从响应Content-Type头中提取格式的模式。
decoders - 格式解码器的关联数组,请参阅下面的文档。
username - 用于基本认证的用户名。需要password
password - 用于基本认证的密码。需要username

可以在实例化时设置选项,或者之后单独设置

$api = new RestClient(array(
    'format' => "json", 
    'user_agent' => "my-application/0.1"
));

-or-

$api = new RestClient;
$api->set_option('format', "json");
$api->set_option('user_agent', "my-application/0.1");

动词

实现了四个HTTP动词作为便捷方法:get()post()put()delete()。每个方法接受三个参数

url - 请求的资源URL。如果已配置,将使用base_url选项添加前缀。如果已配置,将使用format选项添加后缀。
parameters - 查询参数的关联数组,将在GET请求中格式化与URL,并在其他请求中通过请求体传递。
headers - 要包含在请求中的头的关联数组。

可以通过直接调用execute()来使用任何动词,它接受四个参数:urlmethodparametersheaders。所有参数期望与便捷方法相同的值,除了额外的 method 参数

method - 执行请求的HTTP动词。

并非所有端点都支持所有HTTP动词

以下是一些常见解决方案的示例,但完全取决于您访问的端点。请参阅服务的文档,以查看是否需要此操作。

传递一个X-HTTP-Method-Override

$result = $api->post("put_resource", array(), array(
    'X-HTTP-Method-Override' => "PUT"
));

传递一个_method参数

$result = $api->post("put_resource", array(
    '_method' => "PUT"
));

在请求后填充的属性

response - 纯文本响应正文。
headers - 解析后的响应头对象。
info - cURL响应信息对象。
error - 响应错误字符串。

直接迭代和响应解码

如果响应数据格式受支持,则响应将被解码,并且可以通过迭代返回的实例来访问。当设置了format选项时,它将被用于选择解码器。如果没有提供format选项,将尝试从响应Content-Type头中提取它。此模式可以通过format_regex选项进行配置。

$api = new RestClient(array(
    'base_url' => "http://vimeo.com/api/v2", 
    'format' => "php"
));
$result = $api->get("tcdent/info");
foreach($result as $key => $value)
    var_dump($value);

也实现了通过ArrayAccess进行读取

var_dump($result['id']);

要访问解码后的响应作为数组,请调用decode_response()

“json”和“php”格式配置为分别使用内置的json_decodeunserialize函数。可以在实例化时指定重写和额外的解码器,或者在之后单独指定。解码函数接受一个参数:原始请求数据体。使用create_function创建的函数也可以使用。

function my_xml_decoder($data){
    new SimpleXMLElement($data);
}

$api = new RestClient(array(
    'format' => "xml", 
    'decoders' => array('xml' => "my_xml_decoder")
));

-or-

$api = new RestClient;
$api->set_option('format', "xml");
$api->register_decoder('xml', "my_xml_decoder");

或者,不使用运行时函数污染全局作用域。这个特定的例子允许您以数组的形式接收解码后的JSON数据。

$api->register_decoder('json', 
    create_function('$a', "return json_decode(\$a, TRUE);"));