wendelladriel / laravel-caller
轻松创建外部服务的 HTTP 客户端
Requires
- php: ^8.0
Requires (Dev)
- illuminate/http: ^7.0|^8.0|^9.0
- illuminate/support: ^7.0|^8.0|^9.0
- laravel/pint: ^1.0
README
轻松创建外部服务的 HTTP 客户端
安装
composer require wendelladriel/laravel-caller
使用以下命令发布配置文件
php artisan vendor:publish --provider="WendellAdriel\LaravelCaller\LaravelCallerServiceProvider" --tag=config
用法
此包为 Laravel 的 HTTP 客户端提供包装器,以便以简单的方式创建外部服务的客户端。
首先,您需要在 config/caller.php
文件中配置一个或多个服务,默认文件中有一个 default
服务的示例,您可以根据该示例进行配置或创建新的服务
<?php return [ /* |-------------------------------------------------------------------------- | SERVICES |-------------------------------------------------------------------------- | | Here you can configure multiple services that you want to create an HTTP Client for. | The auth types supported are: basic, digest and token. | For more information on these settings check: https://laravel.net.cn/docs/http-client | */ 'services' => [ 'default' => [ 'url' => env('CALLER_DEFAULT_URL', 'https://example.com'), 'timeout' => env('CALLER_DEFAULT_TIMEOUT', 30), 'retries' => env('CALLER_DEFAULT_RETRIES', 0), 'retry_after' => env('CALLER_DEFAULT_RETRY_AFTER', 100), 'cookies_domain' => env('CALLER_DEFAULT_COOKIES_DOMAIN', 'https://example.com'), 'auth' => [ 'type' => env('CALLER_DEFAULT_AUTH_TYPE', 'basic'), 'user' => env('CALLER_DEFAULT_AUTH_USER', 'me@example.com'), 'password' => env('CALLER_DEFAULT_AUTH_PASSWORD', 's3Cr3T'), 'token' => env('CALLER_DEFAULT_AUTH_TOKEN'), 'token_type' => env('CALLER_DEFAULT_AUTH_TOKEN_TYPE', 'Bearer'), ], 'headers' => [ // ADD HEADERS HERE // 'X-First' => 'FOO', ], 'cookies' => [ // ADD COOKIES HERE // 'FOO' => 'BAR', ], ], ], ];
配置完您的服务后,只需在 config
文件中创建一个具有服务 name/key
的 Caller
类。例如,要创建一个连接到 Twitter 服务的客户端,您可以使用
<?php namespace App; use WendellAdriel\LaravelCaller\Caller; // YOUR CODE HERE $twitterClient = new Caller('twitter'); // OR YOU CAN USE THE STATIC METHOD $twitterClient = Caller::make('twitter');
如果您想为 default
服务创建一个 Caller
类,您不需要传递任何参数
<?php namespace App; use WendellAdriel\LaravelCaller\Caller; // YOUR CODE HERE $twitterClient = new Caller(); // OR YOU CAN USE THE STATIC METHOD $twitterClient = Caller::make();
发送请求
使用 Caller 类,您可以访问 Laravel HTTP 客户端相同的所有方法:head
、get
、post
、put
、patch
和 delete
。它们都具有相同的签名。以下是一个获取方法的签名示例
<?php /** * @param string $url - The URL for the request that will be joined with the base URL configured in the service * @param array $params - The params to be sent to the request * @param bool $asForm - If the request should be sent as "application/x-www-form-urlencoded" * @param bool $isPublic - If is set to true the auth won't be configured for the request * @param array $headers - Specific headers for the request that will be merged with the headers configured in the service * @param array $cookies - Specific cookies for the request that will be merged with the cookies configured in the service * @param bool $debug - Dumps the outgoing request before it is sent and terminate the script's execution * @return Response */ public function get( string $url, array $params, bool $asForm = false, bool $isPublic = false, array $headers = [], array $cookies = [], bool $debug = false ): Response
更新服务
如果您想在发送新请求之前使用相同的 Caller
对象与不同的服务,可以调用 setService
方法,并传入您想要的服务 name/key
<?php namespace App; use WendellAdriel\LaravelCaller\Caller; // YOUR CODE HERE $client = new Caller(); // USES THE DEFAULT SERVICE $client->setService('twitter'); // CHANGES TO THE TWITTER SERVICE
使用不同的认证凭证
默认情况下,Caller
对象将使用在 config
文件中设置的 auth type
和 credentials
。如果您需要根据登录用户使用不同的认证凭证(例如),可以使用 setAuthUser
、setAuthPassword
和 setAuthToken
方法来覆盖这些凭证
发送附件
如果您需要在请求中发送一个 attachment
,在调用请求之前使用 setAttachment
方法。这将只添加附件到您的下一个请求。该方法接收一个 CallerAttachment
对象
<?php namespace App; use WendellAdriel\LaravelCaller\Caller; use WendellAdriel\LaravelCaller\CallerAttachment; // YOUR CODE HERE $client = new Caller(); $client->setAttachment(new CallerAttachment('file', file_get_contents('photo.jpg'), 'photo.jpg')); // THE ATTACHMENT CAN ALSO USE A STREAM RESOURCE AND CAN BE CREATED IN A STATIC WAY $file = fopen('photo.jpg', 'r'); $client->setAttachment(CallerAttachment::make('file', $file, 'photo.jpg'));
待办事项
- 创建测试
致谢
贡献
欢迎所有 PR。
对于重大更改,请首先打开一个问题,描述您想要添加/更改的内容。