gajosu / laravel-http-service
这是我的包laravel-http-service
v1.0.3
2022-07-28 21:00 UTC
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.0
- illuminate/contracts: ^9.0|^8.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-09 22:31:14 UTC
README
你在Laravel项目中经常对微服务或外部API进行大量HTTP请求吗?
有许多包可以做到这一点,但我还没有找到一个易于测试并提供缓存功能的包。
这个包允许你创建自己的服务,轻松发送请求并进行测试。
安装
您可以通过Composer安装此包
composer require gajosu/laravel-http-service
用法
您可以通过调用外观类HttpService
的request()
方法轻松开始使用它
use Gajosu\LaravelHttpClient\Facades\HttpService; /** @var \Gajosu\LaravelHttpClient\Request\ApiRequestBuilder $builder */ $builder = HttpService::request() ->setMethod('POST') //set base url ->setBaseUri('http://example.com') //set path ->setPath('/test') // set headers ->setHeaders([ 'Authorization' => 'Basic {YOUR_TOKEN}' ]) //set queries strings ->setQuery([ 'query1' => 'param' ]) //set body ->setBody([ 'field1' => 'value' ]); // send the request and get response /** @var \Gajosu\LaravelHttpClient\Response\ApiResponse $response */ $response = $builder->send(); // json data decoded $data = $response->json();
创建自己的服务
如上例所示,您可以使用基础类开始使用此包,但此包的目的是使创建自己的服务变得容易。
您可以通过扩展Gajosu\LaravelHttpClient\HttpService
类来创建自己的服务。
重写getBuilder()
方法,并设置基础URI、头信息、查询等。
在下一个示例中,我们将创建一个向基础URLhttp://myservice.com
发送请求并设置头信息中的访问令牌的服务。
namespace App\Services\MyService; use Gajosu\LaravelHttpClient\HttpService; use Gajosu\LaravelHttpClient\Contracts\HttpRequestBuilder; class MyService extends HttpService { private ?string $access_token = null; public function setAccessToken(string $access_token): void { $this->access_token = $access_token; } public function getAccessToken(): ?string { return $this->access_token; } public function getBuilder(): HttpRequestBuilder { return parent::getBuilder() ->setBaseUri('http://myservice.com') ->setHeaders([ "Authorization" => "Basic {$this->access_token}" ]); } }
下一步是创建一个扩展Gajosu\LaravelHttpClient\Facades\HttpService
类的服务外观。
namespace App\Services\MyService\Facades\MyService; use Gajosu\LaravelHttpClient\Facades\HttpService; /** * @method static void setAccessToken(string $access_token) * @method static string getAccessToken() */ class MyService extends HttpService { protected static function getFacadeAccessor() { return \App\Services\MyService\MyService::class; } }
现在您可以在您的应用程序中使用此服务。
use App\Services\MyService\Facades\MyService; MyService::setAccessToken('{YOUR_TOKEN}'); $response = MyService::request() ->setMethod('POST') ->setPath('/test') ->setQuery([ 'query1' => 'param' ]) ->setBody([ 'field1' => 'value' ]) ->send(); $data = $response->json();
缓存响应
该包还允许您缓存响应。
use App\Services\MyService\Facades\MyService; MyService::setAccessToken('{YOUR_TOKEN}'); $response = MyService::request() ->setMethod('GET') ->setPath('/test') ->setQuery([ 'query1' => 'param' ]) //you can set the cache time in seconds ->cacheFor(60) // or // ->cacheFor(now()->addMinutes(1)) // you can also keep the cache forever // ->cacheForever() ->send(); $data = $response->json();
模拟响应
例如,要指示包为所有请求返回状态码为200且内容为空的模拟响应,您可以使用fake()
方法。
use App\Services\MyService\Facades\MyService; MyService::fake() $response = MyService::request() ->setMethod('GET') ->setPath('/test') ->setQuery([ 'query1' => 'param' ]) ->fakeResponse(200, []) ->send(); $data = $response->json();
指定响应
您还可以通过向shouldReceiveResponses
方法传递一个数组来指定响应代码、头信息和内容。
use App\Services\MyService\Facades\MyService; MyService::fake(); MyService::shouldReceiveResponses([ [ new \GuzzleHttp\Psr7\Response( status : 200, body: '{"success" : true}' ), new \GuzzleHttp\Psr7\Response( status : 201, body: '{"created" : true}' ) ] ]); $response = MyService::request() ->setMethod('GET') ->setPath('/test') ->setQuery([ 'query1' => 'param' ]) ->send(); //get first fake response // [ // "success" => true // ] $data = $response->json(); //get second fake response // [ // "created" => true // ] $data = $response->json();
测试
composer test
变更日志
请参阅变更日志以获取有关最近更改的更多信息。
贡献
请参阅贡献指南以获取详细信息。
安全漏洞
请查阅我们的安全策略了解如何报告安全漏洞。
鸣谢
许可
MIT许可(MIT)。请参阅许可文件以获取更多信息。