gino-pane/nano-rest

PHP的极简且自包含的cURL HTTP REST客户端

v1.2.3 2018-02-13 19:32 UTC

This package is auto-updated.

Last update: 2024-09-10 05:37:22 UTC


README

Latest Stable Version Build Status Maintainability Test Coverage Scrutinizer Code Quality SensioLabs Insight License Total Downloads

易于使用且自包含的轻量级包,用于处理cURL请求。

例如,像Guzzle这样的包当然很棒,但对于小型项目来说太重了。对于一些简单的事情,你不需要一个过度设计的包,这时一个小巧的解决方案可能会帮到你。

需求

  • PHP >= 7.1;
  • cURL扩展。

安装

使用命令行要求包

composer require "gino-pane/nano-rest:1.*"

或者只需在现有的composer.json中添加一个新的依赖项,并在之后运行composer install

"require": {
    ...
    "gino-pane/nano-rest": "1.*"
}

使用方法

项目的理念意味着使用RequestContextResponseContext对象。`RequestContext`聚合请求设置,而`ResponseContext`包含响应数据。

响应上下文可以类型化。目前只有`JsonResponseContext`可用于JSON响应。响应类型必须由用户显式设置。如果没有设置响应类型,则将使用`DummyResponseContext`。

请查看下面的示例,这可能有助于阐明一切。

向端点POST一些数据

require './vendor/autoload.php';

$nanoRest = new NanoRest();

//create request context
$requestContext = (new RequestContext('http://httpbin.org/post')) //pass URL to constructor
    ->setMethod(RequestContext::METHOD_POST) //set request method. GET is default
    ->setRequestParameters([ //set some request parameters. They will be attached to URL
        'foo' => 'bar'
    ])
    ->setData('Hello world!') //set request data for body
    ->setContentType(RequestContext::CONTENT_TYPE_TEXT_PLAIN) //being set by default
    ->setHeaders([ // set some headers for request
        'bar' => 'baz'
    ])
    ->setResponseContextClass(JsonResponseContext::class); //explicitly set expected response type

$responseContext = $nanoRest->sendRequest($requestContext);

$responseContext->getHttpStatusCode(); //200
$responseContext->hasHttpError() //false

$responseContext->getArray();

/**
array(8) {
  'args' =>
  array(1) {
    'foo' =>
    string(3) "bar"
  }
  'data' =>
  string(12) "Hello world!"
  'files' =>
  array(0) {
  }
  'form' =>
  array(0) {
  }
  'headers' =>
  array(8) {
    'Accept' =>
    string(3) "*/*"
    'Accept-Encoding' =>
    string(13) "deflate, gzip"
    'Bar' =>
    string(3) "baz"
    'Connection' =>
    string(5) "close"
    'Content-Length' =>
    string(2) "12"
    'Content-Type' =>
    string(25) "text/plain; charset=UTF-8"
    'Host' =>
    string(11) "httpbin.org"
    'User-Agent' =>
    string(13) "php-nano-rest"
  }
  'json' =>
  NULL
  'origin' =>
  string(12) "93.85.47.181"
  'url' =>
  string(31) "http://httpbin.org/post?foo=bar"
}
*/

RequestContext提供了setCurlOption/setCurlOptions,允许覆盖默认的cURL选项并自定义满足所有需求请求。请仔细检查源代码和提供的`IntegrationTest`以获取完整概念。

更改请求查询的生成方式

默认情况下,`http_build_query`使用PHP方括号语法编码数组,如下所示

?text[0]=1&text[1]=2&text[2]=3

但有时你希望它像这样工作

?text=1&text=2&text=3

或者以其他自定义定义的方式。

这就是为什么在`RequestContext`中添加了`setEncodeArraysUsingDuplication`和`setHttpQueryCustomProcessor`方法。

$url = "http://some.url";
$data = ['text' => [1,2,3]];

$request = (new RequestContext($url))
            ->setRequestParameters($data)
            ->setEncodeArraysUsingDuplication(false);

$requestUrl = $request->getRequestUrl(); //http://some.url?text%5B0%5D=1&text%5B1%5D=2&text%5B2%5D=3

$request = (new RequestContext($url))
            ->setRequestParameters($data)
            ->setEncodeArraysUsingDuplication(true);

$requestUrl = $request->getRequestUrl(); //http://some.url?text=1&text=2&text=3

`setHttpQueryCustomProcessor`方法允许您设置一个自定义的`Closure`,该`Closure`将在HTTP查询字符串上调用,以便您可以按自己的意愿处理它。初始请求`$data`数组将作为第二个参数传递给它。

$url = "http://some.url";
$data = ['text' => [1,2,3]];

$request = (new RequestContext($url))
            ->setRequestParameters($data)
            ->setEncodeArraysUsingDuplication(true);
            
$request->setHttpQueryCustomProcessor(
    function (string $query, array $data) {
        return str_replace('text', 'data', $query);
    }
);

$requestUrl = $request->getRequestUrl(); //http://some.url?data=1&data=2&data=3

有用工具

运行测试

php vendor/bin/phpunit

composer test

代码检查工具

php vendor/bin/phpcs --standard=PSR2 src/

composer psr2check

代码自动修复器

php vendor/bin/phpcbf --standard=PSR2 src/ 

composer psr2autofix

构建文档

php vendor/bin/phpdoc -d "src" -t "docs"

composer docs

更新Cacert.pem

    php bin/update-cacert.php
 
 or
 
    composer update-cacert

变更日志

请参阅CHANGELOG.md以保持跟踪。

贡献

请参阅CONTRIBUTING.md

许可证

请参阅LICENSE

备注

composer-package-template提供支持