behamin/service-proxy 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

behamin/service-proxy

最新稳定版本:v3.10.0

Composer 安装命令:

composer require behamin/service-proxy

包简介

for proxy or sending requests to other services with useful utilities

README 文档

README

Internal communication between services with useful tools
Make request by laravel http client

Installation

composer require behamin/service-proxy

Publish config

php artisan vendor:publish --provider="Behamin\ServiceProxy\Providers\ProxyServiceProvider" --tag config

Add services

Add your project's base url and global headers in proxy.php config

return [
    /**
     * Headers added to every request
     */
    'global_headers' => [
        'Accept' => 'application/json',
        ...
    ],

    'base_url' => env('PROXY_BASE_URL', env('APP_URL')),
];

Usage

Normal usage

use Behamin\ServiceProxy\Proxy;

// Http Get
Proxy::withToken('Your bearer token')
    ->acceptJson()
    ->retry(3)
    ->withHeaders([
        "Content-Type" => "application\json"
    ])->get('api/articles');
    
Proxy::post('api/articles', [
    "title" => "Test title",
    "body" => "Test body"
]);

Proxy::patch('api/articles/1', [
    "title" => "Test title",
    "body" => "Test body"
]);

Proxy::put('api/articles', [
    "title" => "Test title",
    "body" => "Test body"
]);

Proxy::delete('api/articles/1');

Using http request

use Behamin\ServiceProxy\Proxy;
use Illuminate\Http\Request;

public function index(Request $request) {
    $serviceName = 'test-service';
    Proxy::request($request, $serviceName);
}

Proxy events

On success

use Behamin\ServiceProxy\Proxy;
use Behamin\ServiceProxy\Responses\ProxyResponse;
 
Proxy::get('api/articles/1')->onSuccess(function (ProxyResponse $proxyResponse) {
        $data = $proxyResponse->data();
        $message = $proxyResponse->message();
        $response = $proxyResponse->response();
        $items = $proxyResponse->items();
        $count = $proxyResponse->count();
        ...
    });

On error

use Behamin\ServiceProxy\Proxy;
use Behamin\ServiceProxy\Exceptions\ProxyException;
 
Proxy::get('api/articles/1')->onSuccess(function (ProxyException $proxyException) {
        $proxyResponse = $proxyException->proxyResponse;
        $trace = $proxyException->getTraceAsString();
        ...
    });

On data success

use Behamin\ServiceProxy\Proxy;
 
Proxy::get('api/articles/1')->onDataSuccess(function (array $data) {
        $id = $data['id'];
    });

On data collection success

use Behamin\ServiceProxy\Proxy;
 
Proxy::get('api/articles/1')->onCollectionSuccess(function (array $items, int $count) {
        ...
    });

Proxy response methods

use Behamin\ServiceProxy\Proxy;

$proxyResponse = Proxy::get('api/articles/1');
Method Description
data() given data
items() give items
count() given items count
errors() given errors if there is
message() given message
onSuccess($closure) When http request is successful
onError($closure) When http request is with error
onCollectionSuccess($closure) Get collection when http request is successful
onDataSuccess($closure) Get data when http request is successful
throw() Throw error if http request failed
toException() Get exception if http request failed

Proxy request methods

Method Return Type
fake($callback = null) \Illuminate\Http\Client\Factory
accept(string $contentType) \Behamin\ServiceProxy\Http
acceptJson() \Behamin\ServiceProxy\Http
asForm() \Behamin\ServiceProxy\Http
asJson() \Behamin\ServiceProxy\Http
asMultipart() \Behamin\ServiceProxy\Http
async() \Behamin\ServiceProxy\Http
attach(string array $name, string $contents = '', string null $filename = null, array $headers = []) \Behamin\ServiceProxy\Http
baseUrl(string $url) \Behamin\ServiceProxy\Http
beforeSending(callable $callback) \Behamin\ServiceProxy\Http
bodyFormat(string $format) \Behamin\ServiceProxy\Http
contentType(string $contentType) \Behamin\ServiceProxy\Http
dd() \Behamin\ServiceProxy\Http
dump() \Behamin\ServiceProxy\Http
retry(int $times, int $sleep = 0) \Behamin\ServiceProxy\Http
sink(string resource $to)
stub(callable $callback) \Behamin\ServiceProxy\Http
timeout(int $seconds) \Behamin\ServiceProxy\Http
withBasicAuth(string $username, string $password) \Behamin\ServiceProxy\Http
withBody(resource string $content, string $contentType)
withCookies(array $cookies, string $domain) \Behamin\ServiceProxy\Http
withDigestAuth(string $username, string $password) \Behamin\ServiceProxy\Http
withHeaders(array $headers) \Behamin\ServiceProxy\Http
withMiddleware(callable $middleware) \Behamin\ServiceProxy\Http
withOptions(array $options) \Behamin\ServiceProxy\Http
withToken(string $token, string $type = 'Bearer') \Behamin\ServiceProxy\Http
withUserAgent(string $userAgent) \Behamin\ServiceProxy\Http
withoutRedirecting() \Behamin\ServiceProxy\Http
withoutVerifying() \Behamin\ServiceProxy\Http
pool(callable $callback) array
request(Request $request, string $service) \Behamin\ServiceProxy\Responses\ProxyResponse
get(string $url, array string
delete(string $url, array $data = []) \Behamin\ServiceProxy\Responses\ProxyResponse
head(string $url, array string
patch(string $url, array $data = []) \Behamin\ServiceProxy\Responses\ProxyResponse
post(string $url, array $data = []) \Behamin\ServiceProxy\Responses\ProxyResponse
put(string $url, array $data = []) \Behamin\ServiceProxy\Responses\ProxyResponse
send(string $method, string $url, array $options = []) \Behamin\ServiceProxy\Responses\ProxyResponse
fakeSequence(string $urlPattern = '*') \Illuminate\Http\Client\ResponseSequence
assertSent(callable $callback) void
assertNotSent(callable $callback) void
assertNothingSent() void
assertSentCount(int $count) void
assertSequencesAreEmpty() void

Mocking proxy response

You can use mock() on Proxy class before calling http methods and pass the json path in your 'tests/mock' directory, to mock a json for faking your Proxy response in test mode. Example:

use Behamin\ServiceProxy\Proxy;
Proxy::mock('response.json')->get('address');

统计信息

  • 总下载量: 2.23k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 10
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 10
  • Watchers: 3
  • Forks: 5
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-10-14