gino-pane / nano-rest
PHP的极简且自包含的cURL HTTP REST客户端
Requires
- php: ^7.1
- ext-curl: *
- gino-pane/nano-http-status: ^1.0
Requires (Dev)
- phpdocumentor/phpdocumentor: ^2.0
- phpmd/phpmd: ^2.6
- phpunit/phpunit: ^6.0
- squizlabs/php_codesniffer: ^3.0
README
易于使用且自包含的轻量级包,用于处理cURL请求。
例如,像Guzzle这样的包当然很棒,但对于小型项目来说太重了。对于一些简单的事情,你不需要一个过度设计的包,这时一个小巧的解决方案可能会帮到你。
需求
- PHP >= 7.1;
- cURL扩展。
安装
使用命令行要求包
composer require "gino-pane/nano-rest:1.*"
或者只需在现有的composer.json
中添加一个新的依赖项,并在之后运行composer install
"require": {
...
"gino-pane/nano-rest": "1.*"
}
使用方法
项目的理念意味着使用RequestContext
和ResponseContext
对象。`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。