anomalyce / interlocutor
Requires
- php: ^8.1
- illuminate/pipeline: ^9.1.0
- psr/http-message: ^1.0.1
Requires (Dev)
- guzzlehttp/guzzle: ~7.4
- pestphp/pest: ^1.21
- pestphp/pest-plugin-mock: ^1.0
- vlucas/phpdotenv: ^5.4
Suggests
- guzzlehttp/guzzle: Required for the GuzzleHttp engine.
This package is auto-updated.
Last update: 2024-09-07 18:55:53 UTC
README
一个保持API集成良好组织的HTTP包装器。
composer require anomalyce/interlocutor
概念
在我们开始查看一些代码之前,了解一些该包背后的核心概念非常重要...
引擎
Interlocutor包实际上并不自己发送任何HTTP请求,而是依赖于底层的HTTP客户端(或引擎)来执行。你可以通过确保它实现了\Anomalyce\Interlocutor\Contracts\Engine接口,轻松地为你喜欢的HTTP客户端创建一个实现。
默认情况下,Interlocutor包提供了一个简单的Guzzle引擎实现。虽然这是默认提供的,但如果你要使用它,必须手动决定安装guzzlehttp/guzzleComposer包。
端点
Interlocutor包建立在这样一个理念之上:你打算与之交互的每个API端点都应该有它自己的专用端点类(实现\Anomalyce\Interlocutor\Contracts\Endpoint接口)。
这不仅让你能够将所有与该API端点相关的信息都集中在一个地方,而且还能让你轻松地在应用程序的多个地方使用相同的请求。
简而言之,端点类包含了进行请求所需的所有信息。HTTP动词、端点URL、所需的数据和头信息。它还允许你轻松修改请求对象(由引擎组装),转换响应或处理可能抛出的任何异常。
驱动器
如果你在与任何大型API进行工作,你很可能会与多个端点进行交互,这意味着你突然之间为每个端点重复了一堆代码...
这就是驱动器发挥作用的地方。驱动器(实现\Anomalyce\Interlocutor\Contracts\Driver接口)基本上是一种在同一个地方完成所有重复性任务的方法(例如,指定基本URL、设置常见头信息、API凭证、使用json_decode()解析响应等)。
所有由正在使用的驱动器指定的数据都从其驱动器方法传递到相应的端点方法作为参数。唯一的例外是handleExceptions方法,它是端点优先,驱动器次之。然后端点将根据这些信息如何进行操作(合并、覆盖或忽略)。
用法
在下面的示例中,我们将使用提供的Guzzle引擎,因此还必须安装Guzzle HTTP库。
composer require guzzlehttp/guzzle
接下来我们需要创建我们的Interlocutor对象。在大多数情况下,你只需要在你的应用程序中创建一次。将其放在应用程序中的合适位置(例如,在服务提供者中)。
use Anomalyce\Interlocutor\{ Engines, Interlocutor }; $interlocutor = new Interlocutor( new Engines\GuzzleHttp );
这就是你需要做的设置工作。现在是时候创建你的端点和/或驱动器了,但由于这严重依赖于API本身的外观,我将简单地引用我们的示例和各种接口,这些内容在下文中列出。
一旦你设置了所有端点对象,你可以通过两种不同的方式发送请求。要么,你可以像这样将其传递给$interlocutor对象的send方法...
$request = new \Example\Vendor\MyEndpoint('passing-data-here'); $response = $interlocutor->send($request); print_r($response);
或者,你可以在你的端点类中利用\Anomalyce\Interlocutor\Interlocutory特质,让它们能够自我发送。我将让你决定哪种方式最适合你和你自己的应用程序。
// class MyEndpoint implements \Anomalyce\Interlocutor\Contracts\Endpoint { // use \Anomalyce\Interlocutor\Interlocutory; // } $request = new \Example\Vendor\MyEndpoint('passing-data-here'); $response = $request->send(); print_r($response);
参考文献
接口
\Anomalyce\Interlocutor\Contracts\Engine\Anomalyce\Interlocutor\Contracts\Endpoints\Anomalyce\Interlocutor\Contracts\Driver