inadarei/restagent

RestAgent 是一个用于 PHP 的 HTTP/HTTPS 客户端库。

2.2.1 2015-01-14 04:25 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:55:29 UTC


README

Packagist Build Status Coverage Status Codacy Badge

RestAgent 是一个用于 PHP 的 HTTP/HTTPS 客户端库。项目的主要目标是:

  • 提供优雅直观的 API。
  • 正确支持 HTTPS。
  • 最小化模板代码,让使用 PHP 处理 HTTP(S) 更加愉快。
  • 提供丰富的功能集以支持 RESTful 交互。

RestAgent 的 API 吸取了 Node.js 的 SuperAgent 库的 API 简洁性,该库由 TJ Holowaychuk 开发,可在 https://github.com/visionmedia/superagent 找到。

兼容性

PHP 5.3 或更高版本。

安装

1. 安装 Composer

$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
$ composer -v

或者查看详细文档: https://getcomposer.org/doc/00-intro.md

2. 在项目中包含 RestAgent

在您的 composer.json 中添加 inadarei/restagent

{
  "require": {
    "inadarei/restagent": "^2.0.0"
  }
}

运行: composer install

安装后,您需要在项目文件中引入 Composer 的自动加载器,如果您尚未这样做的话

require_once './vendor/autoload.php';

快速文档

发送请求

发送简单的 HTTP GET 请求

$request = new \Restagent\Request;

$response = $request->get("http://example.com/user/1");

设置请求的基本 URL

$request = new \Restagent\Request('http://restagent.vm:8080/api/');

$response = $request->get("/user/1");

有点戏剧性,请看下面

$response = $request->header('Content-Type', 'application/json')
                    ->header("X-API-Key", "aabbccdd")
                    ->get("http://example.com/user/1");

组装并发送 HTTP POST 请求

$response = $request
                ->header("X-API-Key", "aabbccdd")
                ->data(array("firstName" => "Irakli", "lastName" => "Nadareishvili"))
                ->data("hobby", "programming")
                ->header(array("User-Agent" => "RestAgent/1.0 php/libcurl", "foo" => "bar"))
                ->param("active", 1)
                ->post("http://example.com/user");

在 HTTP BODY 中包含原始数据的 HTTP PUT 请求

$json = '{"name" : "irakli", "lastname" : "nadareishvili"}';
$response = $request
                ->header("X-API-Key", "aabbccdd")
                ->body($json)
                ->header(array("User-Agent" => "RestAgent/1.0 php/libcurl", "foo" => "bar"))
                ->put("http://example.com/user");

使用自定义 HTTP 方法并设置自定义超时时间

$response = $request
                ->data(array("firstName" => "Irakli", "lastName" => "Nadareishvili"))
                ->header("X-API-Key", "aabbccdd")
                ->header(array("User-Agent" => "CERN-LineMode/2.15 libwww/2.17b3"))
                ->method("PATCH")
                ->timeout(500)
                ->send("/user/1");

在哪里

  • header() 设置 HTTP 头部
  • data() 设置在请求过程中传递的数据变量。在 HTTP GET 的情况下,它可以是查询参数;在 HTTP POST、PUT 等情况下,它可以是 HTTP 主体中的变量。
  • param() 允许在非 HTTP GET 调用中设置查询参数(即当 data() 会设置请求体中的变量而不是 URL 时)。注意:不要在 HTTP GET 中使用 param(),否则您将收到异常。请使用 data() 代替!更多内容请见下文。
  • head(), get(), post(), put() 和 delete() 调用会发送相应的 HTTP 请求。
  • method() 设置与 send() 调用一起使用的自定义 HTTP 方法。
  • timeout() 覆盖默认超时为指定的毫秒数。

请注意,data(), param() 和 header() 方法可以接受数组或单个名称/值对作为参数。为什么?因为根据不同情况,它们都可能是方便的。

此外,像 ->get() 和 ->post() 这样的方法只是调用 ->method("get")->send(...) 的便利快捷方式。如果您想使用上述列表中未包含的任何 HTTP 方法,请尝试发出 ->method(...)->send();

为什么 param() 又出现了?

param() 方法的目的是令人困惑的,可能需要进一步的解释。

在纯粹 RESTful 的观点中,我们希望有一种统一的方式来进行 HTTP 调用并传递变量,就像我们做的那样。因此,作为一条一般规则,能够使用统一的 data() 方法设置请求数据非常重要。之后,我们可以进行适当的 HTTP-verb 调用(无论是 GET、PUT 还是其他什么),而不用担心动词如何编码数据(在 URL 中或 HTTP 主体中)的细节。

话虽如此,有时我们确实需要在HTTP调用中添加HTTP查询参数,即使这些调用在HTTP体中编码了变量(例如POST或PUT)。无论我们是否认为它是RESTful的,在HTTP中都是允许的,有时甚至可能是一种必要的“邪恶”。这就是为什么存在param()的原因:允许此类用例。

然而,我们不允许在HTTP GET中使用param(),因为data()方法已经做了param()会做的事情,如果有人决定通过param()和data()同时设置相同的变量,那么就会产生混淆,决定哪种方法具有优先级或者变量如何合并。

这就是为什么在HTTP GET调用中使用param()会导致异常,这个异常基本上表明:“我们给你提供了一个在POST、PUT等操作中快捷系统的方法,现在不要那么愚蠢,不要试图在GET中用它,因为你真的不应该用它”。

这就是param()及其与data()之间关系的漫长故事...

响应格式

head()、get()、post()、put()、delete()和send()调用返回一个关联数组,具有以下结构

  • code: HTTP响应代码。
  • meta: 来自CURL的关于调用的大量元信息。
  • data: 除HTTP HEAD之外任何HTTP方法的响应内容。根据定义,后者不返回任何内容,因此'data'包含解析后的HTTP响应头。

CURL调试

通过设置REST_AGENT_DEBUG(实际上可以是任何值)

export REST_AGENT_DEBUG=true

您可以使用CURL调试。

许可证

(MIT许可证)

版权所有 (c) 2012-2015 Irakli Nadareishvili

以下条件下,任何人都可以免费获得本软件及其相关文档副本(“软件”),不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许获得软件的人这样做,前提是

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些索赔、损害或其他责任是由合同行为、侵权行为或其他方式引起的,无论是否与软件或其使用或其他交易有关。